जब trigLv सेटिंग में निर्दिष्ट स्तर deviation के भीतर पार होता है, तो यह इंडिकेटर आपके मोबाइल डिवाइस पर एक पुश नोटिफिकेशन भेजता है, अगर notification पैरामीटर सक्षम है, और साथ ही अगर alert पैरामीटर सक्षम है, तो यह एक अलर्ट भी बजाता है। trigLv का ट्रिगर स्तर और deviation सीमाएं क्षैतिज रेखाओं द्वारा हाइलाइट की जाती हैं, जिनका स्टाइल, रंग और मोटाई भी इंडिकेटर सेटिंग्स में निर्धारित किया जा सकता है। यह डिजाइन आपको चार्ट पर विभिन्न स्तरों के साथ कई इंडिकेटर की प्रतियां जोड़ने की अनुमति देता है और उनके इंटरसेक्शन के परिणामस्वरूप सिग्नल प्राप्त करता है।
यहां दिया गया trigLv स्तर केवल एक बार एक बार पर कार्य करता है। पुनः सक्रियता केवल अगले बार के खुलने के बाद संभव है। इस प्रकार, यह सुनिश्चित किया गया है कि हर टिक पर बहुत अधिक ट्रिगर्स से बचा जाए।

//+------------------------------------------------------------------+//| लेवल इंडिकेटर.mq5 |//| कॉपीराइट 2022, © Cyberdev |//| https://www.mql5.com/en/users/cyberdev/seller |//+------------------------------------------------------------------+#property copyright"कॉपीराइट 2022, © Cyberdev"#property link "https://www.mql5.com/en/users/cyberdev/seller"#property version "1.00"#property indicator_chart_window#property indicator_plots0#include <ChartObjects\ChartObjectsLines.mqh> inputbool alert = true; // अलर्ट का उपयोग करेंinputbool notification = true; // पुश नोटिफिकेशन का उपयोग करेंinputdouble trigLv = 0.0; // सक्रियण स्तरinputint deviation = 30; // trigLv से डेविएशन पॉइंट मेंinputint lineWidth = 1; // रेखा की चौड़ाईinputENUM_LINE_STYLE lineStyle = STYLE_SOLID; // रेखा का स्टाइलinputcolor lineColor = clrMediumSpringGreen; // रेखा का रंगinputcolor inactivityColor = clrLightGray; // निष्क्रियता का रंग CChartObjectHLine lv, dvH, dvL; bool equal(double _v1, double _v2, double _epsilon) { returnfabs(_v1 - _v2) <= fabs(_epsilon); } //+------------------------------------------------------------------+//| कस्टम इंडिकेटर इनिशियलाइजेशन फंक्शन |//+------------------------------------------------------------------+intOnInit() { string name; double dv; color color_; name = "alert.lv-"; dv = deviation * SymbolInfoDouble(NULL, SYMBOL_POINT); color_ = (alert || notification) ? lineColor : inactivityColor; for (int n = 0; n <= INT_MAX && !IsStopped(); n++) { if (ObjectFind(0, name + (string)n) != 0) { if (!lv.Create(0, name + (string)n, 0, trigLv)) returnINIT_FAILED; lv.Width(lineWidth); lv.Style(lineStyle); lv.Color(color_); dvH.Create(0, "alert.dvH-" + (string)n, 0, trigLv + dv); dvH.Width(1); dvH.Style(STYLE_DOT); dvH.Color(color_); dvL.Create(0, "alert.dvL-" + (string)n, 0, trigLv - dv); dvL.Width(1); dvL.Style(STYLE_DOT); dvL.Color(color_); break; } } if (!alert && !notification) Print("लेवल इंडिकेटर। स्तर ", lv.Price(0), " निष्क्रिय है!"); if (trigLv == 0.0) Alert("लेवल इंडिकेटर। कृपया "trigLv" पैरामीटर को वांछित मान पर सेट करें!"); return(INIT_SUCCEEDED); } voidOnDeinit(constint reason) { //lv.Delete(); //dvH.Delete(); //dvL.Delete(); } intOnCalculate(constint rates_total, constint prev_calculated, constdatetime &time[], constdouble &open[], constdouble &high[], constdouble &low[], constdouble &close[], constlong &tick_volume[], constlong &volume[], constint &spread[] ) { staticbool triggered = false; staticdatetime time_ = 0; if (!alert && !notification) return rates_total; if (equal(lv.Price(0), close[rates_total - 1], deviation * SymbolInfoDouble(NULL, SYMBOL_POINT))) { if (time_ != time[rates_total - 1]) time_ = time[rates_total - 1]; else return rates_total; if (!triggered) { if (alert) Alert("लेवल इंडिकेटर। स्तर ", NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)), " ट्रिगर हुआ!"); if (notification) SendNotification("लेवल इंडिकेटर। स्तर " + (string)NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)) + " ट्रिगर हुआ!"); } triggered = true; } else triggered = false; return rates_total; } //+------------------------------------------------------------------+

टिप्पणी 0