Penulis ide: ef91 (awal diskusi terkait #62)
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
- RRS Impulse: EA Unggulan untuk Trading MetaTrader 4
- Panduan Sistem Trading BROTHER - Hasil Ekstrem dengan EA 5 Menit di MetaTrader 4
- MQL5 Wizard: Menggunakan Sinyal Trading Berbasis Morning/Evening Stars dan RSI untuk MetaTrader 5
- MQL5 Wizard: Mengoptimalkan Sinyal Perdagangan dengan Morning/Evening Stars dan MFI
- Membuat Expert Advisor Menggunakan MQL5 Wizard: Sinyal Perdagangan dari Bullish dan Bearish Engulfing dengan Stochastic