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



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

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

начал делать систему на циклах... и понял, что почти все функции там не работают (или надо для них массивы создавать как исходную инфу?)

решил отказаться от циклов.

столкнулся if ... else и совершил стандартную ошибку if ( H >Ref(H,-1) )
.

----
как я думал раньше как работает тестер:

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

а на самом деле он как-то по-хитрому целиком весь массив сравнивает!
т.е. если я пишу:
Buy=C>5000;
то он сразу учитывает весь массив закрытия на всем периоде тестирования!!!!

на первый взгляд очень мощно и удобно... ноо

...как вообще это сочетается с линейным программированием?

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

вот чего я не пойму:
как можно написать линейную программу, последовательную, если Амиброкер все сразу с массивами делает?

получается не линейная программа - а какая-то матрица:
т.е. программа-то идет сверху вниз, а код исполняется СРАЗУ на всех барах одновременно.
Mad

иными словами,
в чем философия программирования AFL?
некоторая структура программы?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

В общем мысли совершенно верные. Даже порадовался когда прочитал. Дело, вероятно, в том, что ами изначально использовал почти копию языка MetaStock. Работа со всем массивом сразу. Конечно такой подход не дает полной возможности контроля кода, но зато так очень быстро (и писать и считать) и, вероятно, людям далеким от программирования так проще. Затем в AFL добавились циклы и появилась возможность осуществлять 100% контроль над расчетами. Синтаксис и использование очень похож на JS.
Еще вот что. Надо иметь ввиду, что трейдинг это, как ни крути, не точная наука и правила входа/выхода могут допускать довольно приблизительное толкование без потери эффективности. ИМХО нормальная система вряд ли должна быть длиннее 20-30 строк, а если нужен более точный подход (например для создания робота), то тогда и следует использовать возможности AFL на всю катушку.

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



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

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

до меня кажется дошло.

во-первых, желательно вообще не использовать if.. else, если мы работаем НЕ в цикле.
но эт так ерунда.

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

т.е. прога выглядит так:

НАЧАЛО
+создание констант
+создание промежуточных расчетов в массивах!
+скидывание инфы в POPUPWINDOW или еще куда-нибудь для отладки кода
+условия бай, селл
+// комментарии
+рисование графиков //кому надо
КОНЕЦ
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Совершенно верно.
Только на счет if.. else не совсем. это управляющее слово позволяет менять путь прохождения кода.
Т.е если обычно выполняются все строки кода подряд, то if.. else позволяет менять путь прохождения кода. Например
Код:

if(Name() == "SBER")
{
   Buy = блаблабла1;
   Sell = Блаблабла1;
}
elase if(Name() == "LKOH")
{
   Buy = блаблабла2;
   Sell = Блаблабла2;
}

Т.е. меняется алгоритм в зависимости от символа.

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



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

СообщениеДобавлено: Сб Сен 19, 2009 1:11 pm Ответить с цитатой Вернуться к началу

Олег можно немного по подробней про структуру кода.. до этого год работал на Mql ни как не могу перестроится...
Вот например почему здесь условие выполняется а сделка не проходит?

Код:



i=0;x=0;MAs[i]=H[i];
for( ; x <BarCount>1){

Cond1 = MAs[i] ==MAs[i-1];
Cond2 = MAs[i-1] ==MAs[i-2];
AlertIf(Cond1 AND Cond2,"","buy",1,1);
Buy = Cond1 AND Cond2;
 }
Sell=C>BuyPrice + TickSize*100;
if ( H[x] <MAs> MAs[i]&i>0;i--);
                   i++;
                   MAs[i] = H[x] ;
                   
         }
}


то есть у меня по чему то проходит только одна сделка на одном инструменте из всей базы и та на первом баре...
Посмотреть профиль Отправить личное сообщение ICQ Number
CheeGer



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

СообщениеДобавлено: Сб Сен 19, 2009 1:33 pm Ответить с цитатой Вернуться к началу

Код почему то криво вставился..нормально не получается...
Короче там просто поддержка-сопротивление..грубо говоря я последовательно создаю массив равный хаю..если новый хай выше предыдущего он записывается на место старого..а если меньше или равен просто добавляется..в результате если три последних элемента массива(т.е. вершины) ровны то подаётся сигнал на сделку...
Понимаю что намудрил.. но это только чтоб понять язык.. дк в чём я не прав?
Посмотреть профиль Отправить личное сообщение ICQ Number
000
Site Admin


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

