MT5,外汇,人工神经网络,编程,EA,简洁之2.3订单,持仓,成交记录
幸福341 发表于:2022-5-12 16:46:49 复制链接 发表新帖
阅读数:246
一、订单,持仓,成交与历史

订单(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)

{

}

//+------------------------------------------------------------------+
返回列表 使用道具 举报
条评论
您需要登录后才可以回帖 登录 | 立即注册
高级
相关推荐