MQL5 विजार्ड आपको स्वचालित रूप से विशेषज्ञ सलाहकारों (EA) का कोड बनाने की अनुमति देता है। विस्तृत जानकारी के लिए देखें MQL5 विजार्ड में तैयार-निर्मित विशेषज्ञ सलाहकार बनाना.
यह रणनीति दो मूविंग एवरेज पर आधारित ट्रेड सिग्नल को ध्यान में रखती है, जो MQL5 विजार्ड - दो एक्सपोनेंशियल स्मूथ मूविंग एवरेज के क्रॉसओवर पर आधारित ट्रेड सिग्नल में समझाई गई है। मूविंग एवरेज तब प्रभावी होते हैं जब ट्रेंड होता है, अन्य मामलों में ये कई झूठे सिग्नल देते हैं। रणनीति में सुधार का एक तरीका टाइम फ़िल्टर का उपयोग करना है (उदाहरण के लिए, जब यूरोपीय सत्र में नए पोजीशन खोलना).
यहां हम दो एक्सपोनेंशियल स्मूथ मूविंग एवरेज (फास्ट EMA और स्लो EMA) के क्रॉसओवर के साथ इंट्राडे टाइम फ़िल्टर के आधार पर रणनीति पर विचार करेंगे। इसे "इंट्राडे टाइम फ़िल्टर के साथ दो EMA के क्रॉसओवर पर आधारित सिग्नल" कहा जाता है (जब MQL5 विजार्ड में EA स्वचालित रूप से बनाया जाता है).
ट्रेड सिग्नल:
- लंबी पोजीशन खोलें: फास्ट EMA स्लो EMA को ऊपर की ओर क्रॉस करता है और इंट्राडे टाइम फ़िल्टर की शर्तें पूरी नहीं होतीं।
- शॉर्ट पोजीशन खोलें: फास्ट EMA स्लो EMA को नीचे की ओर क्रॉस करता है और इंट्राडे टाइम फ़िल्टर की शर्तें पूरी नहीं होतीं।
इस रणनीति को CSignal2EMA_ITF क्लास में लागू किया गया है।
यह ट्रेडिंग सिस्टम पेंडिंग ऑर्डर पर आधारित है, मूल्य स्तर मूविंग एवरेज के मान के आधार पर गणना की जाती हैं, और ATR (एवरेज ट्रू रेंज) का उपयोग किया जाता है.

चित्र 1. इंट्राडे टाइम फ़िल्टर के साथ दो EMA के क्रॉसओवर पर आधारित ट्रेड सिग्नल
ट्रेड सिग्नल
ट्रेडिंग रणनीति CSignal2EMA_ITF में लागू की गई है, इसमें संकेतक के मानों तक पहुँच को सरल बनाने के लिए कुछ संरक्षित विधियाँ हैं:
double FastEMA(int ind) // बार के फास्ट EMA का मान लौटाता है double SlowEMA(int ind) // बार के स्लो EMA का मान लौटाता है double StateFastEMA(int ind) // यदि फास्ट EMA बढ़ा/घटा है तो सकारात्मक/नकारात्मक मान लौटाता है double StateSlowEMA(int ind) // यदि स्लो EMA बढ़ा/घटा है तो सकारात्मक/नकारात्मक मान लौटाता है double StateEMA(int ind) // फास्ट और स्लो EMA के बीच का अंतर लौटाता है double ATR(int ind) // बार के ATR का मान लौटाता है
- Limit>0. यह उस समय में प्रवेश करेगा जब मूविंग एवरेज की झूठी ब्रेकडाउन बाजार मूल्य से बेहतर मूल्य पर हो (बाय लिमिट और सेल लिमिट ऑर्डर ट्रेड सिग्नल के आधार पर लगाए जाएंगे)
- Limit<0. यह मूल्य आंदोलन की दिशा में प्रवेश करेगा (बाय स्टॉप और सेल स्टॉप ऑर्डर ट्रेड सिग्नल के आधार पर लगाए जाएंगे).
- Limit=0. इस मामले में यह बाजार कीमतों का उपयोग करके ट्रेड करेगा.
1. लंबी पोजीशन खोलें
यह लंबी पोजीशन खोलने की शर्तों की जांच करता है: यदि अंतिम पूर्ण बार पर फास्ट और स्लो EMA के बीच का अंतर अपने संकेत को "-" से "+" में बदल गया है (StateEMA(1)>0 && StateEMA(2)<0).
इसके बाद, यह CSignalITF क्लास की CheckOpenLong() विधि को कॉल करके इंट्राडे टाइम फ़िल्टर की शर्तों की जांच करेगा। यदि ट्रेडिंग की अनुमति है, तो यह बेस प्राइस लेवल (मूविंग एवरेज का मान) और अंतिम पूर्ण बार की ATR रेंज का मूल्य गणना करेगा.
लिमिट इनपुट पैरामीटर के संकेत के आधार पर यह बाय पेंडिंग ऑर्डर लगाएगा। ऑर्डर की कीमत, टेक प्रॉफिट और स्टॉप लॉस स्तर बेस प्राइस लेवल के सापेक्ष (ATR इकाइयों में) गणना किए जाते हैं। ऑर्डर की समाप्ति का समय Expiration इनपुट पैरामीटर द्वारा परिभाषित किया जाता है.
//+------------------------------------------------------------------+ //| लंबी पोजीशन (बाय) खोलने की शर्तों की जांच करता है | //+------------------------------------------------------------------+ bool CSignal2EMA_ITF::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { if(!(StateEMA(1)>0 && StateEMA(2)<0)) return(false); if(!m_time_filter.CheckOpenLong(price,sl,tp,expiration)) return(false); //--- double ema=SlowEMA(1); double atr=ATR(1); double spread=m_symbol.Ask()-m_symbol.Bid(); //--- price=m_symbol.NormalizePrice(ema-m_limit*atr+spread); sl =m_symbol.NormalizePrice(price+m_stop_loss*atr); tp =m_symbol.NormalizePrice(price-m_take_profit*atr); expiration+=m_expiration*PeriodSeconds(m_period); //--- return(true); }
2. लंबी पोजीशन बंद करें
हमारे मामले में, लंबी पोजीशन बंद करने की शर्तों की जांच करने वाली विधि हमेशा false लौटाती है, यानी यह माना जाता है कि लंबी पोजीशन टेक प्रॉफिट या स्टॉप लॉस द्वारा बंद की जाएगी। यदि आवश्यक हो, तो आप इस विधि का कार्यान्वयन करने के लिए अपना कोड लिख सकते हैं.
//+------------------------------------------------------------------+ //| शॉर्ट पोजीशन बंद करने की शर्तों की जांच करता है | //+------------------------------------------------------------------+ bool CSignal2EMA_ITF::CheckCloseLong(double& price) { return(false); }
3. शॉर्ट पोजीशन खोलें
यह शॉर्ट पोजीशन खोलने की शर्तों की जांच करता है: यदि अंतिम पूर्ण बार पर फास्ट और स्लो EMA के बीच का अंतर अपने संकेत को "+" से "-" में बदल गया है (StateEMA(1)<0 && StateEMA(2)>0).
इसके बाद, यह CSignalITF क्लास की CheckOpenLong() विधि को कॉल करके इंट्राडे टाइम फ़िल्टर की शर्तों की जांच करेगा। यदि ट्रेडिंग की अनुमति है, तो यह बेस प्राइस लेवल (मूविंग एवरेज का मान) और अंतिम पूर्ण बार की ATR रेंज का मूल्य गणना करेगा.
लिमिट इनपुट पैरामीटर के संकेत के आधार पर यह सेल पेंडिंग ऑर्डर लगाएगा। ऑर्डर की कीमत, टेक प्रॉफिट और स्टॉप लॉस स्तर बेस प्राइस लेवल के सापेक्ष (ATR इकाइयों में) गणना किए जाते हैं। ऑर्डर की समाप्ति का समय Expiration इनपुट पैरामीटर द्वारा परिभाषित किया जाता है.
//+------------------------------------------------------------------+ //| शॉर्ट पोजीशन (सेल) खोलने की शर्तों की जांच करता है | //+------------------------------------------------------------------+ bool CSignal2EMA_ITF::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { if(!(StateEMA(1)<0 && StateEMA(2)>0)) return(false); if(!m_time_filter.CheckOpenShort(price,sl,tp,expiration)) return(false); //--- double ema=SlowEMA(1); double atr=ATR(1); //--- price =m_symbol.NormalizePrice(ema+m_limit*atr); sl =m_symbol.NormalizePrice(price+m_stop_loss*atr); tp =m_symbol.NormalizePrice(price-m_take_profit*atr); expiration+=m_expiration*PeriodSeconds(m_period); //--- return(true); }
4. शॉर्ट पोजीशन बंद करें
हमारे मामले में, शॉर्ट पोजीशन बंद करने की शर्तों की जांच करने वाली विधि हमेशा false लौटाती है, यानी यह माना जाता है कि पोजीशन टेक प्रॉफिट या स्टॉप लॉस द्वारा बंद की जाएगी। यदि आवश्यक हो, तो आप इस विधि का कार्यान्वयन करने के लिए अपना कोड लिख सकते हैं.
//+------------------------------------------------------------------+ //| शॉर्ट पोजीशन बंद करने की शर्तों की जांच करता है | //+------------------------------------------------------------------+ bool CSignal2EMA_ITF::CheckCloseShort(double& price) { return(false); }
5. बाय पेंडिंग ऑर्डर का ट्रेलिंग स्टॉप
विशेषज्ञ सलाहकार वर्तमान मूविंग एवरेज और ATR के मान के आधार पर पेंडिंग ऑर्डर्स को ट्रेल करेगा.
//+--------------------------------------------------------------------+ //| पेंडिंग बाय ऑर्डर को संशोधित करने की शर्तों की जांच करता है | //+--------------------------------------------------------------------+ bool CSignal2EMA_ITF::CheckTrailingOrderLong(COrderInfo* order,double& price) { //--- जांचें if(order==NULL) return(false); //--- double ema=SlowEMA(1); double atr=ATR(1); double spread=m_symbol.Ask()-m_symbol.Bid(); //--- price=m_symbol.NormalizePrice(ema-m_limit*atr+spread); //--- return(true); }
6. सेल पेंडिंग ऑर्डर का ट्रेलिंग स्टॉप
विशेषज्ञ सलाहकार वर्तमान मूविंग एवरेज और ATR के मान के आधार पर पेंडिंग ऑर्डर्स को ट्रेल करेगा.
ऑर्डर तब निष्पादित होगा जब बाजार की कीमत ऑर्डर की कीमत तक पहुँच जाएगी.
//+--------------------------------------------------------------------+ //| पेंडिंग सेल ऑर्डर को संशोधित करने की शर्तों की जांच करता है | //+--------------------------------------------------------------------+ bool CSignal2EMA_ITF::CheckTrailingOrderShort(COrderInfo* order,double& price) { //--- जांचें if(order==NULL) return(false); //--- double ema=SlowEMA(1); double atr=ATR(1); //--- price=m_symbol.NormalizePrice(ema+m_limit*atr); //--- return(true); }
MQL5 विजार्ड का उपयोग करके विशेषज्ञ सलाहकार बनाना
एक ट्रेडिंग रोबोट बनाने के लिए, आपको "इंट्राडे टाइम फ़िल्टर के साथ दो EMA के क्रॉसओवर पर आधारित सिग्नल" सिग्नल गुणों का चयन करना होगा, जो कि MQL5 विजार्ड के "तय-निर्मित विशेषज्ञ सलाहकार बनाने" विकल्प में है:

