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



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

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

я б ни за что не допер Sad
Посмотреть профиль Отправить личное сообщение
iddqd



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

СообщениеДобавлено: Чт Фев 12, 2009 10:00 am Ответить с цитатой Вернуться к началу

хочу получить на 5-мин таймфрейме (или другом менее часа) значение цены открытия часа. использую конструкцию след вида:

HOpen = TimeFrameGetPrice( "O", inHourly, 0, expandFirst);

для наглядности сделал индикатор

GraphXSpace = 10;
SetBarsRequired(100000,100000);

HOpen = TimeFrameGetPrice( "O", inHourly, 0, expandFirst);
Plot(C,"c",1,64);
Plot(HOpen,"HOpen",colorBlue,1);

проблема заключается в следующем - при просмотре индикатора на 5-мин таймфрейме видно что цена открытия часового бара правильно отображается только через полчаса после начала часа
точнее оно смещено на полчаса, тк это же значение переходит на первые полчаса следующего часового бара
как сделать чтобы на начало часа получить правильное значение цены открытия
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Фев 12, 2009 10:55 am Ответить с цитатой Вернуться к началу

Сейчас Ами под рукой нет, поэтому точно глянуть не могу. но это скорее всего происходит от того, что начало сессии в настройках БД стоит 30мин. и в настройках Ами установлено типа выранивать фреймы по работе рынка. Если сам найдешь - напиши, а так я вечером точно отвечу.

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



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

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

000 писал(а):
Сейчас Ами под рукой нет, поэтому точно глянуть не могу. но это скорее всего происходит от того, что начало сессии в настройках БД стоит 30мин. и в настройках Ами установлено типа выранивать фреймы по работе рынка. Если сам найдешь - напиши, а так я вечером точно отвечу.


ты был прав, действительно в настройках бд начало сессии 9,30.
всегда правил при создании, а тут очевидно забыл Shocked
спасибо за помощь Smile
Посмотреть профиль Отправить личное сообщение
Саня



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

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

Как определить, каким был последний сигнал от системы, либо текущую позицию (к примеру лонг либо без позиции)?

Проблема в том, что тестируя такой код иногда получаю ложные сигналы на продажу (лонг открыт не был, а сигналы на продажу поступают).

Buy = (Cross( pb , MA(pb, maper)) AND Hour() < 18);
Sell = (Cross( MA(pb, maper), pb));

Кстати интересно, как такие сигналы учитываются при подсчете profit'а.
Посмотреть профиль Отправить личное сообщение
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

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

Саня писал(а):
Как определить, каким был последний сигнал от системы, либо текущую позицию (к примеру лонг либо без позиции)?

Проблема в том, что тестируя такой код иногда получаю ложные сигналы на продажу (лонг открыт не был, а сигналы на продажу поступают).

Buy = (Cross( pb , MA(pb, maper)) AND Hour() < 1Cool;
Sell = (Cross( MA(pb, maper), pb));

Кстати интересно, как такие сигналы учитываются при подсчете profit'а.



Посмотрел ваш пост, переменных у вас две, появилась идея как протестировать используя разные массивы, вдруг пригодиться, массивы можно заменить например на различные формулы расчета переменных, типа вместо o (h+l)/2, c (c+o)/2 и т.д.:

b = Optimize("b", 1, 1, 4, 1);
pb = iif(b==1,o,iif(b==2,c,iif(b==3,h,iif(b==4,l,0))));

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Саня



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

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

commenced писал(а):

Посмотрел ваш пост, переменных у вас две, появилась идея как протестировать используя разные массивы, вдруг пригодиться, массивы можно заменить например на различные формулы расчета переменных, типа вместо o (h+l)/2, c (c+o)/2 и т.д.:

b = Optimize("b", 1, 1, 4, 1);
pb = iif(b==1,o,iif(b==2,c,iif(b==3,h,iif(b==4,l,0))));


Спасибо за ответ! Но честно говоря не понимаю, как это может помочь.
Нужно что-то такое:
Buy = (Cross( pb , MA(pb, maper)) AND Hour() < 18);
Sell = (Cross( MA(pb, maper), pb) AND lastSignalBuy);

Вопрос в том, что использовать как lastSignalBuy?
Посмотреть профиль Отправить личное сообщение
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

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

Саня писал(а):
commenced писал(а):

Посмотрел ваш пост, переменных у вас две, появилась идея как протестировать используя разные массивы, вдруг пригодиться, массивы можно заменить например на различные формулы расчета переменных, типа вместо o (h+l)/2, c (c+o)/2 и т.д.:

b = Optimize("b", 1, 1, 4, 1);
pb = iif(b==1,o,iif(b==2,c,iif(b==3,h,iif(b==4,l,0))));


Спасибо за ответ! Но честно говоря не понимаю, как это может помочь.
Нужно что-то такое:
Buy = (Cross( pb , MA(pb, maper)) AND Hour() < 1Cool;
Sell = (Cross( MA(pb, maper), pb) AND lastSignalBuy);

Вопрос в том, что использовать как lastSignalBuy?


Отвлекся малость от сути Laughing после правил покупки и продажы допиши

Equity(1);

можно также использовать

Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);

Разницу между ними почитай в хелпе, Олег его перевел и разместил на сайте.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Саня



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

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

commenced писал(а):

Отвлекся малость от сути Laughing после правил покупки и продажы допиши

Equity(1);

можно также использовать

Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);

