Проблема с ZeroLag MACD

 

Добрый день. Гуру! Объясните "тупому" как заменить в экперте MACD на ZeroLag MACD.

Никак не получается. Работает не правильно.

То что есть:

в начале кода

extern double MACDOpenLevel=3;
extern double MACDCloseLevel=2;
extern double MATrendPeriod=26;

в функциях покупки/продажи:

MacdCurrent=CD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
MacdPrevious=CD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
SignalCurrent=CD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
SignalPrevious=CD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);


long
if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious &&
MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious)

short
if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious)

Что сделеал:

1. Убрал

extern double MACDOpenLevel=3;
extern double MACDCloseLevel=2;
extern double MATrendPeriod=26;

2. Заменил

MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);

на

MacdCurrent=iCustom(NULL,0,"ZeroLag",12,24,9,0,0);
MacdPrevious=iCustom(NULL,0,"ZeroLag",12,24,9,0,1);
SignalCurrent=iCustom(NULL,0,"ZeroLag",12,24,9,1,0);
SignalPrevious=iCustom(NULL,0,"ZeroLag",12,24,9,1,1);

MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);

Хелп!

 

Во первых MACD - это система пересечений iMA, поэтому менять нужно только те функции которые использують функции сглажение

- iMA заменить на iCustom(NULL,0,"ZeroLag",....

Но для того чтобы не искать ошибке - есть готовый MACD даже где-то в CODEBASE..

 
forte928 писал(а) >>

Во первых MACD - это система пересечений iMA, поэтому менять нужно только те функции которые использують функции сглажение

- iMA заменить на iCustom(NULL,0,"ZeroLag",....

Но для того чтобы не искать ошибке - есть готовый MACD даже где-то в CODEBASE..

Спасибо конечно. В CODEBASE искал, не нашел.

Народ! Ну помогите!

 
Брось свой индикатор, если быстро исправить то посмотрю..
 

Похоже, Вы неправильно прописали название индикатора. Посмотрите в журнале, там должны быть сообщения типа "Не могу найти файл ZeroLag.ex4".

Если взять из CodeBase индикатор CollectorZeroLag MACD.mq4, то строка вызова должна выглядеть так:

MacdCurrent=iCustom(NULL,0,"ZeroLag MACD",12,24,9,0,0);
 

У него как я понял желание заменить простую Машку на ZeroLagMA

 
Pavel_MSK >>:

..Объясните "тупому" как заменить в экперте MACD на ZeroLag MACD...

Что вижу, то пою... :))

 
forte928 писал(а) >>

У него как я понял желание заменить простую Машку на ZeroLagMA

Нет, просто у меня сигналы используют встроеный MACD:

MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);

А мне надо чтобы использовался ZeroLAg MACD.

Но я чтото напутал в синтаксисе.

А МА-шку я не использую вообще.

(MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);) - удалил.

 
granit77 писал(а) >>

Похоже, Вы неправильно прописали название индикатора. Посмотрите в журнале, там должны быть сообщения типа "Не могу найти файл ZeroLag.ex4".

Если взять из CodeBase индикатор CollectorZeroLag MACD.mq4, то строка вызова должна выглядеть так:

Так вот последние цифры в параматрах 0,0 0,1 и 1,0 и 1,1 так или нет?

 
Pavel_MSK писал(а) >>

Так вот последние цифры в параматрах 0,0 0,1 и 1,0 и 1,1 так или нет?

extern int FastEMA = 12;
extern int SlowEMA = 24;
extern int SignalEMA = 9;

int start()
{
   double ZeroMACD=iCustom(NULL,0,"ZeroLag MACD",FastEMA,SlowEMA,SignalEMA,0,0);
   double ZeroSignal=iCustom(NULL,0,"ZeroLag MACD",FastEMA,SlowEMA,SignalEMA,1,0);
}

Что-то примерно так. Это для нулевого бара (последняя цифра).

 
Vinin писал(а) >>

Что-то примерно так. Это для нулевого бара (последняя цифра).

Спасибо, а 2 последнии цифры это что?

На сколько я понял, последняя 0-текущая 1-предыдущая.

А предпоследняя д.быть 0/1 или 1/2, т.к. в некоторых кодах я встречал и то и другое.

Причина обращения: