Автор |
Сообщение |
Skornet
Зарегистрирован: 22.02.2014
Сообщения: 31
Откуда: как и все
|
Есть формулы идикаторов:
MetaStock Code for Optimal Tracking Filter by John Ehlers.
Period:=Input("Smoothing Period of Optimal Tracking Filter",3,100,9);
SC:=2/(Period+1);
MPr:=(H+L)/2;
Val1:=SC*(MPr-Ref(MPr,-1))+(1-SC)*PREV;
Val2:=SC*(H-L)/2+(1-SC)*PREV;
{Val2:=SC*ATR(1)/2+(1-SC)*PREV;} Вариант для ATR
Lamb:=If(Val2<>0,Abs(Val1/Val2),0);
Alpha:=(-Lamb*Lamb+Lamb*Sqrt(Lamb*Lamb+16))/8;
Val3:=C*Alpha+(1-Alpha)*PREV;
Val3
то же, но медленный
MetaStock Code for Slow Optimal Tracking Filter
Period1:=Input("Period of Smoothing OTF",3,100,9);
Period2:=Input("Period of Slowing OTF",1,14,3);
SC:=2/(Period1+1);
MPr:=(HHV(H,Period2)+LLV(L,Period2))/2;
Val1:=SC*(MPr-Ref(MPr,-1))+(1-SC)*PREV;
Val2:=SC*(HHV(H,Period2)-LLV(L,Period2))/2+(1-SC)*PREV;
Lamb:=If(Val2<>0,Abs(Val1/Val2),0);
Alpha:=(-Lamb*Lamb+Lamb*Sqrt(Lamb*Lamb+16))/8;
Val3:=C*Alpha+(1-Alpha)*PREV;
Val3;
Пытался перевести, не выходит. Пробовал так, рисует пилу:
_SECTION_BEGIN("Optimal Slow Tracking Filter");
Plot(C, "", colorBlack, styleCandle);
Period1=Param("Period of Smoothing OTF",9,1,100,1);
Period2=Param("Period of Slowing OTF",3,1,14,3);
SC=2/(Period1+1);
MPr=(HHV(H,Period2)+LLV(L,Period2))/2;
Vl1=SC*(MPr-Ref(MPr,-1));
Val1=Vl1+(1-SC)*Ref(Vl1,-1); //Val1=SC*(MPr-Ref(MPr,-1))+(1-SC)*Ref(Vl1,-1);
Vl2=SC*(HHV(H,Period2)-LLV(L,Period2))/2;
Val2=Vl2+(1-SC)*Ref(Vl2,-1); //Val2=SC*(HHV(H,Period2)-LLV(L,Period2))/2+(1-SC)*Ref(Val21,-1);
Lamb=IIf(Val2!=0,abs(Val1/Val2), Ref(abs(Val1/Val2),-1));
Alpha=(-Lamb*Lamb+Lamb*sqrt(Lamb*Lamb+16))/8;
Vl3=C*Alpha+(1-Alpha);
Val3=Vl3+(1-Alpha)*Ref(Vl3,-1); //Val3=C*Alpha+(1-Alpha)*Ref(Val31,-1);
Plot(Val3,"Smoothing OTF", ParamColor(
"Smoothing OTF", colorCycle ), ParamStyle("Style") );
_SECTION_END();
С цыклами пока не дружу, хотя пытался. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Тут вся сложность с функцией Prev. Это так называемая рекурсивная функция т.е функция которая ссылается сама на себя.
Такие функции сильно замедляют работу скрипта поэтому Томаш от нее отказался.
Но не все так плохо.
Конструкции типа
Код: |
SC*(MPr-Ref(MPr,-1))+(1-SC)*PREV; |
это адаптивный мувинг
Код: |
output[ i ] = factor[ i ] * input[ i ] + ( 1 - factor[ i ] ) * output[ i - 1 ]; |
А функция адаптивного мувинга в AFL есть. AMA()
Используй ее.
Типа так
Код: |
Val1 = AMA(MPr-Ref(MPr,-1), SC); |
и все должно получиться.
Ну если все таки не выйдет, то пиши.
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Skornet
Зарегистрирован: 22.02.2014
Сообщения: 31
Откуда: как и все
|
Добрый поздний вечер, Олег.
Попробовал так:
Код: |
_SECTION_BEGIN("Optimal Tracking Filter");
Plot(C, "", colorBlack, styleCandle);
Period1=Param("Period OTF",9,1,30,1);
SC=2/(Period1+1);
MPr=(H+L)/2;
Val1 = AMA(MPr-Ref(MPr,-1), SC);
Val2 = AMA((H-L)/2-Ref((H-L)/2,-1), SC);
Lamb=IIf(Val2!=0,abs(Val1/Val2), Ref(abs(Val1/Val2),-1));
Alpha=(-Lamb*Lamb+Lamb*sqrt(Lamb*Lamb+16))/8;
Val3 = AMA((C*Alpha+Ref(Alpha,-1)),Alpha);
Plot(Val3,"Smoothing OTF", ParamColor(
"Smoothing OTF", colorCycle ), ParamStyle("Style"));
_SECTION_END(); |
Всё равно пилит, там сравнение Val2!=0 видимо где-то ноль проскакивает. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Так?
Код: |
Plot(C, "", colorBlack, styleCandle);
Period1=Param("Period OTF",9,1,30,1);
SC = 2/(Period1+1);
MPr = (H+L)/2;
Val1 = AMA(MPr-Ref(MPr,-1), SC);
Val2 = AMA((H-L)/2, SC);
Lamb= IIf(Val2!=0,abs(Val1/Val2),0); ;
Alpha = (-Lamb*Lamb+Lamb*sqrt(Lamb*Lamb+16))/8;
Val3 = AMA(C, Alpha);
Plot(Val3,"Smoothing OTF", ParamColor(
"Smoothing OTF", colorCycle ), ParamStyle("Style")); |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Skornet
Зарегистрирован: 22.02.2014
Сообщения: 31
Откуда: как и все
|
Упс. Вот я ...., наверное устал с ним. Знаний не хватает. Да.
Спасибо. Олег как вы думаете в качестве фильтра к роботу можно его прикрутить?
И наверное ещё в теме роботов к вам обращусь с одной просьбой. Не напрягу? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Можно прикрутить. Он не подсматривает.
Обращайся если надо. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
fujis84
Зарегистрирован: 07.01.2014
Сообщения: 56
|
000 писал(а): |
Так?
Код: |
Plot(C, "", colorBlack, styleCandle);
Period1=Param("Period OTF",9,1,30,1);
SC = 2/(Period1+1);
MPr = (H+L)/2;
Val1 = AMA(MPr-Ref(MPr,-1), SC);
Val2 = AMA((H-L)/2, SC);
Lamb= IIf(Val2!=0,abs(Val1/Val2),0); ;
Alpha = (-Lamb*Lamb+Lamb*sqrt(Lamb*Lamb+16))/8;
Val3 = AMA(C, Alpha);
Plot(Val3,"Smoothing OTF", ParamColor(
"Smoothing OTF", colorCycle ), ParamStyle("Style")); |
|
Lamb= IIf(Val2!=0,abs(Val1/Val2),0);
Nz() гораздо проще
http://www.amibroker.com/guide/afl/afl_view.php?id=212
Код: |
Plot(C, "", colorBlack, styleCandle);
Period1=Param("Period OTF",9,1,30,1);
SC = 2/(Period1+1);
MPr = (H+L)/2;
Val1 = AMA(MPr-Ref(MPr,-1), SC);
Val2 = AMA((H-L)/2, SC);
Lamb= Nz( abs(Val1/Val2) );
Alpha = (-Lamb*Lamb+Lamb*sqrt(Lamb*Lamb+16))/8;
Val3 = AMA(C, Alpha);
Plot(Val3,"Smoothing OTF", ParamColor(
"Smoothing OTF", colorCycle ), ParamStyle("Style")); |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Согласен, проще. Но это если вдумываться, что делает строка.
Ей богу ни разу не задумался, что там всего-навсего обходят деление на 0 |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег.
Последний раз редактировалось: 000 (Сб Апр 19, 2014 8:03 am), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Skornet
Зарегистрирован: 22.02.2014
Сообщения: 31
Откуда: как и все
|
"там всего-навсего обходят деление на 0" да-да именно так. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|