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



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

СообщениеДобавлено: Вс Июн 19, 2011 2:02 pm Ответить с цитатой Вернуться к началу

Допустим я торгую по открытию следующей свечи. Вошли в позицию поставили стоп. ApplyStop(stopTypeProfit, stopModePoint, 100, 1, volatile = False, ReEntryDelay = 1);
Поступил сигнал Sell. т.е. на следующем баре ами должен продать по открытию, но он почему-то проверяет стоп, если он сработал то считает прибыль по стопу, если нет то продает по открытию! Но в реале такого быть не может мы не можем ждать завершения бара т.к. есть сигнал на продажу на открытии бара. Как избежать такого при тестах? Еще вопрос как ведет себя ами, если сигналы пересекаются? например вот такой код дает дикую эквити, никак не могу понять, как это работает, почему он считает стоп вместо того чтобы покупать продавать по открытию.

Buys1=1;
Shorts1=1;
Buys1=1;
Shorts1=1;

ApplyStop(stopTypeProfit, stopModePoint, 100, 1, volatile = False, ReEntryDelay = 1);

Buy=Ref(Buys1,-1);
Short=Ref(Shorts1,-1);
Cover=Ref(Buys1,-1);
Sell=Ref(Shorts1,-1);

Пробовал ставить Trade delays в 1, а Ref(signal,-1) убрать, все равно тоже самое.
Посмотреть профиль Отправить личное сообщение
Garry$on



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

СообщениеДобавлено: Вс Июн 19, 2011 6:30 pm Ответить с цитатой Вернуться к началу

Т.е. получается функция ApplyStop приоритетней сигнала на выход(sell cover)? Видимо если они срабатывают на одном баре, первым делается ApplyStop, и его цена исполнения записывается тестером, возможно ли эту приоритетность регулировать?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Посмотри функцию EQUITY() и особенно комментарии. Многие вопросы снимутся.

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



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

СообщениеДобавлено: Пн Июн 20, 2011 7:59 am Ответить с цитатой Вернуться к началу

Если честно, вопросов больше возникло.Вот как я понял комментарий:

Цитата:
Если в Вашей формуле содержится Equity(1) следует избегать использования задержки (delays). Вот почему:

Задержки (delays) реализованы только в БАКТЕСТЕРЕ, а в EXPLORATION и других режимах - НЕТ.

Следовательно Equity(1) не может самостоятельно учитывать задержки. Тем не менее для выполнения вычисления эквити необходимо учесть задержки для соответствия результату бактестера. Поэтому АмиБрокер когда вычисляет Equity(1) применяет задержки (во всех режимах (exploration, indicator и др.)) просто перед окончанием выполнения функции Equity() возвращает сигналы на свое место так, что скорректированные функцией Equity массивы сигналов buy/sell/short/cover не содержат задержки.
Это относится и к сигналам на последнем баре и может вызвать проблему при исследовании (exploration) потому, что сдвинет сигнал за пределы диапазона (в будущее, на отсутствующий бар) в результате чего сигнал при обратном сдвиге пропадет.

Для выключения обратного сдвига в исследовании (exploration) (если исследование соответствует коду тестера с задержкой не равной нолю) необходимо использовать функцию Equity( 2 )

С другой стороны Equity(2) в формуле для теста станет причиной двойной задержки.
(первая добавится при выполнении функции equity, а вторая при выполнении теста).

Встроенные задержки предназначены для использования ТОЛЬКО В ТЕСТЕРЕ.
Существуют следующие решения для установки не нулевых задержек при использовании одного и того же кода используемого для ТЕСТА и получения сегодня сигналов для завтрашней торговли (в режиме СКАНИРОВАНИЯ).

Решение 1:
Установите задержки в коде самостоятельно:
Buy = Ref( Buy, -1 );
Sell = Ref( Sell, -1 );

Решение 2:
При использовании Equity в EXPLORATION
Используйте EQUITY( 2 ) но не в тестере
if( Status("action") != 5 ) e = Equity( 2 );


никакие задержки не использую, а всегда делаю как написано в решении 1
Buy=Ref(Buy,-1);
Sell=Ref(Sell,-1);
Short=Ref(Short,-1);
Cover=Ref(Cover,-1);
прописывал equity(1,0), equity(2,0)
ситуацию не изменило по прежнему стоп обрабатывается приоритетней
cover sell

вот например
buy=1;
sell=1;
short=1;
cover=1;
Buy=Ref(Buy,-1);
Sell=Ref(Sell,-1);
Short=Ref(Short,-1);
Cover=Ref(Cover,-1);
как должен вести себя тестер в такой ситуации? На каждом баре входить выходить по цене установленной в настройках(в моем случае open) правильно? Именно так он и делает. Теперь добавляем стоп. По логике вещей стоп ни разу не должен быть исполнен, т.к. всегда есть сигнал на выход из позиции, но тестер почему-то считает стоп приоритетней sell cover и исполняет его. Как быть в такой ситуации? Получается что тесты с ApplyStop не верные, когда на одном и том же баре срабатывает стоп и сигнал на выход. Как заставить тестер смотреть в начале на сигнал на выход, а потом на стоп?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Июн 20, 2011 8:54 am Ответить с цитатой Вернуться к началу