СообщениеДобавлено: Вс Сен 20, 2009 7:39 pm Ответить с цитатой Вернуться к началу

Прикрепи код файлом к сообщению. Посмотрю.

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



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

СообщениеДобавлено: Вс Сен 20, 2009 8:24 pm Ответить с цитатой Вернуться к началу

Меня вот эти строки интересуют :

AlertIf(Cond1 AND Cond2,"","buy",1,1);
Buy = Cond1 AND Cond2;

Почему алерт проходит, а сделка нет?
Посмотреть профиль Отправить личное сообщение ICQ Number
000
Site Admin


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

СообщениеДобавлено: Вс Сен 20, 2009 8:52 pm Ответить с цитатой Вернуться к началу

Цитата:
Почему алерт проходит, а сделка нет?

Много возможных причин. Самое простое может денег не хватает.
Кроме того возможно, что система уже в позе. Сигнал на покупку есть, но тестер его проигнорирует поскольку уже в рынке. Алерт однако сработает.

По коду. Честно говоря я не могу понять что там за алгоритм. Или в коде все плохо или используются слишком непонятные для меня методы.
Вообще мне не нравится, что используются вложенные циклы. Ами этого не любит и это сильно замедляет работу кода.

Вот в этой строке
Код:

Sell = C > BuyPrice + TickSize*100;

Точно ошибка. BuyPrice это не цена последней покупки, а цена по которой могла бы совершится покупка на ЭТОМ БАРЕ если бы был сигнал Buy.
Напиши словами алгоритм. Я постараюсь его в код превратить.

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



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

СообщениеДобавлено: Вс Сен 20, 2009 9:36 pm Ответить с цитатой Вернуться к началу

Денег хватает.Система не в позе.Алерты срабатывают точно по правилам,но вот сделок почему-то нет Rolling Eyes
На счет sella-про ошибку знаю, это я просто приписал,чтоб тестер не ругался,что нет правила на продажу.
Алгоритм простой: Если n последних вершин равны совершает сделку. Я просто описал момент формирования поддержки-сопротивления.
Посмотреть профиль Отправить личное сообщение ICQ Number
000
Site Admin


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

СообщениеДобавлено: Вс Сен 20, 2009 9:57 pm Ответить с цитатой Вернуться к началу

Алгоритм такой?
Код:

Cond1 = H == Ref(H, -1);
Cond2 = Ref(H, -1) == Ref(H, -2);
Buy = Cond1 AND Cond2;
Sell = 0;

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



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

СообщениеДобавлено: Вс Сен 20, 2009 10:18 pm Ответить с цитатой Вернуться к началу

Почти, здесь три последних хая,а мне нужны вершины,т.е они могут идти и подряд(в твоем коде учитывается только этот вариант),а могут и с разницей в сотню баров(в моем учитывается и такой вариант) код работает,можешь проверить сам, алерты выходят правильно, вот только сделок почему-то нет Evil or Very Mad


Последний раз редактировалось: CheeGer (Вс Сен 20, 2009 10:32 pm), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение ICQ Number
000
Site Admin


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

СообщениеДобавлено: Вс Сен 20, 2009 10:22 pm Ответить с цитатой Вернуться к началу

Вершина это ?
Код:

H > Ref(H, -1) and H > Ref(H , 1);

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


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

СообщениеДобавлено: Вс Сен 20, 2009 10:34 pm Ответить с цитатой Вернуться к началу

Если да, то вот код.
Код:

Pik = H > Ref(H, -1) AND H > Ref(H , 1);
Pik1 = ValueWhen(Pik, H, 1);
Pik2 = ValueWhen(Pik, H, 2);
Pik3 = ValueWhen(Pik, H, 3);
Cond1 = Pik1 == Pik2;
Cond2 = Pik2 == Pik3;
Buy = Cond1 AND Cond2;
Sell = Ref(Buy, -5);

Выход через 5 баров.

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



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

СообщениеДобавлено: Вс Сен 20, 2009 10:36 pm Ответить с цитатой Вернуться к началу

Что значит: H > Ref(H , 1)?
Посмотреть профиль Отправить личное сообщение ICQ Number
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen