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

2 MA क्रॉसिंग के लिए विशेषज्ञ सलाहकार - MetaTrader 4 पर ट्रेडिंग रणनीति

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

आज हम एक ऐसे विशेषज्ञ सलाहकार (Expert Advisor) का निर्माण शुरू करेंगे, जो 2 MA क्रॉसिंग पर आधारित है। सबसे पहले, हम इनपुट वेरिएबल्स को परिभाषित करेंगे।

//--- इनपुट पैरामीटर्स
input    int      period_ma_fast = 8;  //फास्ट MA की अवधि
input    int      period_ma_slow = 20;//स्लो MA की अवधि

input    double   takeProfit  = 20.0;  //टेक प्रॉफिट (पिप्स)
input    double   stopLoss    = 20.0;  //स्टॉप लॉस (पिप्स)

input    double   lotSize     = 0.10;  //लॉट साइज
input    double   minEquity   = 100.0;//न्यूनतम इक्विटी ($)

input    int Slippage = 3;       //स्लिपेज
input    int MagicNumber = 889;  //मैजिक नंबर


इसके बाद, हम वैश्विक वेरिएबल्स को परिभाषित करेंगे। ये वेरिएबल्स सभी फ़ंक्शंस के लिए उपलब्ध होंगे।

//वैश्विक वेरिएबल्स
double   myPoint    = 0.0;
int      mySlippage = 0;
int      BuyTicket   = 0;
int      SellTicket  = 0;


जब EA को निष्पादित किया जाता है, तो सबसे पहला फ़ंक्शन जो निष्पादित होता है वह है OnInit()। इसलिए हम इस फ़ंक्शन का उपयोग अक्सर वैश्विक वेरिएबल्स को मान्य और प्रारंभ करने के लिए करते हैं।

int OnInit()
{
   //इनपुट की वैधता जांचना, हम हमेशा डेटा इनिशियलाइजेशन पर वैधता जांचते हैं
   if (period_ma_fast >= period_ma_slow || takeProfit < 0.0 || stopLoss < 0.0 || lotSize < 0.01 || minEquity < 10){
      Alert("चेतावनी - प्रारंभिक डेटा अमान्य है");
      return (INIT_PARAMETERS_INCORRECT);
   }
   
   double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
   if(lotSize<min_volume)
   {
      string pesan =StringFormat("वॉल्यूम अधिकतम सीमा से कम है, जो %.2f है",min_volume);
      Alert (pesan);
      return(INIT_PARAMETERS_INCORRECT);
   }
   
   myPoint = GetPipPoint(Symbol());
   mySlippage = GetSlippage(Symbol(),Slippage);

   return(INIT_SUCCEEDED);
}


जब मार्केट प्राइस में बदलाव होता है (टिक), तो OnTick() फ़ंक्शन को कॉल किया जाएगा और इस फ़ंक्शन ब्लॉक में सभी निर्देशों / फ़ंक्शंस को निष्पादित करेगा।

OnTick() फ़ंक्शन के अंदर विभिन्न अन्य फ़ंक्शंस को कॉल किया जाएगा।

सबसे पहले checkMinEquity() फ़ंक्शन को कॉल किया जाएगा, जो ट्रेडिंग इक्विटी की पर्याप्तता को नियंत्रित करेगा। यदि इक्विटी फंड पर्याप्त हैं (न्यूनतम इक्विटी से अधिक), तो इसके बाद एक सिग्नल वेरिएबल की घोषणा की जाएगी और इसके बाद NewCandle() फ़ंक्शन को कॉल किया जाएगा, जो यह सूचित करता है कि एक नया कैंडल बन गया है।

getSignal() फ़ंक्शन दोनों मूविंग एवरेज इंडिकेटर्स के मान पढ़ेगा और यह जानकारी लौटाएगा कि क्या ऊपर या नीचे क्रॉस हो रहा है, जो खरीद/बेचने के सिग्नल के लिए संकेत होगा।

इस सिग्नल जानकारी के आधार पर, इसे transaction() फ़ंक्शन को भेजा जाएगा, जो ओपन खरीद या बिक्री की स्थिति सेट करेगा।

इसके बाद setTPSL() फ़ंक्शन को कॉल किया जाएगा, जिसका कार्य टेक प्रॉफिट और स्टॉप लॉस कीमतें सेट करना है।

यदि इक्विटी न्यूनतम इक्विटी आवश्यकता को पूरा नहीं करती है, तो एक चेतावनी दिखाई देगी और यह EA समाप्त कर दिया जाएगा।

void OnTick()
{
   if (cekMinEquity()){
      
      
      int signal = -1;
      bool isNewCandle = NewCandle(Period(), Symbol());
      
      signal = getSignal(isNewCandle);
      transaction(isNewCandle, signal);
      setTPSL();
      
      
   }else{
      //ट्रेडिंग बंद करें, क्योंकि इक्विटी पर्याप्त नहीं है
      Print("EA को बंद किया जा रहा है क्योंकि इक्विटी पर्याप्त नहीं है");
   }
}


setTPSL() फ़ंक्शन

void setTPSL(){
   int   tOrder = 0;
   string   strMN = "", pair = "";
   double sl = 0.0, tp = 0.0;
   
   pair = Symbol();
   
   tOrder = OrdersTotal();
   for (int i=tOrder-1; i>=0; i--){
      bool hrsSelect = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      strMN = IntegerToString(OrderMagicNumber());
      if (StringFind(strMN, IntegerToString(MagicNumber), 0) == 0 && StringFind(OrderSymbol(), pair, 0) == 0 ){
         if (OrderType() == OP_BUY && (OrderTakeProfit() == 0 || OrderStopLoss() == 0) ){
            if (takeProfit > 0) {
               tp = OrderOpenPrice() + (takeProfit * myPoint);
            }else{
               tp = OrderOpenPrice();
            }
            if (stopLoss > 0) {
               sl = OrderOpenPrice() - (stopLoss * myPoint);
            }else{
               sl = OrderStopLoss();
            }
            if (OrderTakeProfit() != tp || OrderStopLoss() != sl ){
               if(OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0, clrBlue)){
                  Print ("OrderModify सफल है");
               }
            }
         }
         if (OrderType() == OP_SELL && (OrderTakeProfit() == 0 || OrderStopLoss() == 0) ){
            if (takeProfit > 0) {
               tp = OrderOpenPrice() - (takeProfit * myPoint);
            }else{
               tp = OrderOpenPrice();
            }
            if (stopLoss > 0) {
               sl = OrderOpenPrice() + (stopLoss * myPoint);
            }else{
               sl = OrderStopLoss();
            }
            if (OrderTakeProfit() != tp || OrderStopLoss() != sl ){
               if (OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0, clrRed)){
                  Print ("OrderModify सफल है");
               }
            }
         }
       
      }//मैजिक नंबर और पेयर के अंतर्गत
      
} //फॉर लूप का अंत
}


शिक्षा और साझाकरण के लिए, कृपया हमारे टेलीग्राम ग्रुप में शामिल हों: t.me/codeMQL


यदि आप अपने ट्रेडिंग को सपोर्ट करने के लिए एक ऐप की तलाश कर रहे हैं, तो कृपया हमारे SignalForex ऐप को प्ले स्टोर से डाउनलोड करें

https://play.google.com/store/apps/details?id=com.autobotfx.signalforex





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

टिप्पणी (0)