Гистограмма MACD вот в чем вопрос?

 

Здравствуйте, всех с праздниками прошедшими и наступающими.

Перечитывал я на днях книгу А. Элдера «Как играть и выигрывать на бирже», и в главе 4
посвященной компьютерному техническому анализу, наткнулся на интересную вещь (когда
читал первый раз еще не зал mql), про гистограмму индикатора MACD, вот вспомните:

и вот еще:

Прочитав это, сразу вспомнилась стандартная реализация этого индикатора в терминале, а
именно блок вычисления значений индикаторных массивов:

//---- macd counted in the 1-st buffer
   for(int i=0; i<limit; i++)
      MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//---- signal line counted in the 2-nd buffer
   for(i=0; i<limit; i++)
      SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
//---- done

По коду видно, что MacdBuffer - это «линия MACD», то есть разность между двумя EMA 26 и 12.
SignalBuffer – это «Сигнальная линия», то есть 9 периодная EMA построенная по данным массива
MacdBuffer. А отображается это так:

   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexStyle(1,DRAW_LINE);

   SetIndexBuffer(0,MacdBuffer);
   SetIndexBuffer(1,SignalBuffer);

То есть гистограмма в стандартной реализации этого индикатора в терминале, это
просто «линия MACD», а по Элдеру гистограмма это разность между «линией MACD» и «Сигнальной линией». Сделать MACD «по Элдеру» не трудно, для этого надо создать еще одну(3) линию со своим
массивом, задать ей тип отображения DRAW_HISTOGRAM(а линии 0 соответственно убрать, и задать
DRAW_LINE), и записать в ее массив разность между
 MacdBuffer и SignalBuffer. Получится что-то в роде
этого:

//---- macd counted in the 1-st buffer
   for(int i=0; i<limit; i++)
      MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//---- signal line counted in the 2-nd buffer
   for(i=0; i<limit; i++)
      SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
//---- done
   for(i=0; i<limit; i++)
      Histrogram[i]=MacdBuffer[i]-SignalBuffer[i];
//---- done
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_HISTOGRAM);
//---- indicator buffers mapping
   SetIndexBuffer(0,MacdBuffer);
   SetIndexBuffer(1,SignalBuffer);
   SetIndexBuffer(2,Histrogram);

И все сразу встает на свои места. Мы получаем две линии: одну линию масд, вторую сигнальную,
и гистограмму, которая показывает разность между ними.
Это что же получается в MT4 «какие-то не правильные пчелы, которые дают неправильный мед»?
Потому что согласитесь, разница между двумя индикаторами на выходе достаточно существенная,
гистограмма теперь показывает силу тенденции по-другому.


 Исходник MACD «по Элдеру» в прикрепленном файле.

Файлы:
 
макд всегда приведёт к 50 на 50
 
 
nikost >>:

Это индикатор OsMA


Все верно, тогда "правильный MACD", это MACD + OsMA
 
И чего? Если на то пошло, то и периоды быстрой и медленной EMA нужно делать нецелыми, а еще точнее - в виде коэффициентов. Тот же MACD у ДиНаполи: быстрая EMA - коэфф. 0.213 - период 8.39, медленная - 0.108 - 17.52; тогда как в МТ задаются периоды 8 и 17 соответственно.
Нужно? Прикрепил в "кривом" гистограммном оформлении MACD, которая позволяет вводить как периоды, так и коэффициенты.
Если надо "чисто" классику по оформлению - поменяйте стиль буфера. Делов-то. Не, надо было целую ветку замутить.
Файлы:
imacd.g_1.mq4  4 kb
 
Svinozavr >>:
И чего? Если на то пошло, то и периоды быстрой и медленной EMA нужно делать нецелыми, а еще точнее - в виде коэффициентов. Тот же MACD у ДиНаполи: быстрая EMA - коэфф. 0.213 - период 8.39, медленная - 0.108 - 17.52; тогда как в МТ задаются периоды 8 и 17 соответственно.
Нужно? Прикрепил в "кривом" гистограммном оформлении MACD, которая позволяет вводить как периоды, так и коэффициенты.
Если надо "чисто" классику по оформлению - поменяйте стиль буфера. Делов-то. Не, надо было целую ветку замутить.


  Дело не в точности расчетов, а в том что в MT4 линию MACD зачем-то нарисовали гистограммой, хотя она таковой по сути не является.

P.S.
Анти геповая магди вестч:)
 
ToLik_SRGV >>:


Дело не в точности расчетов, а в том что в MT4 линию MACD зачем-то нарисовали гистограммой, хотя она таковой по сути не является.
Ну, не знаю. По мне, так дело как раз не в том, как нарисовано, а насколько корректно считается.
Я тоже не знаю, зачем они стиль MACD гистограммой сделали. Но это - не проблема. Поменял стиль буфера с гитограммы на линию - и все дела. Но вот отсутствие нецелых периодов для EMA - это принципиально. И это уж совсем непонятно.
P.S.
Анти геповая магди вестч:)

Ха! Это я вариант с вырезанием праздничного гэпа прикрепил по ошибке. Можете убрать поле Gap из ввода, и получите стандартную по полям iMACD(), но с возможностью ввода нецелых периодов и коэффициентов.

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