请观看如何免费下载自动交易

有趣的脚本?
因此发布一个链接 -
让其他人评价

喜欢这个脚本? 在MetaTrader 5客户端尝试它

显示:
480
等级:
投票: 22
已发布:
2017.05.03 13:55
已更新:
2017.05.03 14:12

本 EA 交易展示了一个如何解决以下问题的实例: 如何确定挂单被触发的时刻?

EA交易如何工作: 在OnTradeTransaction() 函数中, 我们等待类型为 "TRADE_TRANSACTION_DEAL_ADD"的事务:

TRADE_TRANSACTION_DEAL_ADD

在历史中加入一个交易。它是一个订单执行的结果或是在账户余额上的操作。


当我们 "抓到" 这样的事务时,我们立即 使用 "bln_find_order" 标志 来搜索订单,并且 把订单编号赋给 "ul_find_order" 变量:

//+------------------------------------------------------------------+
//| TradeTransaction 函数                                             |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//+------------------------------------------------------------------+
//| TRADE_TRANSACTION_DEAL_*                                         |
//| MqlTradeTransaction 结构的以下栏位                                  |
//| 以相关交易的交易事务处理填充                                          |
//| (TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_DEAL_UPDATE       |
//| 以及 TRADE_TRANSACTION_DEAL_DELETE):                              |
//|  •deal - 交易编号;                                                 |
//|  •order - 订单编号,基于交易执行的订单;                                |
//|  •symbol - 交易的交易品种名称;                                       |
//|  •type - 交易事务类型;                                              |
//|  •deal_type - 交易类型;                                            |
//|  •price - 交易价格;                                                |
//|  •price_sl - 止损价格 ( 如果在订单中指定并填充,                        |
//|  •基于已经执行的交易);                                               |
//|  •price_tp - 获利价格 ( 如果在订单中指定并填充                         |
//|   基于已经执行的交易);                                               |
//|  •volume - 交易量手数.                                             |
//|  •position - 已建仓位的单号,                                        |
//|   通过交易执行结果可以修改或者关闭.                                    |
//|  •position_by - 反向仓位的单号.                                     |
//|   它只由交易填充                                                    |
//|   (通过反向仓位关闭仓位).                                            |
//+------------------------------------------------------------------+
//--- 取得事务类型,为枚举值  
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- 如果事务是历史中加上的结果
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      bln_find_order=true;                // true -> 您应当搜索订单
      ul_find_order=trans.order;
     }
  }

在 OnTick() 中, 我们总要检查"bln_find_order" 标志的状态; 一旦标志等于 true, 我们就搜索订单。

  • 首先我们尝试根据单号找到订单,
  • 如果尝试成功 (也就是说订单已经写入历史), 我们就 确定订单类型. 为了从交易历史中访问订单的属性,要使用 HistoryOrderGetInteger.

//+------------------------------------------------------------------+
//| EA交易订单分时函数                          |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(bln_find_order) // true -> 您应当搜索订单
     {
      static long counter=0;
      Print("尝试次数 ",counter);
      ResetLastError();
      if(HistoryOrderSelect(ul_find_order))
        {
         long type_order=HistoryOrderGetInteger(ul_find_order,ORDER_TYPE);
         if(type_order==ORDER_TYPE_BUY_LIMIT || type_order==ORDER_TYPE_BUY_STOP ||
            type_order==ORDER_TYPE_SELL_LIMIT ||type_order==ORDER_TYPE_SELL_STOP)
           {
            Print("挂单 ",ul_find_order," 已经找到!订单类型是 ",
                  EnumToString((ENUM_ORDER_TYPE)HistoryOrderGetInteger(ul_find_order,ORDER_TYPE)));
            bln_find_order=false;         // true -> 您应当搜索订单
            counter=0;
            return;
           }
         else
           {
            Print("订单 ",ul_find_order," 不是挂单");
            bln_find_order=false;         // true -> 您应当搜索订单
            return;
           }
        }
      else
        {
         Print("订单 ",ul_find_order," 没有找到, 错误#",GetLastError());
        }
      counter++;
     }
  }

本文译自 MetaQuotes Software Corp. 撰写的俄文原文
官方代码: https://www.mql5.com/ru/code/17610

XCCXCandleKeltner XCCXCandleKeltner

Keltner 通道的构建是根据相对 XCCX 震荡指标的平均值的,表现为烛形的序列。

STD_HTF STD_HTF

在输入参数中带有时段选择选项的 STD 指标

HistoryPositionInfo HistoryPositionInfo

根据交易历史返回仓位的利润点数。

CDir (MT5) - 一个用于取得目录内容的类 CDir (MT5) - 一个用于取得目录内容的类

CDir 类可以取得在MQL5沙盒之外的文件和文件夹信息,就和 MS-DOS 的 Dir 命令类似。因为它使用了系统DLL调用,所以您应当启用它们的使用。