Cheduecoglioni: Sistem Trading Unggulan untuk MetaTrader 5

Mike 2017.08.10 18:48 11 0 0
Lampiran

Penulis ide:ef91 (awal diskusi terkait )

Penulis kode MQL5:Vladimir Karputov.

EA ini menunggu pemicu TP atau SL, kemudian membuka posisi di arah berlawanan. Sebelum mengirim permintaan trading, EA akan memeriksa apakah ada cukup dana. Ini dilakukan di OnTradeTransaction.

Contohnya, jika kita memiliki posisi Buy terbuka, saat TP atau SL terpenuhi, posisi Sell baru akan dibuka. Kemudian, setelah pemicu TP atau SL, posisi Buy baru akan dibuka.

Penutupan transaksi dipantau di OnTradeTransaction:

//+------------------------------------------------------------------+//| Fungsi TradeTransaction    |//+------------------------------------------------------------------+voidOnTradeTransaction(constMqlTradeTransaction &trans,
                        constMqlTradeRequest &request,
                        constMqlTradeResult &result)
  {
//--- ambil jenis transaksi sebagai nilai enumerasi 
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- jika transaksi adalah hasil penambahan transaksi dalam riwayat
   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 membuka posisi Buy sebagai contoh):

//+------------------------------------------------------------------+//| Membuka posisi Buy     |//+------------------------------------------------------------------+void OpenBuy(double sl,double tp)
  {
   sl=m_symbol.NormalizePrice(sl);
   tp=m_symbol.NormalizePrice(tp);

//--- periksa volume sebelum OrderSend untuk menghindari kesalahan "tidak cukup uang" (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. Hasil Retcode: ",m_trade.ResultRetcode(),
                     ", deskripsi hasil: ",m_trade.ResultRetcodeDescription());
              }
            else
              {
               Print("Buy -> true. Hasil Retcode: ",m_trade.ResultRetcode(),
                     ", deskripsi hasil: ",m_trade.ResultRetcodeDescription());
              }
          }
         else
           {
            Print("Buy -> false. Hasil Retcode: ",m_trade.ResultRetcode(),
                  ", deskripsi hasil: ",m_trade.ResultRetcodeDescription());
           }
        }
      else
        {
         m_is_trade=false;
        }
    }
   else
     {
      m_is_trade=false;
    }
//---
  }
Daftar
Komentar 0