MetaTrader 5 के लिए Cheduecoglioni: एक बेहतरीन सिस्टम ट्रेडिंग समाधान

Mike 2017.08.10 18:48 28 0 0
संलग्नक

विचार के लेखक: ef91 (संबंधित चर्चा की शुरुआत )

MQL5 कोड लेखक: Vladimir Karputov.

यह EA एक TP या SL के ट्रिगर होने का इंतजार करता है, और फिर विपरीत दिशा में एक पोजीशन खोलता है। यह व्यापार अनुरोध भेजने से पहले यह सुनिश्चित करता है कि खाते में पर्याप्त धन है। OnTradeTransaction में यह प्रक्रिया होती है।

उदाहरण के लिए, मान लीजिए कि हमारे पास एक खुली Buy पोजीशन है। जब TP या SL ट्रिगर होता है, तो एक नई Sell पोजीशन खोली जाती है। इसके बाद, TP या SL के ट्रिगर होने पर एक नई Buy पोजीशन खोली जाती है।

एक डील क्लोजर पर नज़र रखी जाती है OnTradeTransaction में:

//+------------------------------------------------------------------+//| TradeTransaction फ़ंक्शन                                                        |//+------------------------------------------------------------------+voidOnTradeTransaction(constMqlTradeTransaction &trans,
                        constMqlTradeRequest &request,
                        constMqlTradeResult &result)
  {
//--- लेन-देन के प्रकार को एन्यूमरेटर मान के रूप में प्राप्त करें
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- यदि लेन-देन इतिहास में लेन-देन के जोड़ने का परिणाम है
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      long     deal_entry        =0;
      long     deal_type         =0;
      string   deal_symbol       ="";
      long     deal_magic        =0;
      long     deal_time         =0;
      if(HistoryDealSelect(trans.deal))
        {
         deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE);
         deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_time=HistoryDealGetInteger(trans.deal,DEAL_TIME);
        }
      else
         return;
      if(deal_symbol==m_symbol.Name() && deal_magic==m_magic)
        {
         if(deal_entry==DEAL_ENTRY_OUT)
           {
            if(deal_type==DEAL_TYPE_BUY || deal_type==DEAL_TYPE_SELL)
              {
               if(deal_type==DEAL_TYPE_BUY)
                  m_close_pos_type=POSITION_TYPE_SELL;
               elseif(deal_type==DEAL_TYPE_SELL)
                  m_close_pos_type=POSITION_TYPE_BUY;
               else
                  return;
               m_is_trade=true;
          }
       }
         elseif(deal_entry==DEAL_ENTRY_IN)
           {
            m_is_trade=false;
           }
        }
     }
  }

ऑर्डर भेजने से पहले वॉल्यूम की जांच करें (एक Buy पोजीशन खोलने के उदाहरण के रूप में):

//+------------------------------------------------------------------+//| Buy पोजीशन खोलें                                                |//+------------------------------------------------------------------+void OpenBuy(double sl,double tp)
  {
   sl=m_symbol.NormalizePrice(sl);
   tp=m_symbol.NormalizePrice(tp);

//--- ऑर्डर भेजने से पहले वॉल्यूम की जांच करें ताकि "पर्याप्त धन नहीं" त्रुटि से बचा जा सके (CTrade)
   double check_volume_lot=m_trade.CheckVolume(m_symbol.Name(),InpLots,m_symbol.Ask(),ORDER_TYPE_BUY);

   if(check_volume_lot!=0.0)
     {
      if(check_volume_lot>=InpLots)
        {
         if(m_trade.Buy(InpLots,NULL,m_symbol.Ask(),sl,tp))
           {
            if(m_trade.ResultDeal()==0)
              {
               Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
                    ", परिणाम का विवरण: ",m_trade.ResultRetcodeDescription());
              }
              } 
              else
              {
               Print("Buy -> true. Result Retcode: ",m_trade.ResultRetcode(),
                    ", परिणाम का विवरण: ",m_trade.ResultRetcodeDescription());
              }
        }
         else
           {
            Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
                  ", परिणाम का विवरण: ",m_trade.ResultRetcodeDescription());
          }
        }
      else
        {
         m_is_trade=false;
      } 
    }
   else
     {
      m_is_trade=false;
    }
//---
  }

    सूची
    टिप्पणी 0