Cheduecoglioni - EA Hebat untuk MetaTrader 5

Mike 2017.08.10 18:48 26 0 0
Lampiran

Penulis Idea: ef91 (awal perbincangan berkaitan )

Penulis Kod MQL5: Vladimir Karputov.

EA ini menunggu TP atau SL untuk diaktifkan, dan selepas itu membuka posisi dalam arah yang bertentangan. Ia akan memeriksa sama ada terdapat cukup dana sebelum menghantar permintaan dagangan melalui OnTradeTransaction.

Contohnya, kita mempunyai posisi Buy yang terbuka. Setelah TP atau SL diaktifkan, posisi Sell baru akan dibuka. Kemudian, selepas TP atau SL diaktifkan, posisi Buy baru juga akan dibuka.

Penutupan urus niaga dipantau melalui OnTradeTransaction:

//+------------------------------------------------------------------+//| Fungsi TradeTransaction                                        |//+------------------------------------------------------------------+voidOnTradeTransaction(constMqlTradeTransaction &trans,
                        constMqlTradeRequest &request,
                        constMqlTradeResult &result)
  {
//--- dapatkan jenis transaksi sebagai nilai enumerasi 
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- jika transaksi adalah hasil tambahan transaksi dalam sejarah
   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;
          }
        }
    }
  }

    Periksa volume sebelum OrderSend (anggap pembukaan posisi Buy sebagai contoh):

    //+------------------------------------------------------------------+//| Buka posisi Buy                                                |//+------------------------------------------------------------------+void OpenBuy(double sl,double tp)
      {
       sl=m_symbol.NormalizePrice(sl);
       tp=m_symbol.NormalizePrice(tp);
    
    //--- semak volume sebelum OrderSend untuk mengelakkan ralat "tidak cukup wang" (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(),
                         ", keterangan hasil: ",m_trade.ResultRetcodeDescription());
                  }
                   else
                  {
                   Print("Buy -> true. Result Retcode: ",m_trade.ResultRetcode(),
                         ", keterangan hasil: ",m_trade.ResultRetcodeDescription());
                  }
               }
             else
               {
                Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
                      ", keterangan hasil: ",m_trade.ResultRetcodeDescription());
               }
            }
          else
            {
             m_is_trade=false;
            }
         }
       else
         {
          m_is_trade=false;
         }
    //---
      }

      Senarai
      Komen 0