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

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

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

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

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

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

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

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

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

चित्र 10. एक्सपर्ट एडवाइजर के पैसे प्रबंधन की विशेषताएँ
"फिनिश" बटन दबाने पर, हमें उत्पन्न एक्सपर्ट एडवाइजर का कोड मिलेगा, जो Expert_AMS_ES_RSI.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 विजार्ड द्वारा उत्पन्न एक्सपर्ट एडवाइजर ट्रेड सिग्नल के मॉड्यूल से "मत" का उपयोग करके स्थिति खोलता और बंद करता है। मुख्य मॉड्यूल का मत भी "मत" औसत में उपयोग किया जाता है। हमारे मामले में हमारे पास है: मुख्य मॉड्यूल + 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.04, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5) पर बैकटेस्टिंग पर विचार करें।
एक्सपर्ट एडवाइजर बनाने में हमने निश्चित वॉल्यूम का उपयोग किया (फिक्स्ड लॉट ट्रेडिंग, 0.1), ट्रेलिंग स्टॉप एल्गोरिदम का उपयोग नहीं किया गया (ट्रेलिंग का उपयोग नहीं).

चित्र 11. मॉर्निंग/इविनिंग स्टार + RSI पर आधारित एक्सपर्ट एडवाइजर के परीक्षण परिणाम
इनपुट पैरामीटर का सबसे अच्छा सेट स्ट्रेटेजी टेस्टर के माध्यम से MetaTrader 5 क्लाइंट टर्मिनल का उपयोग करके पाया जा सकता है।
पैरामीटर अध्ययन को स्ट्रेटेजी टेस्टर का 3D-विज़ुअलाइज़ेशन मोड का उपयोग करके बहुत सरल बनाया गया है, जो 419 बिल्ड से जोड़ा गया है (चित्र 12):

चित्र 12. PeriodRSI और MA_period इनपुट पैरामीटर के अनुसार बैलेंस
MQL5 विजार्ड द्वारा बनाए गए एक्सपर्ट एडवाइजर का कोड expert_ms_es_rsi.mq5 में संलग्न है।
संबंधित पोस्ट
- MQL5 विजार्ड: मॉर्निंग/ईवनिंग स्टार पैटर्न और स्टोकास्टिक पर आधारित ट्रेड सिग्नल
- MetaTrader 4 के लिए विज़ुअल ऑर्डर प्रोसेसिंग - आपके ट्रेडिंग साथी
- MQL5 विजार्ड: सुबह/शाम के तारे के आधार पर ट्रेड सिग्नल + CCI के साथ एक्सपर्ट एडवाइजर
- MQL5 विज़ार्ड - हैमर/हैंगिंग मैन और स्टोकास्टिक पर आधारित ट्रेड सिग्नल
- MQL5 विज़ार्ड: हैमर/हैंगिंग मैन पैटर्न पर आधारित ट्रेड सिग्नल्स - MetaTrader 5 के लिए