विचार के लेखक: ef91 (संबंधित चर्चा की शुरुआत #62)
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