Beranda Perdagangan Sistem Postingan

Cheduecoglioni: Sistem Trading Unggulan untuk MetaTrader 5

Lampiran
18294.zip (1.98 KB, Unduh 0 kali)

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    |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &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;
               else if(deal_type==DEAL_TYPE_SELL)
                  m_close_pos_type=POSITION_TYPE_BUY;
               else
                  return;
               m_is_trade=true;
          }
         }
         else if(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;
    }
//---
  }

Postingan terkait

Komentar (0)