반대 매매란, 닫힌 포지션과 동일한 규모로 반대 포지션을 여는 것을 의미합니다. 이는 어떤 심볼이나 매직 넘버에서도 적용할 수 있습니다.
예를 들어, 현재 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