आज हम एक ऐसे विशेषज्ञ सलाहकार (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
संबंधित पोस्ट
- MQL5 विजार्ड: दो EMA के क्रॉसओवर पर आधारित ट्रेड सिग्नल और इंट्राडे टाइम फ़िल्टर
- MetaTrader 4 के लिए विज़ुअल ऑर्डर प्रोसेसिंग - आपके ट्रेडिंग साथी
- MQL5 विजार्ड: मॉर्निंग/इविनिंग स्टार और RSI पर आधारित ट्रेड सिग्नल
- MQL5 विजार्ड: डार्क क्लाउड कवर/पीयरसिंग लाइन और स्टोकास्टिक पर आधारित ट्रेड सिग्नल
- MQL5 विजार्ड: बुलिश और बेयरिश मीटिंग लाइन्स + RSI पर आधारित ट्रेड सिग्नल