مرحبا،
لدي مؤشر تقاطع متوسطات متحركة ينتج تنبيهًا في كل مرة تعبر فيها المتوسطات المتحركة.
أن أستمتع بالمؤشر لإنشاء تنبيه فقط عندما يكون هناك تقاطع (فقط على الشريط الحالي). ومع ذلك ، مع هذا المؤشر ، في كل مرة أقوم بفتح MT4 أو التبديل بين الأطر الزمنية ، أتلقى تنبيهات على الرغم من أن التقاطع قد حدث قبل 2-3 أشرطة.
هنا نسخة من الشفرة تحت. تشكرات.
#property indior_chart_window
#property indior_buffers 2
#property indior_color1 DarkGoldenrod
#property indior_color2 FireBrick
ازدواجية مزدوجة []؛
مزدوج CrossDown []؛
extern int FasterEMA = 1؛
extern Int SlowerEMA = 50؛
extern bool SoundON = true؛
double alertTag
التحكم المزدوج = 2147483647 ؛
// ----------------------------------------------- -------------------
//| وظيفة التهيئة مؤشر مخصص
// ----------------------------------------------- -------------------
int init ()
//- المؤشرات
SetIndexStyle (0، DRAW_ARROW، EMPTY، 1)؛
SetIndexArrow (0، 233)؛
SetIndexBuffer (0 ، CrossUp) ؛
SetIndexStyle (1، DRAW_ARROW، EMPTY، 1)؛
SetIndexArrow (1، 234)؛
SetIndexBuffer (1 ، CrossDown) ؛
//-
عودة (0)؛
// ----------------------------------------------- -------------------
//| وظيفة مخصصة مؤشر تسييل |
// ----------------------------------------------- -------------------
int deinit ()
//-
//-
عودة (0)؛
// ----------------------------------------------- -------------------
//| وظيفة التكرار مؤشر مخصص
// ----------------------------------------------- -------------------
بداية int ()
int الحد ، ط ، عداد ؛
double fasterEMAnow، slowerEMAnow، fasterEMAprevious السابقة، slowerEM السابق، fasterEMAafter، slowerEMAafter؛
نطاق مزدوج ، AvgRange.
int counted_bars = IndiorCounted ()؛
//- تحقق من وجود أخطاء محتملة
إذا (counted_barslt؛ 0) return (-1)؛
//- سيتم إعادة حساب آخر شريط محذوف
إذا (counted_barsgt؛ 0) counted_bars--؛
حد = البارات-counted_bars.
لـ (i = 0؛ i lt؛ = limit؛ i )
مكافحة = ط.
مجموعة = 0؛
AvgRange = 0؛
لـ (counter = i؛ counterlt؛ = i 9؛ counter )
AvgRange = AvgRange MathAbs (عالية [مواجهة] -Low [مواجهة])؛
مجموعة = AvgRange10؛
fasterEMAnow = iMA (NULL، 0، FasterEMA، 0، MODE_EMA، PRICE_CLOSE، i)؛
fasterEMAprevious = iMA (NULL، 0، FasterEMA، 0، MODE_EMA، PRICE_CLOSE، i 1)؛
fasterEMAafter = 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)؛
if ((fasterEMAnow gt؛ slowerEMAnow) (fasterEMAprevious، slowerEMAprevious) (fasterEMAafter gt؛ slowerEMAafter))
CrossUp [i] = Low [i] - Range * 0.5؛
آخر إذا ((fasterEMAnow lt؛ slowerEMAnow) (fasterEMAprevious gt؛ slowerEMAprevious) (fasterEMAafter lt؛ slowerEMAafter))
CrossDown [i] = High [i] Range * 0.5؛
if (SoundON == true i == 1 CrossUp [i] gt؛ CrossDown [i] alertTag! = Time [0])
تنبيه (MACD 0 cross DOWN on، Symbol ()،، Period ())؛
alertTag = Time [0]؛
SendNotifiion (MACD 0 cross DOWN on _Symbol)؛
إذا (SoundON == دقيقة I == 1 CrossUp [I] lt؛ CrossDown [I] alertTag! = Time [0])
تنبيه (MACD 0 cross up، Symbol ()،، Period ())؛
alertTag = Time [0]؛
SendNotifiion (MACD 0 cross UP on _Symbol)؛
عودة (0)؛