होम सिस्टम ट्रेडिंग पोस्ट

MQL5 विजार्ड: दो EMA के क्रॉसओवर पर आधारित ट्रेड सिग्नल और इंट्राडे टाइम फ़िल्टर

संलग्नक
264.zip (3.83 KB, डाउनलोड 0 बार)

MQL5 विजार्ड आपको स्वचालित रूप से विशेषज्ञ सलाहकारों (EA) का कोड बनाने की अनुमति देता है। विस्तृत जानकारी के लिए देखें MQL5 विजार्ड में तैयार-निर्मित विशेषज्ञ सलाहकार बनाना.

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

यहां हम दो एक्सपोनेंशियल स्मूथ मूविंग एवरेज (फास्ट EMA और स्लो EMA) के क्रॉसओवर के साथ इंट्राडे टाइम फ़िल्टर के आधार पर रणनीति पर विचार करेंगे। इसे "इंट्राडे टाइम फ़िल्टर के साथ दो EMA के क्रॉसओवर पर आधारित सिग्नल" कहा जाता है (जब MQL5 विजार्ड में EA स्वचालित रूप से बनाया जाता है).

ट्रेड सिग्नल:

  • लंबी पोजीशन खोलें: फास्ट EMA स्लो EMA को ऊपर की ओर क्रॉस करता है और इंट्राडे टाइम फ़िल्टर की शर्तें पूरी नहीं होतीं।
  • शॉर्ट पोजीशन खोलें: फास्ट EMA स्लो EMA को नीचे की ओर क्रॉस करता है और इंट्राडे टाइम फ़िल्टर की शर्तें पूरी नहीं होतीं।

इस रणनीति को CSignal2EMA_ITF क्लास में लागू किया गया है।

सिग्नल की फ़िल्ट्रेशन, निर्दिष्ट समय अवधि के आधार पर, CSignalITF क्लास में लागू की गई है। इसके उपयोग का एक उदाहरण CSignal2EMA_ITF क्लास को ध्यान में रखते हुए है (इसमें CSignalITF क्लास ऑब्जेक्ट शामिल है).

यह ट्रेडिंग सिस्टम पेंडिंग ऑर्डर पर आधारित है, मूल्य स्तर मूविंग एवरेज के मान के आधार पर गणना की जाती हैं, और ATR (एवरेज ट्रू रेंज) का उपयोग किया जाता है.

चित्र 1. इंट्राडे टाइम फ़िल्टर के साथ दो EMA के क्रॉसओवर पर आधारित ट्रेड सिग्नल

चित्र 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 का मान लौटाता है


इस सिस्टम की एक विशेषता यह है: ट्रेड लिमिट इनपुट पैरामीटर पर निर्भर करता है। इसके संकेत के आधार पर, विभिन्न मामलों में विभाजित होता है:

  1. Limit>0. यह उस समय में प्रवेश करेगा जब मूविंग एवरेज की झूठी ब्रेकडाउन बाजार मूल्य से बेहतर मूल्य पर हो (बाय लिमिट और सेल लिमिट ऑर्डर ट्रेड सिग्नल के आधार पर लगाए जाएंगे)
  2. Limit<0. यह मूल्य आंदोलन की दिशा में प्रवेश करेगा (बाय स्टॉप और सेल स्टॉप ऑर्डर ट्रेड सिग्नल के आधार पर लगाए जाएंगे).
  3. 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 के क्रॉसओवर पर आधारित सिग्नल का चयन करें

चित्र 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 के क्रॉसओवर पर आधारित ट्रेड सिग्नल के साथ विशेषज्ञ सलाहकार के परीक्षण परिणाम

चित्र 3. इंट्राडे टाइम फ़िल्टर के बिना दो EMA के क्रॉसओवर पर आधारित ट्रेड सिग्नल के साथ विशेषज्ञ सलाहकार के परीक्षण परिणाम

इंट्राडे फ़िल्टर का उपयोग नहीं किया गया है, इसलिए कई झूठे सिग्नल हैं। यदि हम व्यापार के घंटों के आधार पर डील के परिणामों का विश्लेषण करें तो ट्रेड सिग्नल में सुधार किया जा सकता है.

हमारे मामले में, हमने पाया कि दो EMA का क्रॉसओवर 6:00 से 23:59 तक कई झूठे सिग्नल देता है। हम फ़िल्टर पैरामीटर को सेट करके इंट्राडे टाइम फ़िल्टर निर्दिष्ट कर सकते हैं.

उदाहरण के लिए, हम समय फ़िल्टर निर्दिष्ट कर सकते हैं, जो केवल 0:00 से 5:59 के बीच पोजीशन खोलने की अनुमति देता है। इसे BadHoursOfDay=16777152=111111111111111111000000b के मान को सेट करके किया जा सकता है। सभी अन्य व्यापार घंटे "खराब" होते हैं, इसलिए नए पोजीशन खोलने की अनुमति 6:00 से दिन के अंत तक नहीं देना बेहतर है.

अगर हम BadHoursOfDay=16777152 का मान सेट करते हैं, तो हम कई झूठे सिग्नल को फ़िल्टर करेंगे:

चित्र 4. इंट्राडे टाइम फ़िल्टर (BadHoursofDay=16777152) के साथ दो EMA के क्रॉसओवर पर आधारित ट्रेड सिग्नल के परीक्षण परिणाम

चित्र 4. इंट्राडे टाइम फ़िल्टर (BadHoursofDay=16777152) के साथ दो EMA के क्रॉसओवर पर आधारित ट्रेड सिग्नल के परीक्षण परिणाम


CSignalITF कई अन्य समय फ़िल्ट्रेशन सुविधाएँ प्रदान करता है (बस घंटे के भीतर "अच्छे" और "खराब" मिनट, दिन के भीतर घंटे और सप्ताह के भीतर दिन निर्दिष्ट करें).

समय फ़िल्टर का उपयोग ट्रेड सिग्नल को बेहतर बनाने और बाजार की गतिशीलता को ध्यान में रखने की अनुमति देता है (उदाहरण के लिए, ट्रेड सत्र की विशेषताएँ).

संलग्नक: Signal2EMA-ITF.mqh में CSignal2EMA_ITF क्लास को terminal_data_folder\MQL5\Include\Expert\Signal फ़ोल्डर में रखा जाना चाहिए.

expert_2ema_itf.mq5 में MQL5 विजार्ड का उपयोग करके बनाए गए विशेषज्ञ सलाहकार का कोड है।


संबंधित पोस्ट

टिप्पणी (0)