Автор |
Сообщение |
SPR
Зарегистрирован: 10.11.2008
Сообщения: 45
|
Добрый день!
мой код выглядит так:
Buy = Cond1 and Cond2;
BuyPrice = C;
s1 = ... (расчетный стоп для лонга);
Sell = 0;
ApplyStop( stopTypeProfit , stopModePercent, 1, exitatstop = 1 , volatile = False, ReEntryDelay = 0 ); // тейк-профит 1%
ApplyStop( stopTypeLoss, stopModePoint, s1, ExitAtStop = 1, volatile = False, ReEntryDelay = 0); // стоп-лосс расчетный
Short = Cond2 and Cond3;
ShortPrice = L;
s2 = ... (расчетный стоп для шорта);
Cover = 0;
ApplyStop( stopTypeProfit , stopModePercent, 1, exitatstop = 1 , volatile = False, ReEntryDelay = 0 ); // тейк-профит 1%
ApplyStop( stopTypeLoss, stopModePoint, s2, ExitAtStop = 1, volatile = False, ReEntryDelay = 0); // стоп-лосс расчетный
Когда я запускаю бектест только для лонгов, то все ок.
Когда же добавляю код для шорта, то бектест выдает и лонговые сделки и шортовые, но: некоторые лонговые сделки совпадают с теми, которые я получил, тестируя лонги, а некоторые не совпадают. Например, выход из некоторых сделок начал происходить на том же баре, хотя условия для выхода, которое прописано в ApplyStop не выполняется. По всей видимости проблема в структуре кода...но где именно?
Вообще же, я хочу, чтобы шорт открывался только после того как закроется лонг. И для лонга так же - только после того как закроется шорт.
Будьте добры, подскажите в какую сторону копать.. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Проверь в настройках тестера опцию Reverse entry signal forces exit
http://www.amisite.ru/begin/bk_set2.php
Скорее всего у тебя включена. Выключи. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
SPR
Зарегистрирован: 10.11.2008
Сообщения: 45
|
Проверял эту опцию конечно...не помогает. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Включи в настройках тестера опцию Detailed log
http://www.amisite.ru/begin/bk_set5.php
и посмотри что за сигнал (его тип) заставляет закрывать позу. Это здорово поможет решить проблему. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
SPR
Зарегистрирован: 10.11.2008
Сообщения: 45
|
000 писал(а): |
Включи в настройках тестера опцию Detailed log
http://www.amisite.ru/begin/bk_set5.php
и посмотри что за сигнал (его тип) заставляет закрывать позу. Это здорово поможет решить проблему. |
Запустил. Написано, что тип сигнала "Sell" (Exit long). По коду видно, что у меня выход либо по стоп-лоссу, либо по тейку. Стоп-лосс s1 я вывожу на график и видно, что в этом трейде он правильно рассчитывается ( руками проверял), но сделка в итоге проходит по неправильной цене. Попробовал убрать шорты и протестировать только для лонгов - все отлично, размер стопа совпадает и выход в итоге по тейку. Но как только добавляю код для шортов, то все...
Причем хочу заметить, что этот неправильный выход случается на том же баре и в такое же время, что и вход, хотя такого быть не должно. Размерность базы часовки, закачиваю тоже часовые данные, то есть с этим все ок.. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Сигнал "Sell" (Exit long) это не стоп, стоп там как то по другому обзывается. Поскольку у тебя в коде Sell = 0; значит он может образоваться только из сигнала Short.
Очень похоже, что опция Reverse entry signal forces exit всетаки включена, проверь. На всяки пожарный выключи еще Allow same bar exit (single bar trade). |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
SPR
Зарегистрирован: 10.11.2008
Сообщения: 45
|
000 писал(а): |
Сигнал "Sell" (Exit long) это не стоп, стоп там как то по другому обзывается. Поскольку у тебя в коде Sell = 0; значит он может образоваться только из сигнала Short.
Очень похоже, что опция Reverse entry signal forces exit всетаки включена, проверь. На всяки пожарный выключи еще Allow same bar exit (single bar trade). |
Проверил ещё раз, это все выключено.
Я думаю, что все-таки что-то в коде. Например, когда тестирую только лонговые сделки путем установки в Backtester settings/General/ Positions - Long, то у системы один результат. А если я дополнительно к этому ещё и убираю из кода всё, что связано с шортами и оставляю только лонговый блок и тестирую его, то результат абсолютно другой. Буду думать... |
|
|
Посмотреть профиль Отправить личное сообщение |
|
SPR
Зарегистрирован: 10.11.2008
Сообщения: 45
|
Да, проблема именно в коде. Почему-то в некоторых лонговых сделках ( когда в настройках Backtester стоит только Long, но в коде присутствует шортовый блок) он выходит по стопу s2, а не s1, как должен.
Может лучше будет запихать стопы в цикл? Типа если у меня сейчас лонг, то стоп такой, а если шорт, то такой... |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ааа, бля. Вот я дурак. Конечно. Ами не различает ApplyStop на лонговый и шортовый. Поэтому когда у тебя лонг и шортовые стопы тоже активированы.
Надо делать так
Код: |
s1 = ... (расчетный стоп для лонга);
Sell = 0;
Short = Cond2 and Cond3;
ShortPrice = L;
s2 = ... (расчетный стоп для шорта);
Cover = 0;
ss = Iif(Buy, s1, s2);
ApplyStop( stopTypeProfit , stopModePercent, 1, exitatstop = 1 , volatile = False, ReEntryDelay = 0 ); // тейк-профит 1%
ApplyStop( stopTypeLoss, stopModePoint, ss, ExitAtStop = 1, volatile = False, ReEntryDelay = 0); // стоп-лосс расчетный |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
SPR
Зарегистрирован: 10.11.2008
Сообщения: 45
|
000 писал(а): |
Ааа, бля. Вот я дурак. Конечно. Ами не различает ApplyStop на лонговый и шортовый. Поэтому когда у тебя лонг и шортовые стопы тоже активированы.
Надо делать так
Код: |
s1 = ... (расчетный стоп для лонга);
Sell = 0;
Short = Cond2 and Cond3;
ShortPrice = L;
s2 = ... (расчетный стоп для шорта);
Cover = 0;
ss = Iif(Buy, s1, s2);
ApplyStop( stopTypeProfit , stopModePercent, 1, exitatstop = 1 , volatile = False, ReEntryDelay = 0 ); // тейк-профит 1%
ApplyStop( stopTypeLoss, stopModePoint, ss, ExitAtStop = 1, volatile = False, ReEntryDelay = 0); // стоп-лосс расчетный |
|
Кто здесь дурак, дак это я! Я просматривал эту функцию, но не допер, что её можно применить тут=) Спасибо, Олег! |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|