在交易中,有一种策略可以帮助我们在平仓后立即反向开仓,这就是逆向交易。它适用于任何交易品种和任何魔术数字。
举个例子,如果我们有一个开仓的 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