MAMA. Ошибка в расчетах? - страница 5

 
Инклюдник!
Файлы:
 
GODZILLA:
Я как-то в былые времена занимался этим индикатором, смеху ради решил настрочить этот индикатор с кода из Омеги, который обнаружил в этой ветке! Rosh! Всё здорово! После ваших замечаний этот индикатор заработал как надо! В коде индикатора из Омеги есть непонятная строка: SmoothPeriod = .33*Period + .67*SmoothPeriod[1]; Абсолютно пустая переменная SmoothPeriod, которая ни к чему не привязана! Я так полагаю, изначальный код в Омеге и предложенный автором ветки несовпадают! Было бы здорово, ежели бы в кодбазе была сделана замена этого индюка! К индикатору нужен ещё один индикатор иинклюдник!

Поменять можно, текст оставить прежним или что-нибудь изменить?

Индикатор #MAMA_NK - это индикатор #MAMA ('#MAMA'), оптимизированный в соответствии со статьей "Многократный пересчёт нулевого бара в некоторых индикаторах" ('Многократный пересчет нулевого бара в некоторых индикаторах') автором статьи Николаем Косициным (Nikolay).
 
Николай, я сравнил оба ваших кода - они отличаются. Может Вы заново опубликуете свой код как отдельный индикатор?

PS. Я тоже сделал вариант для проверки, и он отличатеся от Вашего :) Но свой я не проверял на вылавливание ошибок, просто выяснил, что он плывет, ошибку буду искать попозже, как будет время.
 

Rosh, про лобовой копи-паст ваши обвинения не принимаю вообще. А про тангенс, согласен, упустил. Вот за это замечание я говорю вам огромное спасибо и благодарность и приношу извинения! :)

Про инициализацию нуля - посмотрите код MAMA_NK.mq4 , там присутсвует подобный код и не является причиной ошибки, как вы на то указали в тех сорцах, что я приложил.

 
Rosh:
Николай, я сравнил оба ваших кода - они отличаются. Может Вы заново
опубликуете свой код как отдельный индикатор?
Ладно! Я свой вариант кода уже добавил в кодбазу! Мой вариант работает как часы!

Вывод из сей ситуации таков, что когда кто-нибудь в будующем вдруг обнаружит ещё какие глюки у метатрейдера, то, гораздо логичнее будет прежде всего проверить на глюки свою собственную голову! А не делать скоропалительные выводы с видом знатока в этом деле! Доходить до глубин понимания вещей оно всегда гораздо сложнее, чем делать поверхностные умозаключения, которые имеют под собой весьма шаткие основания!
 
Опубликовано - MAMA_NK
 
GODZILLA:
Rosh:
Николай, я сравнил оба ваших кода - они отличаются. Может Вы заново
опубликуете свой код как отдельный индикатор?
Ладно! Я свой вариант кода уже добавил в кодбазу! Мой вариант работает как часы!

Вывод из сей ситуации таков, что когда кто-нибудь в будующем вдруг обнаружит ещё какие глюки у метатрейдера, то, гораздо логичнее будет прежде всего проверить на глюки свою собственную голову! А не делать скоропалительные выводы с видом знатока в этом деле! Доходить до глубин понимания вещей оно всегда гораздо сложнее, чем делать поверхностные умозаключения, которые имеют под собой весьма шаткие основания!





Вы никогда не видели, как один и тот же классический код работы с массивами через указатели, скомпилированный двуми версиями (отличались последние цифры в билдах) компилятора, выдавал разные результаты? Последствия ошибки чуть не стали огромными из-за этого. А код то был простой...

Если на форуме уважаемые люди выложили до меня две версии индикатора, и обе были ошибочные, то странно, что уважаемый Rosh не предъявил им претензии, что они плохие программисты, а сам он добавил в базу код с инициализацией переменных нулями. Он кстати, до сих пор не извинился за это... Ну вообщем то и не надо. Проблема решена, всем кто учавствовал в ее решении спасибо!

 
Mr_Diesel:


Если на форуме уважаемые люди выложили до меня две версии индикатора, и обе были ошибочные, то странно, что уважаемый Rosh не предъявил им претензии, что они плохие программисты, а сам он добавил в базу код с инициализацией переменных нулями. Он кстати, до сих пор не извинился за это... Ну вообщем то и не надо. Проблема решена, всем кто учавствовал в ее решении спасибо!


Прекратите истерику. Мы не можем проверять публикуемые индикаторы на правильность алгоритма, для этого нужно хорошо знать идею каждого индикатора. Более того, я считаю, что стоящие индикаторы будут востребованы, и допущенные ошибки будут исправлены самими пользователями форума. Как в данном случае.

Тем не менее, удалось как минимум выявить расхождение между двумя алгоритмами даже не вникая в код индикатора. Если Вы не понимаете, что расчет значений на последних 6 барах не равнозначен инициализации массивов первоначальными значениями, то лучше и не продолжайте. Для начала советую изучить код простых скользящих средних Moving Average , и более сложного осциллятора Stochastic Oscillator.
 
Rosh:
Mr_Diesel:


Если на форуме уважаемые люди выложили до меня две версии индикатора, и обе были ошибочные, то странно, что уважаемый Rosh не предъявил им претензии, что они плохие программисты, а сам он добавил в базу код с инициализацией переменных нулями. Он кстати, до сих пор не извинился за это... Ну вообщем то и не надо. Проблема решена, всем кто учавствовал в ее решении спасибо!


Прекратите истерику. Мы не можем проверять публикуемые индикаторы на правильность алгоритма, для этого нужно хорошо знать идею каждого индикатора. Более того, я считаю, что стоящие индикаторы будут востребованы, и допущенные ошибки будут исправлены самими пользователями форума. Как в данном случае.

Тем не менее, удалось как минимум выявить расхождение между двумя алгоритмами даже не вникая в код индикатора. Если Вы не понимаете, что расчет значений на последних 6 барах не равнозначен инициализации массивов первоначальными значениями, то лучше и не продолжайте. Для начала советую изучить код простых скользящих средних Moving Average , и более сложного осциллятора Stochastic Oscillator.


double jI, jQ, DeltaPhase, alpha;
double Price[4], Smooth[7], Detrender[7], Q1[7], I1[7], I2[2], Q2[2];
double Re[2], Im[2], SmoothPeriod[2], Period_[2], Phase[2], MAMA[2], FAMA[2];

for (i = 6; i >= 0; i--)
{
Smooth[i] = 0;
Detrender[i] = 0;
Q1[i]=0;
I1[i]=0;
}

for (i = 1; i >= 0; i--)
{
I2[i]=0;
Q2[i]=0;
Re[i]=0;
Im[i]=0;
SmoothPeriod[i]=0;
Period_[i]=0;
Phase[i]=0;
MAMA[i]=0;
FAMA[i]=0;
}

Покажите где здесь расчет для последних шести баров? Перед основным циклом это стоит. Внимательно посмотрите! В первом случае инициализируются массивы размерности 7 (буквами пишу - СЕМЬ!) во втором размерности 2 (ДВА). ГДЕ ЗДЕСЬ ШЕСТЬ ВЫ УВИДЕЛИ?! Где увидели для последних шесть баров?! Даже в основном цикле обсчета это не учавствует.

 

Вот вам задание для ежедневной медитации:

int i;

i = 0;

Это обсчет для какого-то количества баров? Или все-таки это инициализация?

А вот вам посложнее:

double MASSIV[2];

for(int i=1; i>=0; i--)

{

MASSIV[i] = 0;

}

А это что?

Думайте, уважаемый Rosh.

Кстати, а вы знаете разницу между вариантом с массивом и вот такими:

double MASSIV[2];

for(int i=0; i<=1; i++)

{

MASSIV[i] = 0;

}

---------------------

double MASSIV[2];

for(int i=0; i<2; i++)

{

MASSIV[i] = 0;

}