Инструменты без запаздывания - страница 48

 
zilliq:
Мы тоже используем радиан

Может быть объяснение: В коде MT4 мы умножаем alfa на цену.

Я полагаю, что это цена, которую я видел ранее, нет?

И поэтому нам нужно добавить, например, с len 5

alfa*close[4]+alfa*close[3]+alfa*close[2]+alfa*close[1] and alfa*close

или

alfa[4]*close[4]+alfa[3]*close[3]+alfa[2]*close[2]+alfa[1]*close[1] и alfa*close ?

И это странно, потому что при длине 1 len равен 4 (4*1+0) и поэтому нонлагма не может быть равна close, потому что мы добавляем alfa*price последних 4 периодов.

Спасибо за ваши следующие комментарии

Zilliq

Я использую ваш код, но для лучшего понимания я использую самый простой код NonlagMav3

double pi = 3.1415926535;

double Coeff = 3*pi;

int Phase = Length-1;

double Len = Length*Cycle + Phase;

if ( counted_bars > 0 ) limit = Bars-counted_bars;

if ( counted_bars < 0 ) return(0);

if ( counted_bars ==0 ) limit=Bars-Len-1;

for(shift=limit;shift>=0;shift--)

{

Weight=0; Sum=0; t=0;

for (i=0;i<=Len-1;i++)

{

g = 1.0/(Coeff*t+1);

if (t <= 0.5 ) g = 1;

beta = MathCos(pi*t);

alfa = g * beta;

price = iMA(NULL,0,1,0,MODE_SMA,Price,shift+i);

Sum += alfa*price;

Вес += alfa;

if ( t < 1 ) t += 1.0/(Phase-1);

else if ( t < Len-1 ) t += (2*Cycle-1)/(Cycle*Length-1);

}

если (Вес > 0) MABuffer[shift] = Sum/Weight;

Вы должны использовать форму alfa[4]*close[4]+alfa[3]*close[3]+alfa[2]*close[2]+alfa[1]*close[1] и alfa*close (альфа разная для каждого элемента).

Почему бы вам не сделать простую версию, которая отображает значения альфы и сравнивает их со значениями альфы в metatrader 4?

 

Спасибо, Младен,

Я попробую это

На самом деле на MT4 у меня есть цена cfd моего брокера (Activtrade), а на Prorealtime это другой поток в Cash, так что есть некоторые большие различия.

Большое спасибо и до встречи

Zilliq

 

Я пробовал много разных вещей, но это не работает, и я определенно не знаю почему.

Мой код, кажется, в порядке:

****************************

вес=0

сумма=0

for i=0 to Len

if i<=Phase-1 then

t = 1.0*i/(Фаза-1)

else

t = 1.0 + (i-Фаза+1)*(2.0*Цикл-1.0)/(Цикл*Длина-1.0)

endif

beta = Cos(pi*t)

g = 1.0/(Коэф*t+1)

если t <= 0.5, то

g = 1

endif

alfa = g * beta

sum=sum+alfa*close

вес=вес+альфа

следующий

нелагма=сумма/вес

***************************

И аналогично вашему, но, как вы видите на моем графике, нонлагма находится далеко от близкого значения.

Есть ли у вас идея почему, и есть ли у вас код NonlagMa на языке Easy (часто легче расшифровать)?

Спасибо большое, Младен, я устал...

See U

Zilliq

Файлы:
 
zilliq:
Я пробовал много разных вещей, но это не работает, и я определенно не знаю, почему .

Мой код, кажется, в порядке:

****************************

вес=0

сумма=0

for i=0 to Len

if i<=Phase-1 then

t = 1.0*i/(Фаза-1)

else

t = 1.0 + (i-Фаза+1)*(2.0*Цикл-1.0)/(Цикл*Длина-1.0)

endif

beta = Cos(pi*t)

g = 1.0/(Коэф*t+1)

если t <= 0.5, то

g = 1

endif

alfa = g * beta

sum=sum+alfa*close

вес=вес+альфа

следующий

нелагма=сумма/вес

***************************

И аналогично вашему, но, как вы видите на моем графике, нонлагма находится далеко от близкого значения.

Есть ли у вас идея почему, и есть ли у вас код NonlagMa на языке Easy (часто легче расшифровать)?

Спасибо большое, Младен, я устал...

See U

Zilliq

Вот версия, которая вычисляет только альфы : _nonlag_ma_alphas.mq4

Сделайте что-то подобное в protrader. Как только они станут одинаковыми, после этого будет легко сделать так, чтобы ма без лага тоже стала одинаковой. Пример для периода 50

Файлы:
 

Большое спасибо, Младен,

Я буду тестировать с этим первым шагом.

См. U

Zilliq

 

Хорошо,

Во-первых: хорошая новость, у меня такая же пара EUR/USD, как и у вас, так как будет легче сравнивать.

Но на самом деле у меня ничего не получается.

Ваш код для вычисления альфы таков:

double Cycle = 4.0;

double Coeff = 3.0*Pi;

int Phase = NlmPeriod-1;

int len = NlmPeriod*4 + Phase;

if (ArraySize(alphas) != len) ArrayResize(alphas,len);

for (int k=0; k<len; k++)

{

if (k<=Phase-1)

double t = 1.0 * k/(Phase-1);

else t = 1.0 + (k-Фаза+1)*(2.0*Цикл-1.0)/(Цикл*NlmПериод-1.0);

double beta = MathCos(Pi*t);

double g = 1.0/(Coeff*t+1); if (t <= 0.5 ) g = 1;

alphas[k] = g * beta;

}

for(int i=len-1; i>=0; i--) nlm = alphas;

Итак, если я правильно понял:

1/ Первый шаг: Вычисляются все альфы от 0 до len-1.

Это:

alphas[k] = g * beta;

2/ Второй шаг, он добавляет все альфы от 0 до len-1

Это

for(int i=len-1; i>=0; i--) nlm = alphas;

Проблема в том, что у меня всегда одна и та же альфа на графике? Как можно иметь разную альфу на каждой свече, ведь k, t и т.д. всегда одинаковы на каждой свече и не зависят от закрытия?

Код, который я имею на Prorealtime, кажется, такой же:

Pi=3.14159265358979323846264338327950288

Cyclee = 4.0

Coeff = 3.0*Pi

Фаза = NlmPeriod-1

len = NlmPeriod*4 + Phase

alph=0

для k=0 до len-1

t=0

if (k<=Phase-1) then

t = 1.0 * k/(Фаза-1)

else

t = 1.0 + (k-Фаза+1)*(2.0*Цикл-1.0)/(Цикл*НлмПериод-1.0)

endif

beta = Cos(Pi*t)

g = 1.0/(Коэф*t+1)

если (t <= 0.5 ), то

g = 1

endif

alphas = g * beta

alph=alph+alphas

следующий

 
zilliq:
Ну,

Во-первых: хорошая новость, у меня такая же EUR/USD, как и у вас, так как будет легче сравнивать.

Но на самом деле у меня ничего не получается.

Ваш код для вычисления альфы таков:

double Cycle = 4.0;

double Coeff = 3.0*Pi;

int Phase = NlmPeriod-1;

int len = NlmPeriod*4 + Phase;

if (ArraySize(alphas) != len) ArrayResize(alphas,len);

for (int k=0; k<len; k++)

{

if (k<=Phase-1)

double t = 1.0 * k/(Phase-1);

else t = 1.0 + (k-Фаза+1)*(2.0*Цикл-1.0)/(Цикл*NlmПериод-1.0);

double beta = MathCos(Pi*t);

double g = 1.0/(Coeff*t+1); if (t <= 0.5 ) g = 1;

alphas[k] = g * beta;

}

for(int i=len-1; i>=0; i--) nlm = alphas;

Итак, если я правильно понял:

1/ Первый шаг: Вычисляются все альфы от 0 до len-1.

Это:

alphas[k] = g * beta;

2/ Второй шаг, он добавляет все альфы от 0 до len-1

Это

for(int i=len-1; i>=0; i--) nlm = alphas;

Проблема в том, что у меня всегда одна и та же альфа на моем графике? Как можно иметь разную альфу на каждой свече, ведь k, t и т.д. всегда одинаковы на каждой свече и не зависят от закрытия?

Код, который я имею на Prorealtime, кажется, такой же:

Pi=3.14159265358979323846264338327950288

Cyclee = 4.0

Coeff = 3.0*Pi

Фаза = NlmPeriod-1

len = NlmPeriod*4 + Phase

alph=0

для k=0 до len-1

t=0

if (k<=Phase-1) then

t = 1.0 * k/(Фаза-1)

иначе

t = 1.0 + (k-Фаза+1)*(2.0*Цикл-1.0)/(Цикл*НлмПериод-1.0)

endif

beta = Cos(Pi*t)

g = 1.0/(Коэф*t+1)

если (t <= 0.5 ), то

g = 1

endif

alphas = g * beta

alph=alph+alphas

следующий

Zilliq

Как я уже говорил: есть массив альф.

То, что я отобразил, есть массив альф - не обращайте внимания на временную составляющую. Это значения каждого и каждого значения альфы в массиве альф, Это веса, которые применяются к каждому элементу цены, которые вы используете для расчета.

 

Возможно, я не понимаю, что вы называете массивом альф (я понимаю разные альфы на каждой свече), извините.

Я попробую еще раз...

 
zilliq:

Возможно, я не понимаю, что вы называете массивом альф (я понимаю разные альфы на каждой свече), извините.

Я попробую еще раз...

Zilliq

Коэффициент (альфа) для цены 0 == 1

Коэффициент (альфа) для цены 1 == 0.9nnnnnnn

и так далее (как это отображается индикатором альфа без лаг ма) и все это используется для цен len для получения текущего значения без лаг ма

 

Хорошо, я думаю, что понимаю ваши объяснения (вы великолепны ) и я сделал различные тесты на MT4 с вашим кодом

альфа, которая как различное значение от 1 до len-1 размышляет над ценой и в конце мы делим на сумму альф.

Поэтому первое значение альфы справа всегда 1 и поэтому даже если мы меняем значение ne nlm, аспект альфы на графике всегда один и тот же, как змея.)

Ну, я знаю, что мне нужно искать, как я могу сделать это на Prorealtime...