विचार के लेखक: ef91 (संबंधित चर्चा की शुरुआत #62)
MQL5 कोड लेखक: Vladimir Karputov.
यह EA एक TP या SL के ट्रिगर होने का इंतजार करता है, और फिर विपरीत दिशा में एक पोजीशन खोलता है। यह व्यापार अनुरोध भेजने से पहले यह सुनिश्चित करता है कि खाते में पर्याप्त धन है। OnTradeTransaction में यह प्रक्रिया होती है।
उदाहरण के लिए, मान लीजिए कि हमारे पास एक खुली Buy पोजीशन है। जब TP या SL ट्रिगर होता है, तो एक नई Sell पोजीशन खोली जाती है। इसके बाद, TP या SL के ट्रिगर होने पर एक नई Buy पोजीशन खोली जाती है।
एक डील क्लोजर पर नज़र रखी जाती है OnTradeTransaction में:
//+------------------------------------------------------------------+ //| TradeTransaction फ़ंक्शन | //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &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; 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; } } } }
ऑर्डर भेजने से पहले वॉल्यूम की जांच करें (एक 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; } //--- }
संबंधित पोस्ट
- MetaTrader 4 के लिए विज़ुअल ऑर्डर प्रोसेसिंग - आपके ट्रेडिंग साथी
- MQL5 विजार्ड: मॉर्निंग/ईवनिंग स्टार पैटर्न और स्टोकास्टिक पर आधारित ट्रेड सिग्नल
- MQL5 विजार्ड: मॉर्निंग/इविनिंग स्टार और RSI पर आधारित ट्रेड सिग्नल
- MQL5 विज़ार्ड - हैमर/हैंगिंग मैन और स्टोकास्टिक पर आधारित ट्रेड सिग्नल
- MQL5 विजार्ड से हैमर/हैंगिंग मैन CCI ट्रेड सिग्नल्स बनाना