Бррр. Прошу прощения. Мне почему то казалось, что приоритет исполнения сигналов на одном баре описан в функции Equity(). Сейчас глянул - оказывается нет.
В общем так. Действительно разные сигналы имеют разный приоритет. Не помню где в хелпере он описан.
К сожалению ами не понимает, что Open это самое начало свечи и если исполнение по открытию, то и приоритет должен быть максимальный. Кроме того Не помню чтобы мне попдалась методика изменения приоритетов исполнения сигналов... В общем, к сожалению, ничего не сделаешь.. Sad
Пожалуй только один вариант. Исполнять сигналы не по открытию, а по закрытию на предыдущей свече. Конечно это не совсем то, но хоть что то. В принципе можно исполнять их на предыдущей свече а цену исполнения поставить открытие следующей для сигнала...
Во таким макаром....

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



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

СообщениеДобавлено: Пн Июн 20, 2011 10:37 am Ответить с цитатой Вернуться к началу

Ок, спасибо,понятно, ну функция ApplyStop мне давно не нравитсяSmile получается все время тестировал не правильно, хорошо что стопы использую не часто. Вывод сделал что стопы лучше реализовывать самому через циклы. Ну либо дествительно использовать закрытие, но не привык просто.
Посмотреть профиль Отправить личное сообщение
Mechanic



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

СообщениеДобавлено: Пн Июн 20, 2011 12:35 pm Ответить с цитатой Вернуться к началу

Ещё можно в конец кода добавить:

SellSignal = Sell;
CoverSignal = Cover;

Equity(1, 0);

SellPrice = IIF(SellSignal, O, SellPrice);
CoverPrice = IIF(CoverSignal, O, CoverPrice);

Только надо смотреть, чтобы логика системы не нарушилась. Хотя если "штатные" сигналы выхода исполняются только на открытии бара, то ошибок не будет.
Посмотреть профиль Отправить личное сообщение ICQ Number
AmiTrt



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

СообщениеДобавлено: Вт Июн 21, 2011 4:12 pm Ответить с цитатой Вернуться к началу

000 писал(а):
...
К сожалению ами не понимает, что Open это самое начало свечи и если исполнение по открытию, то и приоритет должен быть максимальный.

А разве не для этого случая настройка:
"Activate stops immediatelly" [x]
- when turned on, stops are checked AFTER current bar signals ?

Когда гонял тесты по open, вроде корректно получалось с этой настройкой. (сначала сигнал по open отрабатывал, потом стопы на этой же свече)
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Июн 21, 2011 8:55 pm Ответить с цитатой Вернуться к началу

Проблемма тут в другом. При закрытии позиции по Open, если на той же свече срабатывает стоп, то тестер его исполняет не смотря на то, что позиция фактически закрыта.

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



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

СообщениеДобавлено: Ср Июн 22, 2011 11:20 am Ответить с цитатой Вернуться к началу

AmiTrt писал(а):
000 писал(а):
...
К сожалению ами не понимает, что Open это самое начало свечи и если исполнение по открытию, то и приоритет должен быть максимальный.

А разве не для этого случая настройка:
"Activate stops immediatelly" [x]
- when turned on, stops are checked AFTER current bar signals ?

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

Ну эта функция просто включает исполнение стопов на баре входа, на приоритетность исполнения на баре выхода она не влияет.
Посмотреть профиль Отправить личное сообщение
Garry$on



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

СообщениеДобавлено: Ср Июн 22, 2011 11:30 am Ответить с цитатой Вернуться к началу

Mechanic писал(а):
Ещё можно в конец кода добавить:

SellSignal = Sell;
CoverSignal = Cover;

Equity(1, 0);

SellPrice = IIF(SellSignal, O, SellPrice);
CoverPrice = IIF(CoverSignal, O, CoverPrice);

Только надо смотреть, чтобы логика системы не нарушилась. Хотя если "штатные" сигналы выхода исполняются только на открытии бара, то ошибок не будет.


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



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

СообщениеДобавлено: Сб Июн 25, 2011 11:40 am Ответить с цитатой Вернуться к началу

Garry$on писал(а):

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

С задержками - да, этот способ не сработает. Тогда можно выходить штатно на сигнальном баре, а не на опен следующего. А цену выхода можно и опен следующего бара прописать, в данном случае такое заглядывание в будущее безопасно. Тогда и с задержками в стопах всё корректно отработает. В общем, универсального способа нет, но в каждом конкретном случае всегда можно выход найти.
Посмотреть профиль Отправить личное сообщение ICQ Number
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen