مؤشرات من اختراعي: 2) ميل الماكدي MACDS
بسم الله الرحمن الرحيم
بعد تشجيع مستر دولار لا أملك إلا أن أنشر كل ما لدي.. في المؤشر السابق استخدمت فكرة الميل لتطوير مؤشر المتوسط المتحرك.. وفي هذا المؤشر سأستخدم فكرة الميل في تطوير مؤشر ماكدي الشهير.. وذلك باستخدام خطين.. الأول هو ميل المتوسط السريع.. والثاني هو ميل المتوسط البطيء.. وبذلك تصبح إشارة الشراء هي اختراق خط ميل المتوسط السريع لخط ميل المتوسط البطيء من أسفل لأعلى.. وإشارة البيع هي اختراق خط ميل المتوسط السريع لخط ميل المتوسط البطيء من أعلى لأسفل.. والمفاجأة الجميلة هي أن إشارات هذا المؤشر أحياناً تكون أسرع من إشارات ماكدي نفسه..
ولكن تبقى مشكلة أفضل قيم.. هل هي 12 و26 أم 9 و25 أم 10 و20؟.. وهل المتوسط الأسي أفضل أم الخطي المرجح؟ وهل سعر الإغلاق أفضل أم سعر الفتح أم السعر النموذجي؟.. وما هو أفضل إطار زمني؟.. هذه الأسئلة تسبب لي صداعاً..
والآن إليكم الكود..
كود:
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net/"
#property indicator_separate_window
#property indicator_level1 0
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
extern int fastMA_period=12;
extern int slowMA_period=26;
extern int fastMA_ma_method=1;
extern int slowMA_ma_method=1;
extern int fastMA_applied_price=0;
extern int slowMA_applied_price=0;
double X[];
double Y[];
double A=0;
double B=0;
int init()
{
SetIndexBuffer(0,X);
SetIndexBuffer(1,Y);
SetIndexStyle(0,0);
SetIndexStyle(1,0);
SetIndexDrawBegin(1,fastMA_period);
IndicatorDigits(Digits+1);
IndicatorShortName("MACDS("+fastMA_period+","+slowMA_period+") with Alert =");
return(0);
}
int start()
{
int limit;
int counted_bars=IndicatorCounted();
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
for(int i=0;i<limit;i++)
{
X[i] = iMA(Symbol(),0,fastMA_period,0,fastMA_ma_method,fastMA_applied_price,i) - iMA(Symbol(),0,fastMA_period,0,fastMA_ma_method,fastMA_applied_price,i+1);
}
for(i=0;i<limit;i++)
{
Y[i] = iMA(Symbol(),0,slowMA_period,0,slowMA_ma_method,slowMA_applied_price,i) - iMA(Symbol(),0,slowMA_period,0,slowMA_ma_method,slowMA_applied_price,i+1);
}
A=Bars;
if ( (X[1]<=Y[1]) && (X[0]>Y[0]) && ((B==0)||(B!=A)) )
{
Alert( "MACDS: BUY " , Symbol());
B=A;
}
if ( (X[1]>=Y[1]) && (X[0]<Y[0]) && ((B==0)||(B!=A)) )
{
Alert( "MACDS: SELL " , Symbol());
B=A;
}
return(0);
}