नमस्ते,
मेरे पास एक मूविंग औसत क्रॉस इंडिकेटर है जो प्रत्येक बार चलती औसत क्रॉस को अलर्ट बनाता है।
मैं संकेतक को केवल एक चेतावनी उत्पन्न करना चाहता हूं जब एक क्रॉस अभी हुआ हो (यानी वर्तमान बार पर)। हालांकि, इस सूचक के साथ, प्रत्येक बार जब मैं MT4 खोलता हूं या टाइमफ्रेम के बीच स्विच करता हूं तो मुझे अलर्ट मिल रहा है भले ही क्रॉस 2-3 बार पहले हुआ हो।
नीचे दिए गए कोड की एक प्रति यहां दी गई है। बहुत धन्यवाद।
#property indior_chart_window
#property संकेतक_बफर 2
#property indior_color1 DarkGoldenrod
#property indior_color2 फायरब्रीक
डबल क्रॉसअप [];
डबल क्रॉसडाउन [];
बाहरी int FasterEMA = 1;
बाहरी int SlowerEMA = 50;
बाहरी बूल Soundon = सच;
डबल अलर्टटाग;
डबल नियंत्रण = 2147483647;
// ----------------------------------------------- -------------------
//| कस्टम सूचक प्रारंभिक समारोह |
// ----------------------------------------------- -------------------
int init ()
{
//---- संकेतक
SetIndexStyle (0, DRAW_ARROW, EMPTY, 1);
SetIndexArrow (0, 233);
SetIndexBuffer (0, क्रॉसअप);
SetIndexStyle (1, DRAW_ARROW, EMPTY, 1);
SetIndexArrow (1, 234);
SetIndexBuffer (1, क्रॉसडाउन);
//----
वापसी (0);
}
// ----------------------------------------------- -------------------
//| कस्टम सूचक deinitialization समारोह |
// ----------------------------------------------- -------------------
int deinit ()
{
//----
//----
वापसी (0);
}
// ----------------------------------------------- -------------------
//| कस्टम सूचक पुनरावृत्ति समारोह |
// ----------------------------------------------- -------------------
int प्रारंभ () {
int सीमा, मैं, काउंटर;
डबल तेज, अब, धीमे, अब, तेज, स्पष्ट, धीमे, स्पष्ट, तेजी से बाद में, धीमे बाद में;
डबल रेंज, AvgRange;
int counted_bars = संकेतक गणना ();
//---- संभावित त्रुटियों की जांच करें
अगर (counted_barslt; 0) वापसी (-1);
//---- पिछली गिनती बार को सुनाया जाएगा
अगर (counted_barsgt; 0) counted_bars--;
सीमा = बार्स-counted_bars;
के लिए (i = 0; i lt; = सीमा; i ) {
काउंटर = मैं;
रेंज = 0;
AvgRange = 0;
के लिए (काउंटर = i; counterlt; = i 9; काउंटर )
{
AvgRange = AvgRange MathAbs (उच्च [काउंटर] -कम [काउंटर]);
}
रेंज = AvgRange10;
fastEMAnow = iMA (NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i);
fastEMAprevious = iMA (NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i 1);
fastEMAafter = iMA (NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i-1);
slowerEMAnow = iMA (NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, i);
slowerEMAprevious = iMA (NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, i 1);
slowerEMAafter = iMA (NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, i-1);
अगर ((fastEMAnow gt; slowerEMAnow) (fastEMAprevious lt; slowerEM पूर्व) (fastEMAafter gt; slowerEMAafter)) {
क्रॉसअप [i] = कम [i] - रेंज * 0.5;
}
और अगर ((fastEMAnow lt; slowerEMAnow) (fastEMAprevious gt; slowerEM पूर्व) (तेज़ के बाद lt; slowerEMAafter)) {
क्रॉसडाउन [i] = उच्च [i] रेंज * 0.5;
}
अगर (साउंडऑन == सच मैं == 1 क्रॉसअप [i] gt; क्रॉसडाउन [i] अलर्टटाग! = समय [0]) {
अलर्ट (एमएसीडी 0 क्रॉस डाउन, सिंबल (),, अवधि ());
चेतावनीटैग = समय [0];
SendNotifiion ( _Symbol पर MACD 0 क्रॉस डाउन);
}
अगर (साउंडऑन == सच मैं == 1 क्रॉसअप [i] लेफ्टिनेंट; क्रॉसडाउन [i] अलर्टटाग! = समय [0]) {
चेतावनी (एमएसीडी 0 क्रॉस यूपी, प्रतीक (), अवधि ());
चेतावनीटैग = समय [0];
SendNotifiion (MACD 0 क्रॉस यूपी _Symbol पर);
}
}
वापसी (0);
}