Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Помогите с переводом из Метастока Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
Skornet



Зарегистрирован: 22.02.2014
Сообщения: 31
Откуда: как и все

СообщениеДобавлено: Чт Апр 17, 2014 8:39 pm Ответить с цитатой Вернуться к началу

Есть формулы идикаторов:
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

СообщениеДобавлено: Чт Апр 17, 2014 10:40 pm Ответить с цитатой Вернуться к началу

Тут вся сложность с функцией 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);

и все должно получиться.
Ну если все таки не выйдет, то пиши.
Laughing

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Skornet



Зарегистрирован: 22.02.2014
Сообщения: 31
Откуда: как и все

СообщениеДобавлено: Чт Апр 17, 2014 11:20 pm Ответить с цитатой Вернуться к началу

Добрый поздний вечер, Олег.

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

Код:
_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

СообщениеДобавлено: Пт Апр 18, 2014 12:25 am Ответить с цитатой Вернуться к началу

Так?
Код:
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
Откуда: как и все

СообщениеДобавлено: Пт Апр 18, 2014 12:57 am Ответить с цитатой Вернуться к началу

Упс. Вот я ...., наверное устал с ним. Знаний не хватает. Да.

Спасибо. Олег как вы думаете в качестве фильтра к роботу можно его прикрутить?
И наверное ещё в теме роботов к вам обращусь с одной просьбой. Не напрягу?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пт Апр 18, 2014 1:14 am Ответить с цитатой Вернуться к началу

Можно прикрутить. Он не подсматривает.
Обращайся если надо.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
fujis84



Зарегистрирован: 07.01.2014
Сообщения: 56

СообщениеДобавлено: Пт Апр 18, 2014 4:23 pm Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Пт Апр 18, 2014 4:58 pm Ответить с цитатой Вернуться к началу

fujis84 писал(а):

Nz() гораздо проще
http://www.amibroker.com/guide/afl/afl_view.php?id=212

Согласен, проще. Но это если вдумываться, что делает строка.
Ей богу ни разу не задумался, что там всего-навсего обходят деление на 0 Laughing

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.

Последний раз редактировалось: 000 (Сб Апр 19, 2014 8:03 am), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Skornet



Зарегистрирован: 22.02.2014
Сообщения: 31
Откуда: как и все

СообщениеДобавлено: Пт Апр 18, 2014 6:36 pm Ответить с цитатой Вернуться к началу

"там всего-навсего обходят деление на 0" да-да именно так.
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen