对冲交易:MetaTrader 5 的逆向交易专家

Mike 2017.11.03 21:25 10 0 0
附件

在交易中,有一种策略可以帮助我们在平仓后立即反向开仓,这就是逆向交易。它适用于任何交易品种和任何魔术数字。

举个例子,如果我们有一个开仓的 AUDUSD 买入 0.01 的仓位,当这个仓位被平仓(例如,我们手动平仓)后,逆向交易专家会立即开一个新的 AUDUSD 仓位,这次是卖出仓位。

整个代码逻辑包含在 OnTradeTransaction 函数中:

//+------------------------------------------------------------------+
//| 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_type         =-1;
      long     deal_entry        =-1;
      double   deal_volume       =0.0;
      string   deal_symbol       ="";
      if(HistoryDealSelect(trans.deal))
        {
         deal_type         =HistoryDealGetInteger(trans.deal,DEAL_TYPE);
         deal_entry        =HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_volume       =HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
         deal_symbol       =HistoryDealGetString(trans.deal,DEAL_SYMBOL);
        }
      else
         return;
      if(deal_entry==DEAL_ENTRY_OUT)
        {
         switch((int)deal_type)
           {
            case  DEAL_TYPE_BUY:
               m_trade.Buy(deal_volume,deal_symbol);
               break;
            case  DEAL_TYPE_SELL:
               m_trade.Sell(deal_volume,deal_symbol);
               break;
            default:
               break;
           }
        }
     }
  }

在这里,我们等待平仓交易(DEAL_ENTRY_OUT)的出现。一旦这个交易出现,我们会检查交易类型(如果平仓的是买入,那么这将是一个卖出交易,反之亦然),然后开一个新的仓位。

列表
评论 0