반대 매매: MetaTrader 5에서의 자동 거래 시스템 활용하기

Mike 2017.11.03 21:25 31 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