Разницу между ними почитай в хелпе, Олег его перевел и разместил на сайте.


Заработала! Спасибо за помощь!
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Саня писал(а):
Как определить, каким был последний сигнал от системы, либо текущую позицию (к примеру лонг либо без позиции)?

Проблема в том, что тестируя такой код иногда получаю ложные сигналы на продажу (лонг открыт не был, а сигналы на продажу поступают).

Buy = (Cross( pb , MA(pb, maper)) AND Hour() < 1Cool;
Sell = (Cross( MA(pb, maper), pb));

Кстати интересно, как такие сигналы учитываются при подсчете profit'а.

При тестировании "лишние" сигналы игнорируются. Больше того, при тестировании массивы сделок (buy/sell/short/cover) пересчитываются и ненужные сигналы удаляются. Для того, чтобы убрать эти "лишние" сигналы достаточно просто добавить в код функцию Equity()
В двух словах так...

ps Вот так всегда. Открыл тему и пока занимался другими делами уже все обсудили. И ответ вроде как в воду пернул. Ну не буду удалять дабы дурь была видна Smile

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



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

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

Вопрос касается exploration, но проблема скорее в корректности afl-кода, поэтому пишу в эту ветку. Описание ошибок в комментариях.

//...
Filter = Buy OR Sell;
AddTextColumn( IIf( Buy, "Buy", "Sell" ), "Signal" ); // <- ругается на IIf
AddColumn( Close, "Price", 1.0 );
AddColumn( IIf( Sell, SellPrice-BuyPrice, 0), "Profit", 1.2); // <- не считает профит, показывает только нули
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Саня писал(а):
Вопрос касается exploration, но проблема скорее в корректности afl-кода, поэтому пишу в эту ветку. Описание ошибок в комментариях.

//...
Filter = Buy OR Sell;
AddTextColumn( IIf( Buy, "Buy", "Sell" ), "Signal" ); // <- ругается на IIf

В хелпере по функции AddTextColumn() написано
Цитата:

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

А у тебя текст зависит от сделки, а сделки на протяжении массива меняются и текст соответственно меняется. Вот он и ругается.
Саня писал(а):

AddColumn( Close, "Price", 1.0 );
AddColumn( IIf( Sell, SellPrice-BuyPrice, 0), "Profit", 1.2); // <- не считает профит, показывает только нули

Массивы SellPrice и BuyPrice относятся в данном случае не к текущей сделке, а к одному бару. Т.е. это цена по которой на этом баре была-бы открыта/закрыта сделка если-бы был соответствующий сигнал. Вот поэтому собственно.

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



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

СообщениеДобавлено: Пн Фев 23, 2009 1:01 am Ответить с цитатой Вернуться к началу

Спасибо за ответ! Частично удалось исправить, только вот тип сигнала не определяется по непонятной причине. Очень не хватает аналога MSDN для AFL Wink

Filter = Buy OR Sell;

bp = Ref( C, -BarsSince( Buy ));
sp = Ref( C, -BarsSince( Sell ));

AddTextColumn( WriteIf( Buy, "Buy", WriteIf( Sell, "Sell" , "undef")) , "Signal" ); // <- не определяет тип сигнала, постоянно возвращает undef
AddColumn( Close, "Price", 1.0, IIf( Buy, colorGreen, colorRed ));
AddColumn( IIf( Sell, sp-bp, 0), "Profit", 1.2);
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Фев 23, 2009 1:23 am Ответить с цитатой Вернуться к началу

Нельзя вывести текст который изменяется с течением времени (на одном баре Buy, а на следующем Sell)
Если надо вывести текстом сигнал на последнем баре, то пиши типа так
Код:

if(Buy[BarCount - 1])
{
   AddTextColumn( "Buy",  "Signal" );
}
else if(sell[BarCount - 1])
{
   AddTextColumn( "Sell",  "Signal" );
}
else
{
   AddTextColumn( "undef",  "Signal" );
}

Т.е. для каждого текста создаем свою колонку.

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



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

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

000 писал(а):
Нельзя вывести текст который изменяется с течением времени (на одном баре Buy, а на следующем Sell)
Если надо вывести текстом сигнал на последнем баре, то пиши типа так
Код:

if(Buy[BarCount - 1])
{
   AddTextColumn( "Buy",  "Signal" );
}
else if(sell[BarCount - 1])
{
   AddTextColumn( "Sell",  "Signal" );
}
else
{
   AddTextColumn( "undef",  "Signal" );
}

Т.е. для каждого текста создаем свою колонку.


Я дико извиняюсь, но и так тоже не работает! Не срабатывают условия и все сделки определяются как undef. При этом там точно чередуются сигналы на покупку и продажу, это видно по раскраске. В итоге решил использовать код из сэмпла
AddColumn( IIf( Buy, 66, 83 ), "Signal", formatChar );
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen