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



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

СообщениеДобавлено: Пт Май 11, 2012 10:30 pm Ответить с цитатой Вернуться к началу

Приветствую всех! Помогите пожалуйста разобраться с косяком.
В роботе через API сделал динамический стоп ApplyStop(1, 2, Price, 2, 1, 1). После этого ставлю Equity(1,0). Этот же код запускаю другой формулой в качестве индикатора, чтобы визуализировать сделки. И вот что часто случается: amibroker переигрывает этот стоп на уже завершенных барах. Те срабатывает выход по стопу (как в роботе, так и индикатор подтверждает), но при движении цены в нужную сторону на следующем баре стоп предыдущего на индикаторе снимается и система считает, что не выходила тогда, а пролжается наращивание прибыли. С другойстороны, если движение в нужную сторону было кратковременным, и на следующем баре цена пошла против, то переигрывание случается второй раз и система считает, что вышла бар или даже два назад. Используя ApplyStop(1, 2, Price, 2, 1, 1) и Equity(1,0) в роботе задержку на стопе не делаю, те пишу Sell1 = IIf(Sell > 1.1 AND Sell < 4.9, Sell, Ref(Sell, -1)).

То же бывает иногда при всех значениях ExitAtStop. Но если для ExitAtStop=1 это нормально, тк максимальная цена в незавершенном баре меняется, то от ExitAtStop=2 я такого не ожидал. В чем тут может быть проблема, и как ее обойти?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Сб Май 12, 2012 1:02 pm Ответить с цитатой Вернуться к началу

Используется волатильный (изменяемый) стоп.
Вероятно у тебя размер стопа (параметр Price) берется с последнего (строящегося) бара. Соответственно и размер стопа плавает при изменении бара. Параметр Price можно брать только с предыдущего бара, чтобы на текущем он не менялся.
То же самое при тесте.
Непоятно только одно. У тебя ExitAtStop = 2 т.е. на стоп исполняется на следующем баре после сигнала стопа.

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



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

СообщениеДобавлено: Сб Май 12, 2012 1:27 pm Ответить с цитатой Вернуться к началу

То-то и оно, что с параметром ExitAtStop = 2 я от стопа не ожидал такого. Может это быть связанно с тем, что в одном и том же баре был сигнал сработавшего стопа и сигнал на покупку, который перебил стоп? У меня больше нет идейSmile)
И вообще написал пока цикл для реализации ApplyStop(1, 2, Price, 0, 1, 1). На бектесте результаты совпадают с этой функцией. Но в своем коде хоть понимаешь, где искать, если в реалтайме что глючить начнет. Хочу совсем не использовать эквити и апплистоп..
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

А вообще в индикаторе с ExitAtStop = 2 он стрелки рисует реально на следующем баре после срабатывания условия???


В воскресенье проверю

Цитата:

Хочу совсем не использовать эквити и апплистоп..

А вот это правильно!!!

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



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

СообщениеДобавлено: Сб Май 12, 2012 3:27 pm Ответить с цитатой Вернуться к началу

Цитата:
А вообще в индикаторе с ExitAtStop = 2 он стрелки рисует реально на следующем баре после срабатывания условия???

Да не, рисует он согласованно с бэктестом, те где выходит, там и рисует. Другое дело, что иногда, уже после прорисовки и, соответственно, подачи сигнала на выход, он может передумать и снова встать в позу, как ни в чем не бывало Shocked

Но я разобрался, кажись, и вот, я извиняюсь, ах...ые результаты. Смоделировал только что в цикле стопчик ApplyStop(1, 2, Price, 2, 1, 1), где Price какой-нибудь массив, те динамический стоп. И результаты в бэктесте совпадают только тогда, когда я беру значение массива не в баре проверки максимальной и минимальной цены, а в следующем(!!!), в котором он, в случае успеха, будет выходить! Те для нормальной работы без заглядывания в будущее надо делать ApplyStop(1, 2, Ref(Price,-1), 2, 1, 1).

Поэтому-то он и в случае с ExitAtStop = 2 иногда передумывает, зараза Evil or Very Mad
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вс Май 13, 2012 7:22 am Ответить с цитатой Вернуться к началу

Хм. Странно это.
По идее ExitAtStop = 2 как раз для того, чтобы исключить заглядывание если используется Price с текущего бара...

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



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

СообщениеДобавлено: Вс Май 13, 2012 9:24 am Ответить с цитатой Вернуться к началу

Сам крайне удивлен. Возможно где-то моя ошибка. Вот код, которым проверял вышенаписаное утверждение:
Код:

////////////////ApplyStop(1,2,Price,2,1,1)///////////////////
Buy1= Cond_B;
Sell1= Cond_S;

pr_b=Null;
state=0;
Buy2=0;
Sell2=0;

for(i=1; i<BarCount; i++)
{
   if(Buy1[i-1]==1 AND state==0  )
   {
      Buy2[i-1]=1;
      pr_b=O[i];
      state=1;
   }
   
   if(state==1 AND Buy2[i-1]==0)
   {
      if (H[i-1]>=pr_b+Price[i-1])
      {
         Sell2[i-1]=1;
         state=0;
      }
      else
      {
         Sell2[i-1]=Sell1[i-1] ;
         state= NOT Sell1[i-1];
      }
   }
}
//////////////////////////////////////////////////////////



Sell=Sell2 ;
Buy= Buy2;


В настройках тестера стоит цена сделок-О, и задержка в 1 бар.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Ну в общем можно сказать точно, что при использовании функции Equity() и ApplyStop() с опцией ExitAtStop = 2 сигнал стопа на следующий бар не сдвигается и соответственно в таком виде использован быть не может. Надо брать либо Ref(price, -1) либо сдвигать сигнал стопа на следующий бар самостоятельно в коде робота.

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



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

СообщениеДобавлено: Чт Май 17, 2012 9:28 am Ответить с цитатой Вернуться к началу

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen