Комментарии 7
if
(close <= trailingStopLong) // Закрытие по трейлинг-стопу strategy.close("Long")
Вы считаете, что цена сделки по стопу равна close?
Но это реально не так.
close - это цена последней сделки в свече. Она станет известна, когда завершится время свечи.
Стоп это отложенная на сервере брокера заявка. При срабатывании условия, которое проверяется сервером, будет сформирована заявка и отправлена на биржу и там она попадет в очередь. Таким образом реально будет затрачено всегда не нулевое время. Как правило срабатывание стопа происходит при резком движении рынка против позиции. Т е реальная цена будет уже далеко от close.
Таким образом, если стоп сработал на close, то сделка по стопу не может быть исполнена по close, т.к. close уже в прошлом. Это систематическая ошибка всех таких стратегий . Называю это заглядыванием в будущее. В результате такие стратегии показывают всегда результат лучше, чем в реальности. т е на истории есть плюс, а в реальности будет минус.
И еще...
Как вам такой подход: Вход в лонг - это есть выход из шорта и наоборот. Т. е. вход и выход равноценны по значимости, тем более на фьючерсах.
Критика это очень хорошо - это одна из причин по которым я считаю что выкладывать свои идеи публично хорошая идея, потому что в комментариях часто видишь что-то новое, а не варишься в своих мыслях.
Теперь к сути:
process_orders_on_close=true
- важный нюанс
Когда в стратегии указано process_orders_on_close=true
, это не означает исполнение ордера по close
текущего бара, а значит, что решение об открытии/закрытии позиции принимается в момент закрытия свечи, но исполняется уже на следующем баре.
strategy(..., process_orders_on_close=true)
Таким образом, когда в коде написано:
if (close <= trailingStopLong)
strategy.close("Long")
это условие только инициирует закрытие позиции, а сама сделка будет исполнена по цене открытия следующей свечи (open
следующего бара), с учетом slippage
и commission
, заданных в стратегии.
Никакого заглядывания в будущее здесь нет, если правильно понимать механизм работы strategy.*
функций в TradingView.
По условию срабатывания стопа в данном случае понятно.
Но так реальный стоп не работает. Так работает заявка по фиксированной цене.
В данном случае стоп - условная заявка. Если заявка по нему будет сформирована как рыночная, то она исполниться не на открытие следующей свечи, а по рынку. Если Вы поставите лимитную заявку по стопу, то, учитывая резкое движение рынка, заявка вообще не сработает. т е позиция останется открытой.
В любом случае, тест не отражает реальные ситуации.
-------------------
Замечу, что тестирование алгоритма со случайным выставлением заявки , который вы описали в предыдущей статье, на вечном фьючерсе сбера показал очень плохой результат.
Я не планирую использовать именно тип "стоп", в моей логике скрипта это выход рыночным ордером по сигналу скрипта после закрытия бара.
-------------------
Если вы про статью https://habr.com/ru/articles/891786/, то там всё таки разбор идеи Александра Резвякова.
Как вам такой подход: Вход в лонг - это есть выход из шорта и наоборот. Т. е. вход и выход равноценны по значимости, тем более на фьючерсах.
Мне кажется всё время быть в рынке не очень хорошая идея...
я когда писал систему бэктестироваия принял такое правило: стоп выполнится заведомо хуже цены срабатывания, но вот насколько?
Мы знаем каково тело свечи, и можем взять например 2-5% от нее (но не менее минимального шага).
А в реале, раз уж у нас программный трейлинг, мы можем прикрутить к нему плавное прилижение к рыночной цене лимиткой, чтоб не платить комиссию тейкера, например в течение минуты, причем в последние 10с чтоб заявка стояла на лучшей цене.
Раздельное тестирование выхода полезно, но в некоторых случаях оно наложится на след. вход, так что полной чистоты тут не будет. )
Раздельное тестирование выходов торговой системы на Мосбирже через Pine Script: трейлинг стоп и ATR