幸福341 发表于 2022-5-12 16:46:49

MT5,外汇,人工神经网络,编程,EA,简洁之2.3订单,持仓,成交记录

一、订单,持仓,成交与历史
订单(Orders):
订单 就是一条指令, 令经纪商买入或卖出一种金融工具。有两种主要的 订单类型: 市价和待定。此外, 还有特别的 止盈 和 止损 价位。简单理解为:你下的买卖订单,即时订单成交后将被清除,没有即时成交的订单为挂单,成交后也被清除,订单被清除后会记录在历史订单中,如下图是挂单,即时订单是看不到的



https://p26.toutiaoimg.com/large/pgc-image/c2871548ec114a798480892fbe59876a

持仓(Positions):
成交 是一种金融证券的商业互换 (买入或卖出)。在采购价 (Ask) 执行买入, 在供给价 (Bid) 执行卖出。成交可以是执行市价单, 或触发挂单的结果。注意在一些情况下, 执行一笔订单可以有若干笔成交,可以简单理解为“成交后没被平仓的订单”



https://p26.toutiaoimg.com/large/pgc-image/83898f8bfe5f4463aef8057db04902b7

成交(Deal):
成交 是一种金融证券的商业互换 (买入或卖出)。在采购价 (Ask) 执行买入, 在供给价 (Bid) 执行卖出。成交可以是执行市价单, 或触发挂单的结果。每笔成交都依据某个订单,注意在一些情况下, 执行一笔订单可以有若干笔成交,
该数据在历史标签中显示



https://p6.toutiaoimg.com/large/pgc-image/3e739a9309524937a63c9817503ab096

历史(History):
下单,平仓与成交过程记录,



https://p3.toutiaoimg.com/large/pgc-image/1e527698de3845a0a1a7e90dcc8a5159

历史数据的不的显示方式



https://p26.toutiaoimg.com/large/pgc-image/30e5768e0e6d433494a73e576008f110



二、订单,交易和持仓的相互关系
平台可以使您轻松跟踪如何持仓或如何执行交易。每个交易操作都有其唯一的ID,被称为“订单号”。每个订单和每笔交易都收到一个与其持仓相关的订单号。每笔交易都会收到一个订单的订单号,并据此达成交易。
如果持仓受多笔交易的影响,例如如果部分平仓或增加持仓,每个交易都包含了持仓的订单号。这可以使跟踪整个持仓历史变得容易得多。
如果交易操作被发送至交易所或流动性提供商,则还包含来自外部系统的ID号。这也可以跟踪平台外操作的相互关系。

https://p3.toutiaoimg.com/large/pgc-image/611d1bc2d72548eba176081c4e962612



三、订单,持仓,成交与历史的属性


订单(挂单)
订单(立即)
成交
持仓
订单(挂单)
历史订单
说明
各索引




Deal_index
Positions_index
Orders_index
Orders_index


持仓号






POSITION_TICKET




可平仓
成交记录号


.deal
DEAL_TICKET








订单号
.order
.order
DEAL_ORDER


ORDER_TICKET
ORDER_TICKET


持仓号(ID)




DEAL_POSITION_ID
POSITION_IDENTIFIER
ORDER_POSITION_ID
ORDER_POSITION_ID
可平仓


订单(挂单)
订单(立即)
成交
持仓
订单(挂单)
历史订单
说明
magic(幻数)
自主设置
自主设置
DEAL_MAGIC
POSITION_MAGIC
ORDER_MAGIC
ORDER_MAGIC


下单价格
自主设置
自主设置


POSITION_PRICE_OPEN
ORDER_PRICE_OPEN
ORDER_PRICE_OPEN


成交价格




DEAL_PRICE








交易利润




DEAL_PROFIT
POSITION_PROFIT(变化)




是否亏了
订单类型(买/卖)
自主设置
自主设置
DEAL_TYPE
POSITION_TYPE
ORDER_TYPE
ORDER_TYPE


交易品种
自主设置
自主设置
DEAL_SYMBOL
POSITION_SYMBOL
ORDER_SYMBOL
ORDER_SYMBOL


订单注释
自主设置
自主设置
DEAL_COMMENT
POSITION_COMMENT
ORDER_COMMENT
ORDER_COMMENT


订单设置交易量
自主设置
自主设置




ORDER_VOLUME_INITIAL
ORDER_VOLUME_INITIAL


一笔成交量




DEAL_VOLUME








持仓量






POSITION_VOLUME







四、分析代码
//+------------------------------------------------------------------+
//| ProjectName |
//| Copyright 2020, CompanyName |
//| http://www.companyname.net |
//+------------------------------------------------------------------+
void buy()
{
/*定义变量并清零*/
MqlTradeRequest request;
MqlTradeResult result;
//*******************************************************************************
//设置重要参数
ZeroMemory(request);
ZeroMemory(result);
request.action=TRADE_ACTION_DEAL; //★交易操作类型★
request.symbol=Symbol(); //★交易的交易品种★
request.volume=2; //★交易量★
request.price=SymbolInfoDouble(Symbol(),SYMBOL_ASK); //★价格(Price)★
request.type=ORDER_TYPE_BUY; //★订单类型★
// request.type_filling=ORDER_FILLING_IOC; //订单执行类型
request.type_filling=ORDER_FILLING_RETURN;
/*发送订单到服务器*/
if(OrderSend(request,result))
{
Print("【Buy】成功"); //显示信息
}
else
{
Print("【Buy】**失败**"); //显示信息
}
Print("deal:",result.deal);
Print("order:",result.order);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void Check()
{
Print("*******开始输出检查信息*******");
//*******************************检查持仓*******************************
Print("*********Positions*********");
int Positions_Total=PositionsTotal(); //获取持仓总数
Print("持仓数量:",Positions_Total);
if(Positions_Total!=0)
{
for(int i=0; i<=Positions_Total-1; i++)
{
ulong Positions_Ticket=PositionGetTicket(i);
Print("Positions_Ticket:",Positions_Ticket);
Print(" POSITION_TICKET:",PositionGetInteger(POSITION_TICKET));
Print(" POSITION_IDENTIFIER:",PositionGetInteger(POSITION_IDENTIFIER));
}
}
else
{
Print("没有持仓");
}
Print(" ");
//**********************************************************************
Print("***********Order***********");
int orders_Total=OrdersTotal();
Print("挂单数量:",orders_Total);
if(orders_Total!=0)
{
for(int i=0; i<orders_Total-1; i++)
{
ulong orders_Ticket=OrderGetTicket(i);
Print("orders_Ticket:",orders_Ticket);
Print(" ORDER_TICKET:",OrderGetInteger(ORDER_TICKET));
Print(" ORDER_POSITION_ID:",OrderGetInteger(ORDER_POSITION_ID));
}
}
else
{
Print("没有挂单");
}
Print(" ");
//*******************************检查历史*******************************
datetime start=0; // 起始时间设为 1970 年
datetime end=TimeCurrent()+60; // 结束时间设为当前服务器时间+60s
HistorySelect(start,end); //在程序的缓存中请求交易历史的所有信息
Print("*******HistoryOrders*******");
//--- 获取交易历史中的订单总数
int history_orders=HistoryOrdersTotal();
Print("历史订单数量:",history_orders);
if(history_orders!=0)
{
//--- 现在扫描 全部订单
for(int i=0; i<=history_orders-1; i++)
{
ulong order_ticket=HistoryOrderGetTicket(i);
Print("order_ticket:",order_ticket);
Print(" ORDER_TICKET:",HistoryOrderGetInteger(order_ticket,ORDER_TICKET));
Print(" ORDER_POSITION_ID:",HistoryOrderGetInteger(order_ticket,ORDER_POSITION_ID));
}
}
else
{
Print("没有历史订单");
}
//*******************************检查成交*******************************
//--- 获取历史中的交易总数
Print("*******HistoryDeals*******");
int history_deals=HistoryDealsTotal();
Print("成交记录数量:",history_deals);
if(history_deals!=0)
{
//--- 现在扫描全部交易
for(int i=0; i<= history_deals-1; i++)
{
ulong deal_ticket=HistoryDealGetTicket(i);
Print("deal_ticket:",deal_ticket);
Print(" DEAL_TICKET:",HistoryDealGetInteger(deal_ticket,DEAL_TICKET));
Print(" DEAL_ORDER:",HistoryDealGetInteger(deal_ticket,DEAL_ORDER));
Print(" DEAL_POSITION_ID:",HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID));
}
}
else
{
Print("没有成交记录");
}
}
//+------------------------------------------------------------------+
//| 初始化函数 |
//+------------------------------------------------------------------+
int OnInit()
{
buy();
buy();
Check();
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//|Tick函数 |
//+------------------------------------------------------------------+
void OnTick()
{
// --- 决定请求交易历史的时间间隔
datetime end=TimeCurrent(); // 当前服务器时间
datetime start=end-PeriodSeconds(PERIOD_D1);// 把起始时间设为24小时之前
//--- 在程序缓存中根据所需时间间隔请求交易历史
HistorySelect(start,end);
//--- 获得历史中的交易总数
int deals=HistoryDealsTotal();
//--- 获取列表中最后一个索引的交易单号
ulong deal_ticket=HistoryDealGetTicket(deals-1);
if(deal_ticket>0) // 我们在缓存中得到交易了,处理它
{
//--- 所达成交易的订单编号
ulong order =HistoryDealGetInteger(deal_ticket,DEAL_ORDER);
long order_magic=HistoryDealGetInteger(deal_ticket,DEAL_MAGIC);
long pos_ID =HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID);
PrintFormat("交易 #%d 订单 #%d ORDER_MAGIC=%d 仓位编号",
deals-1,order,order_magic);
}
else//尝试获取交易没有成功
{
PrintFormat("总之,%d 个交易历史中, 我们无法根据"+
"索引 %d 选择交易. 错误 %d",deals,deals-1,GetLastError());
}
}
//+------------------------------------------------------------------+
//|卸载EA函数 |
//+------------------------------------------------------------------+
void OnDeinit(constint reason)
{
}
//+------------------------------------------------------------------+
页: [1]
查看完整版本: MT5,外汇,人工神经网络,编程,EA,简洁之2.3订单,持仓,成交记录