مؤشر الار اس اي مع تعديل - لا يعمل !
السلام عليكم
احاول عمل مؤشر تنبيه بسيط على مؤشر الار اس اي ..
اذا نزل من مستوى ال70 او اخرج من تحت مستوى 30 يعطي تنبيه ..
لا ادري لماذا لا يعمل الكود ..
كود:
//+------------------------------------------------------------------+
//| RSI_alert.mq4 |
//| Copyright © 2004, MetaQuotes Software Corp. |
//| http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link "http://www.mql4.com"
extern int RSI.Upper.Level = 70;
extern int RSI.Lower.Level = 30;
int init()
{
return(0);
}
int start()
{
double RSI_0 = iRSI(NULL,0,14,PRICE_CLOSE,0);
double RSI_1 = iRSI(NULL,0,14,PRICE_CLOSE,1);
if((RSI_0 > RSI.Lower.Level) && (RSI_1 <= RSI.Lower.Level)) PlaySound("alert.wav"); // coming up thru
if((RSI_0 < RSI.Upper.Level) && (RSI_1 >= RSI.Upper.Level)) PlaySound("alert.wav"); // going down thru
return(0);
}
رد: مؤشر الار اس اي مع تعديل - لا يعمل !
لأنك لم تضع الكود الذي سيعرف الميتاتريدر أن هذا مؤشر في الجزء الأعلى وأسفل كود حقوق الملكيه ضع هذا السطر
كود PHP:
#property indicator_chart_window
طبعا الكود المكتوب بوضعه الحالي سيعطي تنبيه صوتي فقط بدون إظهار رساله يمكنك إستخدام الأمر Alert لإظهار رساله مع تنبيه
كذلك سوف تجد أنه سيظل يعطي إنذار ما دامت الشروط متحققه لذلك الأفضل أن تجعله يعطي التنبيه مره واحده
رد: مؤشر الار اس اي مع تعديل - لا يعمل !
اقتباس:
المشاركة الأصلية كتبت بواسطة MR.dollar
سوف تجد أنه سيظل يعطي إنذار ما دامت الشروط متحققه لذلك الأفضل أن تجعله يعطي التنبيه مره واحده
شكرا على ردك ..
قمت بإضافة امر Alart للتنبيه ..
كنت اعتقد ان النتبيه سيكون لمرة واحدة بسبب انني ا ستخدمت شرطين
(RSI_0 > RSI.Lower.Level) && (RSI_1 <= RSI.Lower.Level)
ولكن .. بعد استخدام الباك تست ... ارى انه يعطي تنبيهين مرة واحدة !!!! (لكل الحالات !!)
اضافة الى انه ينبه اكثر من مرة .. بدون توقف !
رد: مؤشر الار اس اي مع تعديل - لا يعمل !
اقتباس:
المشاركة الأصلية كتبت بواسطة t4fast
شكرا على ردك ..
قمت بإضافة امر Alart للتنبيه ..
كنت اعتقد ان النتبيه سيكون لمرة واحدة بسبب انني ا ستخدمت شرطين
(RSI_0 > RSI.Lower.Level) && (RSI_1 <= RSI.Lower.Level)
ولكن .. بعد استخدام الباك تست ... ارى انه يعطي تنبيهين مرة واحدة !!!! (لكل الحالات !!)
اضافة الى انه ينبه اكثر من مرة .. بدون توقف !
بالنسبه لإعطائه تنبيهين التنبيه الأول وهو PlaySound والتنبيه الثاني مع الرساله وهو Alert
أما بخصوص إستمرار التنبيه فكما أخبرتك سيظل يعطي التنبيه لأن الشرط ما زال متوفر
لذلك الأفضل أن تضع شرط آخر بالإضافه إلى شرط التنبيه وهو
كود PHP:
if(Time0!=Time[0])
وبعد أن يقوم بالتنبيه تقوم بجعل
ستضع هذا الكود في التنبيه للبيع وكذلك للشراء وسوف تقوم بتعريف المتغير Time0 على أنه متغير من نوع datetime في الجزء العلوي للإكسبرت أسفل المتغيرات الخارجيه مباشره
جرب هذه الطريقه وأخبرني بالنتيجه
1 مرفق
رد: مؤشر الار اس اي مع تعديل - لا يعمل !
الذي اقصده بظهور تنبيهين هو .. ان نتبيه الشراء والبيع يظهران معا !!
الملف المرفق 234274
هذا هو الكود بعد الاضافات و التعديل
كود:
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link "http://www.mql4.com"
#property indicator_chart_window
extern int RSI.Upper.Level = 70;
extern int RSI.Lower.Level = 30;
datetime Time0;
int init()
{
return(0);
}
int start()
{
double RSI_0 = iRSI(NULL,0,14,PRICE_CLOSE,0);
double RSI_1 = iRSI(NULL,0,14,PRICE_CLOSE,1);
if((RSI_0 > RSI.Lower.Level) && (RSI_1 <= RSI.Lower.Level) && (Time0!=Time[0]))
Time0=Time[0];
Alert ("Buy RSI alert: ",Symbol()+" "+Period()); // coming up thru
if((RSI_0 < RSI.Upper.Level) && (RSI_1 >= RSI.Upper.Level) && (Time0!=Time[0]))
Time0=Time[0];
Alert ("Sell RSI alert: ",Symbol()+" "+Period()); // going down thru
return(0);
}
رد: مؤشر الار اس اي مع تعديل - لا يعمل !
اقتباس:
المشاركة الأصلية كتبت بواسطة t4fast
الذي اقصده بظهور تنبيهين هو .. ان نتبيه الشراء والبيع يظهران معا !!
الملف المرفق 234274
هذا هو الكود بعد الاضافات و التعديل
كود:
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link "http://www.mql4.com"
#property indicator_chart_window
extern int RSI.Upper.Level = 70;
extern int RSI.Lower.Level = 30;
datetime Time0;
int init()
{
return(0);
}
int start()
{
double RSI_0 = iRSI(NULL,0,14,PRICE_CLOSE,0);
double RSI_1 = iRSI(NULL,0,14,PRICE_CLOSE,1);
if((RSI_0 > RSI.Lower.Level) && (RSI_1 <= RSI.Lower.Level) && (Time0!=Time[0]))
Time0=Time[0];
Alert ("Buy RSI alert: ",Symbol()+" "+Period()); // coming up thru
if((RSI_0 < RSI.Upper.Level) && (RSI_1 >= RSI.Upper.Level) && (Time0!=Time[0]))
Time0=Time[0];
Alert ("Sell RSI alert: ",Symbol()+" "+Period()); // going down thru
return(0);
}
الكود بهذه الطريقه سوف يصدر التنبيه في كل حركه للسعر إلى مالا نهاية لسبب بسيط جدا
كما تعلم أن في الداله if إذا كان جواب الشرط أمر واحد يمكنك عدم كتابة أقواس { }
أما إذا كان أكثر من أمر فيجب أن تستخدم الأقواس وتقوم بكتابة الأوامر بداخلها
أما إذا نظرنا إلى الكود الذي قمت بكتابته
كود PHP:
if((RSI_0 > RSI.Lower.Level) && (RSI_1 <= RSI.Lower.Level) && (Time0!=Time[0]))
Time0=Time[0];
Alert ("Buy RSI alert: ",Symbol()+" "+Period()); // coming up thru
فسوف يقوم المؤشر بالتحقق من الشروط فإذا كانت صحيحه سيكون جواب الشرط هو
ثم سيعتبر الأمر Alert كسطر مستقل يتم تنفيذه في كل حركه للسعر
لذلك يجب أن تجعل الكود بالشكل الآتي
كود PHP:
if((RSI_0 > RSI.Lower.Level) && (RSI_1 <= RSI.Lower.Level) && (Time0!=Time[0]))
{
Time0=Time[0];
Alert ("Buy RSI alert: ",Symbol()+" "+Period()); // coming up thru
}
ونفس الشيء بالنسبه لشرط تنبيه البيع
رد: مؤشر الار اس اي مع تعديل - لا يعمل !
بارك الله فيك ..
الامور التي تشير اليها حقا هي بسيطة جدا ..
ولكن لها تاثير كبير.
شكرا مرة اخرى اخي الكريم ..