मेटाट्रेडर 5 के लिए MQL5 विजार्ड आपको तैयार-निर्मित एक्सपर्ट एडवाइजर्स बनाने की सुविधा देता है। ये एडवाइजर्स स्टैंडर्ड लाइब्रेरी क्लासेस पर आधारित होते हैं, जो क्लाइंट टर्मिनल के साथ आते हैं (विस्तार के लिए MQL5 विजार्ड में तैयार-निर्मित एक्सपर्ट एडवाइजर्स बनाना देखें)। यह आपके ट्रेड आईडियाज को जल्दी चेक करने की सुविधा देता है, आपको बस अपनी खुद की ट्रेड सिग्नल क्लास बनानी होती है। इस क्लास की संरचना और उदाहरण आप MQL5 विजार्ड: ट्रेडिंग सिग्नल का मॉड्यूल कैसे बनाएं लेख में देख सकते हैं।
बुनियादी विचार यह है: ट्रेडिंग सिग्नल की क्लास CExpertSignal से निकाली जाती है, उसके बाद आपको LongCondition() और ShortCondition() वर्चुअल मेथड्स को अपने तरीकों से ओवरराइड करना होता है।
एक किताब है "सर्वश्रेष्ठ ट्रेडर्स की रणनीतियां" (रूसी में), जिसमें कई ट्रेडिंग रणनीतियों का उल्लेख किया गया है, हम रिवर्सल कैंडलस्टिक पैटर्न पर ध्यान केंद्रित करेंगे, जिसे स्टोकास्टिक, CCI, MFI, और RSI ऑस्सीलेटर द्वारा पुष्टि की जाती है।
सबसे अच्छा तरीका यह है कि एक अलग क्लास बनाई जाए, जो CExpertSignal से निकाली गई हो, ताकि कैंडलस्टिक पैटर्न के निर्माण की जांच की जा सके। कैंडलस्टिक पैटर्न द्वारा उत्पन्न ट्रेड सिग्नल की पुष्टि के लिए, CCandlePattern से निकली क्लास लिखना पर्याप्त है और आवश्यक विशेषताएँ (जैसे ऑस्सीलेटर द्वारा पुष्टि) जोड़ें।
1. "बुलिश हारामी" और "बेयरिश हारामी" रिवर्सल कैंडलस्टिक पैटर्न
1.1. बुलिश हारामी
बुलिश हारामी रिवर्सल पैटर्न तब बनता है जब एक बड़ी कैंडलस्टिक के बाद एक छोटी कैंडलस्टिक आती है, जिसका शरीर बड़ी कैंडल के शरीर के ऊर्ध्वाधर क्षेत्र के भीतर होता है। यह पैटर्न संकेत करता है कि गिरता ट्रेंड (डाउनट्रेंड) पलट सकता है, यह लंबे पद में प्रवेश करने का अच्छा समय बताता है। दूसरी कैंडलस्टिक एक गैप अप के साथ खुलती है। दूसरी (सफेद) कैंडलस्टिक जितनी छोटी होगी, पलटने की संभावना उतनी ही अधिक होगी।

