Помогите с MACD гистограммой разобратся

 

Здравствуйте!

Хочу сделать в советнике фильтр, на базе MACD гистограммы.

Но вот пчему то не сходятся значения между сигналми от советника и сигналами от стандартного MACD индикатора при обсолютно одинаковых парамерах....

Мне нужно добится следующего: Buy - только если гистограмма выше сигнальной линии а Sell - только если гистограмма ниже сигнальной линии и не важно, выше или ниже нулевой линии.

Вот исходник фильтра из соетника:

extern string _Symb="GBPJPY";
extern int _TF_Ord=15;

int _MACDFast=5;
int _MACDSlow=34;
int _MACDSMA=5;

//тут получаю значение MACD гистограммы.

double MACDGisto=(iMA(_Symb, _TF_Ord, _MACDFast, 0, MODE_EMA, PRICE_CLOSE, 0)-iMA(_Symb, _TF_Ord, _MACDSlow, 0, MODE_EMA, PRICE_CLOSE, 0));

//тут получаю значение сигнальной линии.
double SignalLine=iMA(_Symb, _TF_Ord, _MACDSMA, 0, MODE_SMA, PRICE_CLOSE, 0);

if(MACDGisto > SignalLine){ BuySignal=true; }

if(MACDGisto < SignalLine){ SellSignal=true; }

Подскажите, почему не сходятся возвращаемые значения от вышеуказанного кода и от стандартного MACD индикатора.

Заранее спасибо!

 

double iMACD( string symbol, int timeframe, int fast_ema_period, int slow_ema_period, int signal_period, int applied_price, int mode, int shift)
Расчет индикатора Moving Averages Convergence/Divergence. В тех системах, где ОsМА называют гистограммой МАКД, данный индикатгор изображается в виде двух линий. В клиентском терминале схожденние/расхождение скользящих средних рисуется в виде гистограммы.
Параметры:
symbol - Символьное имя инструмента, на данных которого будет вычисляться индикатор. NULL означает текущий символ.
timeframe - Период. Может быть одним из периодов графика. 0 означает период текущего графика.
fast_ema_period - Период усреднения для вычисления быстрой скользящей средней.
slow_ema_period - Период усреднения для вычисления медленной скользящей средней.
signal_period - Период усреднения для вычисления сигнальной линии.
applied_price - Используемая цена. Может быть любой из ценовых констант.
mode - Индекс линии индикатора. Может быть любым из значений идентификаторов линии индикаторов.
shift - Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).

Пример:
if(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)>iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0)) return(0);


Где: iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0) Сигнальная

iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0) макд...



 



 
Вы делаете расчет индикатора на текущем баре.... вот и получаете не сходство с историей....
 
BARS писал(а) >>

double iMACD( string symbol, int timeframe, int fast_ema_period, int slow_ema_period, int signal_period, int applied_price, int mode, int shift)
Расчет индикатора Moving Averages Convergence/Divergence. В тех системах, где ОsМА называют гистограммой МАКД, данный индикатгор изображается в виде двух линий. В клиентском терминале схожденние/расхождение скользящих средних рисуется в виде гистограммы.
Параметры:
symbol - Символьное имя инструмента, на данных которого будет вычисляться индикатор. NULL означает текущий символ.
timeframe - Период. Может быть одним из периодов графика. 0 означает период текущего графика.
fast_ema_period - Период усреднения для вычисления быстрой скользящей средней.
slow_ema_period - Период усреднения для вычисления медленной скользящей средней.
signal_period - Период усреднения для вычисления сигнальной линии.
applied_price - Используемая цена. Может быть любой из ценовых констант.
mode - Индекс линии индикатора. Может быть любым из значений идентификаторов линии индикаторов.
shift - Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).

Пример:
if(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)>iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0)) return(0);

Где: iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0) Сигнальная

iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0) макд...


Попробовал так:

//тут получаю значение MACD гистограммы.

double MACDGisto=iMACD(_Symb, _TF_Ord, _MACDFast, _MACDSlow, _MACDSMA, PRICE_CLOSE, MODE_MAIN, 0);

//тут получаю значение сигнальной линии.
double SignalLine=iMACD(_Symb, _TF_Ord, _MACDFast, _MACDSlow, _MACDSMA, PRICE_CLOSE, MODE_SIGNAL, 0);

Все равно значения разные от индикаора MACD и от советника... не помогло.
 
kharko писал(а) >>
Вы делаете расчет индикатора на текущем баре.... вот и получаете не сходство с историей....

то есть, что сделаь чтобы был сходство? испльзовать не нулевой а 1 и более бары?

 
fos_ писал(а) >>

то есть, что сделаь чтобы был сходство? испльзовать не нулевой а 1 и более бары?

Да, бар должен быть сформирован....

 
kharko писал(а) >>

Да, бар должен быть сформирован....

Использовал 1 и более бары, все равно значения не сходятся... не пойму что не так.((

 
fos_ >>:

Использовал 1 и более бары, все равно значения не сходятся... не пойму что не так.((

Если надо... ася 456826192, по цене договоримся.

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