![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Мы тоже используем радиан
Может быть объяснение: В коде 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 периодов.
Спасибо за ваши следующие комментарии![](https://c.mql5.com/forextsd/smiles/nerd.png)
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
Я пробовал много разных вещей, но это не работает, и я определенно не знаю почему.![](https://c.mql5.com/forextsd/smiles/cry_smile.png)
Мой код, кажется, в порядке:
****************************
вес=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
Я пробовал много разных вещей, но это не работает, и я определенно не знаю, почему
Мой код, кажется, в порядке:
****************************
вес=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![](https://c.mql5.com/forextsd/smiles/teeth_smile.png)
Zilliq
Хорошо,
Во-первых: хорошая новость, у меня такая же пара EUR/USD, как и у вас, так как будет легче сравнивать.![](https://c.mql5.com/forextsd/smiles/regular_smile.png)
Но на самом деле у меня ничего не получается.
Ваш код для вычисления альфы таков:
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
следующий
Ну,
Во-первых: хорошая новость, у меня такая же EUR/USD, как и у вас, так как будет легче сравнивать.![](https://c.mql5.com/forextsd/smiles/regular_smile.png)
Но на самом деле у меня ничего не получается.
Ваш код для вычисления альфы таков:
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
Коэффициент (альфа) для цены 0 == 1
Коэффициент (альфа) для цены 1 == 0.9nnnnnnn
и так далее (как это отображается индикатором альфа без лаг ма) и все это используется для цен len для получения текущего значения без лаг ма
Хорошо, я думаю, что понимаю ваши объяснения (вы великолепны
) и я сделал различные тесты на MT4 с вашим кодом
альфа, которая как различное значение от 1 до len-1 размышляет над ценой и в конце мы делим на сумму альф.
Поэтому первое значение альфы справа всегда 1 и поэтому даже если мы меняем значение ne nlm, аспект альфы на графике всегда один и тот же, как змея.)
Ну, я знаю, что мне нужно искать, как я могу сделать это на Prorealtime...![](https://c.mql5.com/forextsd/smiles/teeth_smile.png)