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

चित्र 1. "सुबह का तारा" और "सुबह का डोजी तारा" कैंडलस्टिक पैटर्न
"सुबह का तारा" पैटर्न की पहचान CheckPatternMorningStar() और CheckPatternMorningDoji() मेथड्स में CCandlePattern क्लास की होती है:
//+------------------------------------------------------------------+ //| "सुबह का तारा" पैटर्न की पहचान करता है | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternMorningStar() { //--- सुबह का तारा if((Open(3)-Close(3)>AvgBody(1)) && // भालू कैंडल, इसका शरीर औसत कैंडल शरीर से बड़ा है (MathAbs(Close(2)-Open(2)<AvgBody(1*0.5) && // दूसरी कैंडल का छोटा शरीर (औसत शरीर के आधे से कम) (Close(2)<Close(3)) && // दूसरी कैंडल का क्लोज़ पहले की कैंडल से कम है (Open(2)<Open(3)) && // दूसरी कैंडल का ओपन पहले की कैंडल से कम है (Close(1)>MidOpenClose(3))) // अंतिम पूर्ण कैंडल का क्लोज़ पहले की कैंडल के मध्य से अधिक है return(true); //--- return(false); }
"सुबह का तारा" और "सुबह का डोजी तारा" कैंडलस्टिक पैटर्न की पहचान करने के लिए CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) और CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI) मेथड्स का उपयोग किया जाता है।
1.2. शाम का तारा
यह पैटर्न अपट्रेंड के रिवर्सल को दर्शाता है, इसमें तीन कैंडल होती हैं (चित्र 2)। एक लंबे सफेद कैंडल के बाद एक कैंडल होती है (रंग महत्वपूर्ण नहीं है) जिसमें एक छोटा शरीर होता है, जो सफेद कैंडल के शरीर के बाहर होता है। कैंडल का छोटा शरीर यह दर्शाता है कि बैल और भालू की ताकत बराबर है और बाजार ट्रेंड बदलने के लिए तैयार है।
पैटर्न की तीसरी कैंडल भालू कैंडल होती है, इसका शरीर दूसरी कैंडल के शरीर के साथ ओवरलैप नहीं होता, और क्लोज़ प्राइस पहले (बुलिश) कैंडल के शरीर के भीतर होती है। मॉडल का अंतिम कैंडल भी चित्र 2 में प्रदर्शित है।
यदि दूसरी कैंडल डोजी जैसी होती है, तो इस मॉडल को "शाम का डोजी तारा" कहा जाता है।

चित्र 2. "शाम का तारा" और "शाम का डोजी तारा" कैंडलस्टिक पैटर्न
"शाम का तारा" और "शाम का डोजी तारा" पैटर्न की पहचान करने के लिए यहां मेथड्स हैं:
//+------------------------------------------------------------------+ //| "शाम का तारा" पैटर्न की पहचान करता है | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternEveningStar() { //--- शाम का तारा if((Close(3)-Open(3)>AvgBody(1)) && // बुलिश कैंडल जिसका शरीर औसत से ज्यादा है (MathAbs(Close(2)-Open(2)<AvgBody(1*0.5) && // दूसरी कैंडल का छोटा शरीर (औसत शरीर के आधे से कम) (Close(2)>Close(3)) && // दूसरी कैंडल का क्लोज़ पहले की कैंडल से अधिक है (Open(2)>Open(3)) && // दूसरी कैंडल का ओपन पहले की कैंडल से अधिक है (Close(1)<MidOpenClose(3))) // अंतिम पूर्ण कैंडल का क्लोज़ पहले की कैंडल के मध्य से कम है return(true); //--- return(false); }
"शाम का तारा" और "शाम का डोजी तारा" कैंडलस्टिक पैटर्न की पहचान करने के लिए CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) और CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI) मेथड्स का उपयोग किया जाता है।
2. ट्रेड सिग्नल, जो MFI संकेतक द्वारा पुष्टि की जाती हैं
लॉन्ग या शॉर्ट पोजीशन खोलने के लिए ट्रेड सिग्नल की पुष्टि MFI संकेतक द्वारा की जानी चाहिए। MFI संकेतक का मान 40 से कम होना चाहिए (लॉन्ग पोजीशन के लिए) या 60 से अधिक होना चाहिए (शॉर्ट पोजीशन के लिए)।
खुले हुए पोजीशन का क्लोज़िंग MFI संकेतक के मान पर निर्भर करती है। इसे 2 मामलों में किया जा सकता है:
- यदि MFI विपरीत महत्वपूर्ण स्तर पर पहुंच जाता है (लॉन्ग पोजीशन के लिए 70 और शॉर्ट पोजीशन के लिए 30)
- यदि उल्टा सिग्नल पुष्टि नहीं होता है (जब MFI संकेतक निम्नलिखित स्तरों तक पहुंचता है: लॉन्ग पोजीशन के लिए 30 और शॉर्ट पोजीशन के लिए 70)

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

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

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

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

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

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

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

चित्र 10. एक्सपर्ट एडवाइजर के पैसे प्रबंधन गुण
"फिनिश" बटन दबाते ही, हमें जनरेट किए गए एक्सपर्ट एडवाइजर का कोड मिलेगा, जो Expert_AMS_ES_MFI.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, PeriodMFI=49, MA_period=3)।
एक्सपर्ट एडवाइजर बनाने में हमने फिक्स्ड वॉल्यूम (फिक्स्ड लॉट ट्रेडिंग, 0.1) का उपयोग किया, ट्रेलिंग स्टॉप एल्गोरिदम का उपयोग नहीं किया गया (ट्रेलिंग का उपयोग नहीं किया गया).

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