चित्र 2. MQL5 विजार्ड में इंट्राडे टाइम फ़िल्टर के साथ दो EMA के क्रॉसओवर पर आधारित सिग्नल का चयन करें
इसके बाद, आपको आवश्यक ट्रेलिंग स्टॉप एल्गोरिदम और पैसे और जोखिम प्रबंधन प्रणाली निर्दिष्ट करनी होगी। विशेषज्ञ सलाहकार का कोड स्वचालित रूप से बनाया जाएगा, आप इसे संकलित कर सकते हैं और MetaTrader 5 क्लाइंट टर्मिनल के रणनीति परीक्षक में परीक्षण कर सकते हैं.
परीक्षण परिणाम
आइए विशेषज्ञ सलाहकार के ऐतिहासिक डेटा (EUenSD H1, परीक्षण अवधि: 1.1.2010-05.01.2011, PeriodFastEMA=5, PeriodSlowEMA=30, PeriodATR=7, Limit=1.2, StopLoss=5, TakeProfit=8, Expiration=4, GoodMinuteOfHour=-1, BadMinutesOfHour=0, GoodHourOfDay=-1, BadHoursOfDay=0, GoodDayOfWeek=-1, BadDaysOfWeek=0) पर बैकटेस्टिंग पर विचार करें.
विशेषज्ञ सलाहकार बनाने में हमने निश्चित मात्रा का उपयोग किया (फिक्स्ड लॉट ट्रेडिंग, 0.1), ट्रेलिंग स्टॉप एल्गोरिदम का उपयोग नहीं किया गया (ट्रेलिंग का उपयोग नहीं किया गया).

चित्र 3. इंट्राडे टाइम फ़िल्टर के बिना दो EMA के क्रॉसओवर पर आधारित ट्रेड सिग्नल के साथ विशेषज्ञ सलाहकार के परीक्षण परिणाम
इंट्राडे फ़िल्टर का उपयोग नहीं किया गया है, इसलिए कई झूठे सिग्नल हैं। यदि हम व्यापार के घंटों के आधार पर डील के परिणामों का विश्लेषण करें तो ट्रेड सिग्नल में सुधार किया जा सकता है.
हमारे मामले में, हमने पाया कि दो EMA का क्रॉसओवर 6:00 से 23:59 तक कई झूठे सिग्नल देता है। हम फ़िल्टर पैरामीटर को सेट करके इंट्राडे टाइम फ़िल्टर निर्दिष्ट कर सकते हैं.
उदाहरण के लिए, हम समय फ़िल्टर निर्दिष्ट कर सकते हैं, जो केवल 0:00 से 5:59 के बीच पोजीशन खोलने की अनुमति देता है। इसे BadHoursOfDay=16777152=111111111111111111000000b के मान को सेट करके किया जा सकता है। सभी अन्य व्यापार घंटे "खराब" होते हैं, इसलिए नए पोजीशन खोलने की अनुमति 6:00 से दिन के अंत तक नहीं देना बेहतर है.
अगर हम BadHoursOfDay=16777152 का मान सेट करते हैं, तो हम कई झूठे सिग्नल को फ़िल्टर करेंगे:

चित्र 4. इंट्राडे टाइम फ़िल्टर (BadHoursofDay=16777152) के साथ दो EMA के क्रॉसओवर पर आधारित ट्रेड सिग्नल के परीक्षण परिणाम
CSignalITF कई अन्य समय फ़िल्ट्रेशन सुविधाएँ प्रदान करता है (बस घंटे के भीतर "अच्छे" और "खराब" मिनट, दिन के भीतर घंटे और सप्ताह के भीतर दिन निर्दिष्ट करें).
संलग्नक: Signal2EMA-ITF.mqh में CSignal2EMA_ITF क्लास को terminal_data_folder\MQL5\Include\Expert\Signal फ़ोल्डर में रखा जाना चाहिए.
expert_2ema_itf.mq5 में MQL5 विजार्ड का उपयोग करके बनाए गए विशेषज्ञ सलाहकार का कोड है।
संबंधित पोस्ट
- MQL5 विजार्ड: मॉर्निंग/ईवनिंग स्टार पैटर्न और स्टोकास्टिक पर आधारित ट्रेड सिग्नल
- MQL5 विजार्ड: मॉर्निंग/इविनिंग स्टार और RSI पर आधारित ट्रेड सिग्नल
- MetaTrader 4 के लिए विज़ुअल ऑर्डर प्रोसेसिंग - आपके ट्रेडिंग साथी
- MQL5 विज़ार्ड: हैमर/हैंगिंग मैन पैटर्न पर आधारित ट्रेड सिग्नल्स - MetaTrader 5 के लिए
- MQL5 विजार्ड: सुबह/शाम के तारे के आधार पर ट्रेड सिग्नल + CCI के साथ एक्सपर्ट एडवाइजर