चित्र 1. "बुलिश हारामी" कैंडलस्टिक पैटर्न
"बुलिश हारामी" पैटर्न की पहचान CheckPatternBullishHarami() मेथड में की जाती है:
//+------------------------------------------------------------------+ //| "बुलिश हारामी" कैंडलस्टिक पैटर्न की जांच करता है | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishHarami() { //--- बुलिश हारामी if((Close(1)>Open(1)) && // अंतिम पूर्ण बार बुलिश है (सफेद दिन) ((Open(2)-Close(2)>AvgBody(1)) && // पिछली कैंडल bearish है, उसका शरीर औसत से बड़ा है (लंबा काला) ((Close(1)<Open(2)) && // बुलिश कैंडल का क्लोज प्राइस बेयरिश कैंडल के ओपन प्राइस से कम है (Open(1)>Close(2))) && // बुलिश कैंडल का ओपन प्राइस बेयरिश कैंडल के क्लोज प्राइस से ज्यादा है (MidPoint(2)<CloseAvg(2))) // डाउन ट्रेंड return(true); //--- return(false); }
"बुलिश हारामी" कैंडलस्टिक पैटर्न की पहचान करने के लिए CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) मेथड का उपयोग किया जाता है।
1.2. बेयरिश हारामी
बेयरिश हारामी रिवर्सल पैटर्न तब बनता है जब एक बड़ी कैंडलस्टिक के बाद एक छोटी कैंडलस्टिक आती है, जिसका शरीर बड़ी कैंडल के शरीर के ऊर्ध्वाधर क्षेत्र के भीतर होता है। यह पैटर्न संकेत करता है कि बढ़ता ट्रेंड (अपट्रेंड) पलट सकता है, यह छोटे पद में प्रवेश करने का अच्छा समय बताता है। दूसरी कैंडलस्टिक एक गैप डाउन के साथ खुलती है।
दूसरी (काली) कैंडलस्टिक जितनी छोटी होगी, पलटने की संभावना उतनी ही अधिक होगी।

चित्र 2. "बेयरिश हारामी" कैंडलस्टिक पैटर्न
"बेयरिश हारामी" पैटर्न की पहचान CheckPatternBearishHarami() मेथड में की जाती है:
//+------------------------------------------------------------------+ //| "बेयरिश हारामी" कैंडलस्टिक पैटर्न की जांच करता है | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishHarami() { //--- बेयरिश हारामी if((Close(1)<Open(1)) && // अंतिम पूर्ण बार बेयरिश है (काला दिन) ((Close(2)-Open(2)>AvgBody(1)) && // पिछली कैंडल बुलिश है, उसका शरीर औसत से बड़ा है (लंबा सफेद) ((Close(1)>Open(2)) && // क्लोज प्राइस बेयरिश कैंडल के ओपन प्राइस से ज्यादा है (Open(1)<Close(2))) && // ओपन प्राइस बेयरिश कैंडल के क्लोज प्राइस से कम है (MidPoint(2)>CloseAvg(2))) // अपट्रेंड return(true); //--- return(false); }
"बेयरिश हारामी" कैंडलस्टिक पैटर्न की पहचान करने के लिए CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) मेथड का उपयोग किया जाता है।
2. CCI इंडिकेटर द्वारा पुष्टि किए गए ट्रेड सिग्नल
लंबी या छोटी स्थिति खोलने के लिए ट्रेड सिग्नल को CCI इंडिकेटर द्वारा पुष्टि की जानी चाहिए। CCI का मान महत्वपूर्ण स्तरों (-50 लंबी स्थिति के लिए और 50 छोटी स्थिति के लिए) से अधिक/कम होना चाहिए।
खुले हुए पद का समापन CCI के मानों पर निर्भर करता है। इसे 2 मामलों में किया जा सकता है:
- यदि CCI की रेखा विपरीत महत्वपूर्ण स्तर (80 लंबी स्थिति के लिए और -80 छोटी स्थिति के लिए) तक पहुँच गई है।
- यदि विपरीत सिग्नल की पुष्टि नहीं होती है (जब CCI निम्नलिखित स्तरों तक पहुँचता है: -80 लंबी स्थिति के लिए और 80 छोटी स्थिति के लिए)।

चित्र 3. "बुलिश हारामी" पैटर्न, CCI इंडिकेटर द्वारा पुष्टि की गई
- int CBH_BH_CCI::LongCondition() - लंबी स्थिति खोलने की स्थितियों की जांच करता है (80 लौटाता है) और छोटी स्थिति को बंद करता है (40 लौटाता है);
- int CBH_BH_CCI::ShortCondition() - छोटी स्थिति खोलने की स्थितियों की जांच करता है (80 लौटाता है) और लंबी स्थिति को बंद करता है (40 लौटाता है).
2.1. लंबी स्थिति खोलें/छोटी स्थिति बंद करें
"बुलिश हारामी" पैटर्न की पुष्टि CCI इंडिकेटर द्वारा की जानी चाहिए: CCI(1)<-50 (अंतिम पूर्ण बार का CCI मान -50 से कम होना चाहिए)।
छोटी स्थिति को बंद किया जाना चाहिए यदि CCI इंडिकेटर ने महत्वपूर्ण स्तर -80 को ऊपर की ओर पार किया है या महत्वपूर्ण स्तर 80 को नीचे की ओर पार किया है।
//+------------------------------------------------------------------+ //| मार्केट में प्रवेश और निकासी की स्थितियों की जांच करता है | //| 1) मार्केट में प्रवेश (लंबी स्थिति खोलें, परिणाम=80) | //| 2) मार्केट से निकासी (छोटी स्थिति बंद करें, परिणाम=40) | //+------------------------------------------------------------------+ int CBH_BH_CCI::LongCondition() { int result=0; //--- idx का उपयोग एक्सपर्ट एडवाइजर कार्य मोड निर्धारित करने के लिए किया जा सकता है //--- idx=0 - इस मामले में EA प्रत्येक टिक पर ट्रेड स्थितियों की जांच करता है //--- idx=1 - इस मामले में EA केवल न्यूज़ बार पर ट्रेड स्थितियों की जांच करता है int idx =StartIndex(); //--- लंबी स्थिति खोलने की स्थितियों की जांच //--- बुलिश हारामी पैटर्न और CCI<-50 का निर्माण if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (CCI(1)<-50)) result=80; //--- छोटी स्थिति बंद करने की स्थितियों की जांच //--- ओवरबॉट/ओवरसोल्ड स्तरों (नीचे -80, नीचे -80) का सिग्नल लाइन क्रॉसओवर if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80))) result=40; //--- परिणाम लौटाएं return(result); }
2.2. छोटी स्थिति खोलें/लंबी स्थिति बंद करें
"बेयरिश हारामी" पैटर्न की पुष्टि CCI इंडिकेटर द्वारा की जानी चाहिए: CCI(1)>50 (अंतिम पूर्ण बार का CCI मान 50 से ज्यादा होना चाहिए)।
लंबी स्थिति को बंद करना चाहिए यदि CCI इंडिकेटर ने -80 या 80 स्तरों को नीचे की ओर पार किया है।
//+------------------------------------------------------------------+ //| मार्केट में प्रवेश और निकासी की स्थितियों की जांच करता है | //| 1) मार्केट में प्रवेश (छोटी स्थिति खोलें, परिणाम=80) | //| 2) मार्केट से निकासी (लंबी स्थिति बंद करें, परिणाम=40) | //+------------------------------------------------------------------+ int CBH_BH_CCI::ShortCondition() { int result=0; //--- idx का उपयोग एक्सपर्ट एडवाइजर कार्य मोड निर्धारित करने के लिए किया जा सकता है //--- idx=0 - इस मामले में EA प्रत्येक टिक पर ट्रेड स्थितियों की जांच करता है //--- idx=1 - इस मामले में EA केवल न्यूज़ बार पर ट्रेड स्थितियों की जांच करता है int idx =StartIndex(); //--- छोटी स्थिति खोलने की स्थितियों की जांच //--- बेयरिश हारामी पैटर्न और CCI>50 का निर्माण if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (CCI(1)>50)) result=80; //--- लंबी स्थिति बंद करने की स्थितियों की जांच //--- ओवरबॉट/ओवरसोल्ड स्तरों (नीचे -80, नीचे 80) का सिग्नल लाइन क्रॉसओवर if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80))) result=40; //--- परिणाम लौटाएं return(result); }
2.3. MQL5 विजार्ड का उपयोग करके एक्सपर्ट एडवाइजर बनाना
CBH_BH_CCI क्लास स्टैंडर्ड लाइब्रेरी क्लासेस में शामिल नहीं है, इसे उपयोग करने के लिए, acbh_bh_cci.mqh फ़ाइल को डाउनलोड करना आवश्यक है (संलग्नकों में देखें) और इसे client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals में सहेजना होगा। उसी तरह candlepatterns.mqh फ़ाइल के साथ भी करना होगा। आप इसे MQL5 विजार्ड में मेटा एडिटर को पुनः आरंभ करने के बाद उपयोग कर सकते हैं।
एक एक्सपर्ट एडवाइजर बनाने के लिए MQL5 विजार्ड लॉन्च करें:

चित्र 4. MQL5 विजार्ड का उपयोग करके एक्सपर्ट एडवाइजर बनाना
आइए एक्सपर्ट एडवाइजर का नाम निर्दिष्ट करें:

चित्र 5. एक्सपर्ट एडवाइजर की सामान्य विशेषताएं
इसके बाद हमें उपयोग किए जाने वाले ट्रेड सिग्नल के मॉड्यूल का चयन करना होगा।

चित्र 6. एक्सपर्ट एडवाइजर के सिग्नल गुण
हमारे मामले में हम केवल एक ट्रेड सिग्नल मॉड्यूल का उपयोग कर रहे हैं।
"बुलिश हारामी/बेयरिश हारामी द्वारा पुष्टि किए गए सिग्नल" ट्रेड सिग्नल का मॉड्यूल जोड़ना:

चित्र 7. एक्सपर्ट एडवाइजर के सिग्नल गुण
ट्रेड सिग्नल का मॉड्यूल जोड़ा गया है:

चित्र 8. एक्सपर्ट एडवाइजर के सिग्नल गुण
आप किसी भी ट्रेलिंग गुणों का चयन कर सकते हैं, लेकिन हम "ट्रेलिंग स्टॉप का उपयोग नहीं किया गया" का उपयोग करेंगे:

चित्र 9. एक्सपर्ट एडवाइजर के ट्रेलिंग गुण
पैसे प्रबंधन के गुणों के बारे में, हम "फिक्स्ड ट्रेड वॉल्यूम के साथ ट्रेडिंग" का उपयोग करेंगे:

चित्र 10. एक्सपर्ट एडवाइजर के पैसे प्रबंधन गुण
"फिनिश" बटन पर क्लिक करके, हमें उत्पन्न एक्सपर्ट एडवाइजर का कोड प्राप्त होगा, जो Expert_ABH_BH_CCI.mq5 में स्थित होगा, इसे terminal_data_folder\MQL5\Experts\ में सहेजा जाएगा।
उत्पन्न एक्सपर्ट एडवाइजर के डिफ़ॉल्ट इनपुट पैरामीटर:
//--- मुख्य सिग्नल के लिए इनपुट्स input int Signal_ThresholdOpen =10; // खोलने के लिए सिग्नल थ्रेशोल्ड मान [0...100] input int Signal_ThresholdClose =10; // बंद करने के लिए सिग्नल थ्रेशोल्ड मान [0...100] input double Signal_PriceLevel =0.0; व्यापार निष्पादित करने के लिए मूल्य स्तर input double Signal_StopLevel =50.0; स्टॉप लॉस स्तर (पॉइंट में) input double Signal_TakeLevel =50.0; टेक प्रॉफिट स्तर (पॉइंट में)
इसे बदलना चाहिए:
//--- मुख्य सिग्नल के लिए इनपुट्स input int Signal_ThresholdOpen =40; // खोलने के लिए सिग्नल थ्रेशोल्ड मान [0...100] input int Signal_ThresholdClose =20; // बंद करने के लिए सिग्नल थ्रेशोल्ड मान [0...100] input double Signal_PriceLevel =0.0; व्यापार निष्पादित करने के लिए मूल्य स्तर input double Signal_StopLevel =0.0 // स्टॉप लॉस स्तर (पॉइंट में) input double Signal_TakeLevel =0.0 // टेक प्रॉफिट स्तर (पॉइंट में)
Signal_ThresholdOpen/Signal_ThresholdClose इनपुट पैरामीटर आपको खोले गए और बंद किए गए पदों के लिए थ्रेशोल्ड स्तर निर्दिष्ट करने की अनुमति देते हैं।
LongCondition() और ShortCondition() मेथड्स की कोड में हमने थ्रेशोल्ड के निश्चित मान निर्दिष्ट किए हैं:
- पद खोलना: 80;
- पद बंद करना: 40;
MQL5 विजार्ड द्वारा उत्पन्न एक्सपर्ट एडवाइजर "वोट्स" का उपयोग करके पद खोलता और बंद करता है। ट्रेड सिग्नल के मॉड्यूल से वोट का मुख्य मॉड्यूल (जिसमें सभी जोड़े गए मॉड्यूल होते हैं) का भी उपयोग किया जाता है, लेकिन इसके LongCondition() और ShortCondition() मेथड्स हमेशा 0 लौटाते हैं।
मुख्य मॉड्यूल के वोट के परिणाम भी "वोट्स" के औसत में उपयोग किए जाते हैं। हमारे मामले में हमारे पास: मुख्य मॉड्यूल + 1 ट्रेड सिग्नल का मॉड्यूल है, इसलिए हमें थ्रेशोल्ड के मान सेट करते समय इस तथ्य को ध्यान में रखना होगा। इस तथ्य के कारण ThresholdOpen और ThresholdClose को 40=(0+80)/2 और 20=(0+40)/2 के रूप में सेट किया जाना चाहिए।
Signal_StopLevel और Signal_TakeLevel इनपुट पैरामीटर के मान 0 पर सेट किए गए हैं, इसका मतलब है कि पदों का समापन केवल तब किया जाएगा जब समापन की स्थितियाँ सही हों।
2.4. ऐतिहासिक बैकटेस्टिंग परिणाम
आइए एक्सपर्ट एडवाइजर का बैकटेस्टिंग ऐतिहासिक डेटा पर करें (EURUSD H1, परीक्षण अवधि: 2010.01.01-2011.03.16, PeriodCCI=11, MA_period=5)।
एक्सपर्ट एडवाइजर बनाने में हमने फिक्स्ड वॉल्यूम का उपयोग किया (फिक्स्ड लॉट ट्रेडिंग, 0.1), ट्रेलिंग स्टॉप एल्गोरिदम का उपयोग नहीं किया गया (ट्रेलिंग का उपयोग नहीं किया गया).

चित्र 11. एक्सपर्ट एडवाइजर के परीक्षण परिणाम, बुलिश हारामी/बेयरिश हारामी + CCI पर आधारित
सबसे अच्छे इनपुट पैरामीटर का सेट स्ट्रैटेजी टेस्ट के माध्यम से पाया जा सकता है, जो मेटाट्रेडर 5 क्लाइंट टर्मिनल का हिस्सा है।
MQL5 विजार्ड द्वारा बनाई गई एक्सपर्ट एडवाइजर का कोड expert_abh_bh_cci.mq5 में संलग्न है।
संबंधित पोस्ट
- MQL5 विजार्ड: बुलिश हरामी/बियरिश हरामी और RSI पर आधारित ट्रेड सिग्नल
- MQL5 विजार्ड: बुलिश और बेयरिश मीटिंग लाइन्स + RSI पर आधारित ट्रेड सिग्नल
- MQL5 विजार्ड: बुलिश/बेयरिश मीटिंग लाइन्स पर आधारित ट्रेड सिग्नल्स + CCI
- MQL5 विजार्ड: बुलिश एवं बेयरिश इंगुल्फिंग ट्रेड सिग्नल + CCI के साथ
- MQL5 विजार्ड: मॉर्निंग/ईवनिंग स्टार पैटर्न और स्टोकास्टिक पर आधारित ट्रेड सिग्नल