Автор |
Сообщение |
abc_13
Зарегистрирован: 13.12.2011
Сообщения: 13
|
Приветствую всех! Помогите пожалуйста разобраться с косяком.
В роботе через 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
|
Используется волатильный (изменяемый) стоп.
Вероятно у тебя размер стопа (параметр Price) берется с последнего (строящегося) бара. Соответственно и размер стопа плавает при изменении бара. Параметр Price можно брать только с предыдущего бара, чтобы на текущем он не менялся.
То же самое при тесте.
Непоятно только одно. У тебя ExitAtStop = 2 т.е. на стоп исполняется на следующем баре после сигнала стопа. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
abc_13
Зарегистрирован: 13.12.2011
Сообщения: 13
|
То-то и оно, что с параметром ExitAtStop = 2 я от стопа не ожидал такого. Может это быть связанно с тем, что в одном и том же баре был сигнал сработавшего стопа и сигнал на покупку, который перебил стоп? У меня больше нет идей)
И вообще написал пока цикл для реализации ApplyStop(1, 2, Price, 0, 1, 1). На бектесте результаты совпадают с этой функцией. Но в своем коде хоть понимаешь, где искать, если в реалтайме что глючить начнет. Хочу совсем не использовать эквити и апплистоп.. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А вообще в индикаторе с ExitAtStop = 2 он стрелки рисует реально на следующем баре после срабатывания условия???
В воскресенье проверю
Цитата: |
Хочу совсем не использовать эквити и апплистоп..
|
А вот это правильно!!! |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
abc_13
Зарегистрирован: 13.12.2011
Сообщения: 13
|
Цитата: |
А вообще в индикаторе с ExitAtStop = 2 он стрелки рисует реально на следующем баре после срабатывания условия??? |
Да не, рисует он согласованно с бэктестом, те где выходит, там и рисует. Другое дело, что иногда, уже после прорисовки и, соответственно, подачи сигнала на выход, он может передумать и снова встать в позу, как ни в чем не бывало
Но я разобрался, кажись, и вот, я извиняюсь, ах...ые результаты. Смоделировал только что в цикле стопчик ApplyStop(1, 2, Price, 2, 1, 1), где Price какой-нибудь массив, те динамический стоп. И результаты в бэктесте совпадают только тогда, когда я беру значение массива не в баре проверки максимальной и минимальной цены, а в следующем(!!!), в котором он, в случае успеха, будет выходить! Те для нормальной работы без заглядывания в будущее надо делать ApplyStop(1, 2, Ref(Price,-1), 2, 1, 1).
Поэтому-то он и в случае с ExitAtStop = 2 иногда передумывает, зараза |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Хм. Странно это.
По идее ExitAtStop = 2 как раз для того, чтобы исключить заглядывание если используется Price с текущего бара... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
abc_13
Зарегистрирован: 13.12.2011
Сообщения: 13
|
Сам крайне удивлен. Возможно где-то моя ошибка. Вот код, которым проверял вышенаписаное утверждение:
Код: |
////////////////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
|
Ну в общем можно сказать точно, что при использовании функции Equity() и ApplyStop() с опцией ExitAtStop = 2 сигнал стопа на следующий бар не сдвигается и соответственно в таком виде использован быть не может. Надо брать либо Ref(price, -1) либо сдвигать сигнал стопа на следующий бар самостоятельно в коде робота. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
abc_13
Зарегистрирован: 13.12.2011
Сообщения: 13
|
Спасибо за подтверждение, Олег. Буду вообще обходиться своими стопами. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|