一、订单,持仓,成交与历史
订单(Orders):
订单 就是一条指令, 令经纪商买入或卖出一种金融工具。有两种主要的 订单类型: 市价和待定。此外, 还有特别的 止盈 和 止损 价位。简单理解为:你下的买卖订单,即时订单成交后将被清除,没有即时成交的订单为挂单,成交后也被清除,订单被清除后会记录在历史订单中,如下图是挂单,即时订单是看不到的
持仓(Positions):
成交 是一种金融证券的商业互换 (买入或卖出)。在采购价 (Ask) 执行买入, 在供给价 (Bid) 执行卖出。成交可以是执行市价单, 或触发挂单的结果。注意在一些情况下, 执行一笔订单可以有若干笔成交,可以简单理解为“成交后没被平仓的订单”
成交(Deal):
成交 是一种金融证券的商业互换 (买入或卖出)。在采购价 (Ask) 执行买入, 在供给价 (Bid) 执行卖出。成交可以是执行市价单, 或触发挂单的结果。每笔成交都依据某个订单,注意在一些情况下, 执行一笔订单可以有若干笔成交,
该数据在历史标签中显示
历史(History):
下单,平仓与成交过程记录,
历史数据的不的显示方式
二、订单,交易和持仓的相互关系
平台可以使您轻松跟踪如何持仓或如何执行交易。每个交易操作都有其唯一的ID,被称为“订单号”。每个订单和每笔交易都收到一个与其持仓相关的订单号。每笔交易都会收到一个订单的订单号,并据此达成交易。
如果持仓受多笔交易的影响,例如如果部分平仓或增加持仓,每个交易都包含了持仓的订单号。这可以使跟踪整个持仓历史变得容易得多。
如果交易操作被发送至交易所或流动性提供商,则还包含来自外部系统的ID号。这也可以跟踪平台外操作的相互关系。
三、订单,持仓,成交与历史的属性
| 订单(挂单)
| 订单(立即)
| 成交
| 持仓
| 订单(挂单)
| 历史订单
| 说明
| 各索引
|
|
| 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)
{
}
//+------------------------------------------------------------------+ |