首页 系统交易 帖子

Coin Flip - MetaTrader 5 的系统交易专家

附件
20836.zip (8.36 KB, 下载 2次)

创意者: Vladimir Gribachev

MQL5 代码作者: Vladimir Karputov

这款系统交易不依赖任何自定义指标,开仓方式为伪随机。该系统可以用两种语言显示当前统计信息:

Coin Flip 交易信息

系统会通过移动止损来调整已开仓位的止损价。在亏损的情况下,使用马丁格尔(Martingale)策略来增加手数。监控亏损的方法是使用 OnTradeTransaction 函数来捕捉交易标识 DEAL_REASON_SL,这是止损被触发的标志:

//+------------------------------------------------------------------+
//| TradeTransaction 函数                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- 获取交易类型的枚举值 
    ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- 如果交易是历史中添加的交易结果
    if(type==TRADE_TRANSACTION_DEAL_ADD)
    {
      long     deal_ticket       =0;
      long     deal_order        =0;
      long     deal_time         =0;
      long     deal_time_msc     =0;
      long     deal_type         =-1;
      long     deal_entry        =-1;
      long     deal_magic        =0;
      long     deal_reason       =-1;
      long     deal_position_id  =0;
      double   deal_volume       =0.0;
      double   deal_price        =0.0;
      double   deal_commission   =0.0;
      double   deal_swap         =0.0;
      double   deal_profit       =0.0;
      string   deal_symbol       ="";
      string   deal_comment      ="";
      string   deal_external_id  ="";
      if(HistoryDealSelect(trans.deal))
        {
         deal_ticket       =HistoryDealGetInteger(trans.deal,DEAL_TICKET);
         deal_order        =HistoryDealGetInteger(trans.deal,DEAL_ORDER);
         deal_time         =HistoryDealGetInteger(trans.deal,DEAL_TIME);
         deal_time_msc     =HistoryDealGetInteger(trans.deal,DEAL_TIME_MSC);
         deal_type         =HistoryDealGetInteger(trans.deal,DEAL_TYPE);
         deal_entry        =HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_magic        =HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_reason       =HistoryDealGetInteger(trans.deal,DEAL_REASON);
         deal_position_id  =HistoryDealGetInteger(trans.deal,DEAL_POSITION_ID);

         deal_volume       =HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
         deal_price        =HistoryDealGetDouble(trans.deal,DEAL_PRICE);
         deal_commission   =HistoryDealGetDouble(trans.deal,DEAL_COMMISSION);
         deal_swap         =HistoryDealGetDouble(trans.deal,DEAL_SWAP);
         deal_profit       =HistoryDealGetDouble(trans.deal,DEAL_PROFIT);

         deal_symbol       =HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_comment      =HistoryDealGetString(trans.deal,DEAL_COMMENT);
         deal_external_id  =HistoryDealGetString(trans.deal,DEAL_EXTERNAL_ID);
        }
      else
        return;
      if(deal_symbol==m_symbol.Name() && deal_magic==m_magic)
        if(deal_entry==DEAL_ENTRY_OUT)
          {
            PrevBars=0;
            if(deal_reason==DEAL_REASON_SL&& deal_commission+deal_swap+deal_profit<0.0)
               last_lots_sl=deal_volume;
            else
               last_lots_sl=0.0;
          }
    }
}


输入参数

  • 止损 - 止损值;
  • 止盈 - 止盈值;
  • 移动止损 - 移动止损;
  • 移动步长 - 移动步长;
  • 手数 - 手数手动设置(如果 手数 大于零,则 风险 必须等于零);
  • 风险 - 手数自动计算(如果 风险 大于零,则 手数 必须等于零);
  • 马丁格尔 - 在前一个仓位因止损而关闭且亏损时,手数增加比例;
  • 最大手数 - 最大持仓大小;如果超过此大小,则系统交易会异常终止;
  • 魔法数字 - 系统交易的唯一标识符。

然后测试被中断(系统交易被强制从图表中卸载),因为参考手数超过了 最大手数 参数:

Coin Flip

相关帖子

评论 (0)