اخطاء بسيطة - و راجي منكم التصحيح
السلام عليكم ..
قمت بكتابة هذا الكود .. و اتضح لي بعد التجربة بعض الاخطاء ..
الكود يعمل الان .. ولكنه لا يحترم بعضا من الامور ..
اولها (و اهمها ) .. ان المحدد باللون الاحمر لا ياُخذ في عين الاعتبار :yikes3: ( كانه غير موجود !!)
و الثاني .. عند الانتقال من Profile الى اخر .. ( اي الانتقال من مجموعة الى اخرى ) يقوم البرنامج بالتنبيه , بالرغم من ان هذه التنبيهات غير مستوفية لاي شرط .
وهذا هو الكود ..
كود:
//+------------------------------------------------------------------+
//| http://www.****quotes.net |
//+------------------------------------------------------------------+
#property copyright " "
#property link "http://www.****quotes.net"
#property indicator_chart_window
extern int MA_Period = 38;
extern int MA_Method = MODE_SMA;
extern int MA_applied_to = PRICE_CLOSE;
extern bool Enabled = true;
// MODE_SMA 0 Simple moving average.
// MODE_EMA 1 Exponential moving average.
// MODE_SMMA 2 Smoothed moving average.
// MODE_LWMA 3 Linear weighted moving average.
// PRICE_CLOSE 0 Close price.
// PRICE_OPEN 1 Open price.
// PRICE_HIGH 2 High price.
// PRICE_LOW 3 Low price.
// PRICE_MEDIAN 4 Median price, (high+low)/2.
// PRICE_TYPICAL 5 Typical price, (high+low+close)/3.
// PRICE_WEIGHTED 6 Weighted close price, (high+low+close+close)/4.
//---- buffers
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
if (!Enabled) return (0);
int counted_bars=IndicatorCounted();
//----
if (counted_bars<0) return(-1);
//---- last counted bar will be recounted
if (counted_bars>0) counted_bars--;
int pos=Bars-counted_bars;
while(pos>=0)
{
if((iMA(NULL,PERIOD_H1,MA_Period,0,MA_Method,MA_applied_to,pos)-Bid)< 0 &&
MathAbs(iMA(NULL,PERIOD_H1,MA_Period,0,MA_Method,MA_applied_to,pos)-Bid)<= 0.0025 &&
iMACD(NULL,PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_MAIN,0)< 0)
{
Alert ("Sell " + Symbol());
PlaySound ("alert.wav");
return(-1);
}
if ((Bid-iMA(NULL,PERIOD_H1,MA_Period,0,MA_Method,MA_applied_to,pos))> 0 &&
MathAbs(Bid-iMA(NULL,PERIOD_H1,MA_Period,0,MA_Method,MA_applied_to,pos))<= 0.0025 &&
iMACD(NULL,PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_MAIN,0)> 0)
{
Alert ("Buy "+ Symbol());
PlaySound ("alert.wav");
return(-1);
}
pos--;
}
//----
//----
return(0);
}
//+------------
و راجي منكم التصحيح.
تحياتي :inlove:
رد: اخطاء بسيطة - و راجي منكم التصحيح
اخي العزيز
لا ارى اي خطأ في الكود
والمؤشر يعمل معي
(iMA(NULL,PERIOD_H1,MA_Period,0,MA_Method,MA_appli ed_to,pos)-Bid)< 0
لو كان سعر Bid = 1.4511
وكانت قيمة MA = 1.4439
إذاً الناتج يكون
MA - Bid = 1.4439 - 1.4511 = -0.0072
الشرط : (MA - Bid) < 0
وهذا صحيح
ولو كانت القيمه اكبر لما خرج لنا تنبيه بالبيع
قل لي اخي ما هي شروط اظهار التنبيه وسأحاول المساعده
:)
رد: اخطاء بسيطة - و راجي منكم التصحيح
مشكور اخوي ما قصرت .. بسبب طريقة ردك عرفت المشكلة ..
في المحدد باللون الاحمر .. بعد قلب MA - bid <0 الى Bid-MA<0 كل شي تمام .. :)
اما المشكلة الثانية ما ذكرت عنها شي :) .. وهي ظهور التنبيه عند تحميل المؤشر .. او ظهور التنبيه عند الانتقال من مجموعة شارتات الى مجموعة اخرى ..
رد: اخطاء بسيطة - و راجي منكم التصحيح
اقتباس:
المشاركة الأصلية كتبت بواسطة t4fast
مشكور اخوي ما قصرت .. بسبب طريقة ردك عرفت المشكلة ..
في المحدد باللون الاحمر .. بعد قلب MA - bid <0 الى Bid-MA<0 كل شي تمام .. :)
اما المشكلة الثانية ما ذكرت عنها شي :) .. وهي ظهور التنبيه عند تحميل المؤشر .. او ظهور التنبيه عند الانتقال من مجموعة شارتات الى مجموعة اخرى ..
أهلا بك أخي الكريم
جوابا على سؤالك الثاني فأقول .
عند تحميل المؤشر ( وليس الاكسبيرت ) فإن برنامج الميتاتريدر يقوم بتنفيذه حتى قبل أن يحمل كل معلومات الشارت الأخيرة .
وعند التحميل قد يصادف المؤشر حالة تتحقق فيها الشروط ولكنها قديمة طبعا ويقوم بإصدار التنبيه وفقا لها .
لذلك إذا أردت أن لا يقوم المؤشر بهذا التنبيه في البداية يمكنك وضع مؤخر زمني مقداره مثلا 30 ثانية في الوظيفة init تسمح لبرنامج الميتاتريدر بتحميل الشموع الجديدة ولا يصدر أي تنبيهات قبل تحميل كل المعلومات .
الوظيفة هي :
وكل ألف تعني ثانية .
طبعا هذا أحد الحلول وهناك حلول أخرى .
رد: اخطاء بسيطة - و راجي منكم التصحيح
مرحبا استاذ وضاح ..
شكرا على اهتمامك ..
وجزاك الله كل خير على هذا التكليف ..
بعد اضافة الكود sleep
int init()
{
Sleep(30000);
//---- indicators
//----
return(0);
}
لم يحدث اي تغيير .. و المشكلة قائمة الى الان .
و ايضا عند الانتقال من و الى مجلد Profile .. يتفعّل الكود ! .
رد: اخطاء بسيطة - و راجي منكم التصحيح
طيب أخي
جرب الكود التالي :
كود PHP:
//+------------------------------------------------------------------+
//| http://www.****quotes.net |
//+------------------------------------------------------------------+
#property copyright " "
#property link "http://www.****quotes.net"
#property indicator_chart_window
extern int MA_Period = 38;
extern int MA_Method = MODE_SMA;
extern int MA_applied_to = PRICE_CLOSE;
extern bool Enabled = true;
// MODE_SMA 0 Simple moving average.
// MODE_EMA 1 Exponential moving average.
// MODE_SMMA 2 Smoothed moving average.
// MODE_LWMA 3 Linear weighted moving average.
// PRICE_CLOSE 0 Close price.
// PRICE_OPEN 1 Open price.
// PRICE_HIGH 2 High price.
// PRICE_LOW 3 Low price.
// PRICE_MEDIAN 4 Median price, (high+low)/2.
// PRICE_TYPICAL 5 Typical price, (high+low+close)/3.
// PRICE_WEIGHTED 6 Weighted close price, (high+low+close+close)/4.
//---- buffers
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
if (!Enabled) return (0);
int counted_bars=IndicatorCounted();
//----
if (counted_bars<0) return(-1);
//---- last counted bar will be recounted
if (counted_bars>0) counted_bars--;
int pos=Bars-counted_bars;
while(pos>=0)
{
if(Time[0]<TimeCurrent()) return(0);
if((iMA(NULL,PERIOD_H1,MA_Period,0,MA_Method,MA_applied_to,pos)-Bid)< 0 &&
MathAbs(iMA(NULL,PERIOD_H1,MA_Period,0,MA_Method,MA_applied_to,pos)-Bid)<= 0.0025 &&
iMACD(NULL,PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_MAIN,0)< 0)
{
Alert ("Sell " + Symbol());
PlaySound ("alert.wav");
return(-1);
}
if ((Bid-iMA(NULL,PERIOD_H1,MA_Period,0,MA_Method,MA_applied_to,pos))> 0 &&
MathAbs(Bid-iMA(NULL,PERIOD_H1,MA_Period,0,MA_Method,MA_applied_to,pos))<= 0.0025 &&
iMACD(NULL,PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_MAIN,0)> 0)
{
Alert ("Buy "+ Symbol());
PlaySound ("alert.wav");
return(-1);
}
pos--;
}
//----
//----
return(0);
}
//+----
حيث أضفنا الشرط التالي داخل الحلقة الرئيسية :
كود PHP:
if(Time[0]<TimeCurrent()) return(0);
جربه وقل لي النتيجة
هناك شيء آخر
بما أن المؤشر أصلا يعطيك تنبيه لآخر شمعة فلا داعي أصلا ليقوم بعمل حلقة على كل الشموع
إنما يكتفى بفحص الحالة للشمعات رقم صفر فقط .
ليصبح الكود كما يلي :
كود PHP:
//+------------------------------------------------------------------+
//| http://www.****quotes.net |
//+------------------------------------------------------------------+
#property copyright " "
#property link "http://www.****quotes.net"
#property indicator_chart_window
extern int MA_Period = 38;
extern int MA_Method = MODE_SMA;
extern int MA_applied_to = PRICE_CLOSE;
extern bool Enabled = true;
// MODE_SMA 0 Simple moving average.
// MODE_EMA 1 Exponential moving average.
// MODE_SMMA 2 Smoothed moving average.
// MODE_LWMA 3 Linear weighted moving average.
// PRICE_CLOSE 0 Close price.
// PRICE_OPEN 1 Open price.
// PRICE_HIGH 2 High price.
// PRICE_LOW 3 Low price.
// PRICE_MEDIAN 4 Median price, (high+low)/2.
// PRICE_TYPICAL 5 Typical price, (high+low+close)/3.
// PRICE_WEIGHTED 6 Weighted close price, (high+low+close+close)/4.
//---- buffers
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
if (!Enabled) return (0);
if((iMA(NULL,PERIOD_H1,MA_Period,0,MA_Method,MA_applied_to,0)-Bid)< 0 &&
MathAbs(iMA(NULL,PERIOD_H1,MA_Period,0,MA_Method,MA_applied_to,0)-Bid)<= 0.0025 &&
iMACD(NULL,PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_MAIN,0)< 0)
{
Alert ("Sell " + Symbol());
PlaySound ("alert.wav");
return(-1);
}
if ((Bid-iMA(NULL,PERIOD_H1,MA_Period,0,MA_Method,MA_applied_to,0))> 0 &&
MathAbs(Bid-iMA(NULL,PERIOD_H1,MA_Period,0,MA_Method,MA_applied_to,0))<= 0.0025 &&
iMACD(NULL,PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_MAIN,0)> 0)
{
Alert ("Buy "+ Symbol());
PlaySound ("alert.wav");
return(-1);
}
return(0);
}
رد: اخطاء بسيطة - و راجي منكم التصحيح
بعد اضافة الكود
if(Time[0]<TimeCurrent()) return(0);
اصبح المؤشر لا يصدر اي نتبيه .. :016:
ولكن بعد حذف الحلقة على كل الشموع .. اصبح المؤشر يعمل بالشكل المطلوب :Loly:
شكرا على التصحيح .. :inlove: