В стратегии на tradeview я ввожу вход и имею условие выставить трейлинг-стоп. В то же время я хочу стоп-лосс ордер по фиксированной цене, но когда я выставляю две команды strategy.exit()
, фактически используется только одна, потому что обе имеют тип «стоп». Но можно заменить ордер на выход другим, вызвав strategy.exit()
и присвоив ему тот же идентификатор. Итак, моя идея состоит в том, чтобы заменить один выход на другой и обратно, когда мне удобно, чтобы одновременно был активен только один выходной ордер.
Допустим, у меня есть стратегия с условием входа в позицию с определенной ценой, например conditionEnter
и enterPrice
, на момент входа мне также известен стоп-лосс stopLossPrice
, поэтому я могу установить:
if conditionEnter
strategy.entry(id="longEnter", long=true, qty=1, limit=enterPrice
strategy.exit(id="longExit", from_entry="longEnter", qty_percent=100, stop=stopLossPrice)
Теперь, если conditionTrailingStopLoss
встречается, я заменяю его соответствующим образом:
if conditionTrailingStopLoss
strategy.exit(id="longExit", from_entry="longEnter", qty=strategy.position_size * 0.2, trail_price=priceToTriggerTrailingStopLoss, trail_offset=100)
где priceToTriggerTrailingStopLoss
равно или ниже цены закрытия, так что трейлинг-стоп размещается немедленно и отстает от цены на 100 тиков. Обратите внимание, что даже если он выполняется, закрывается только пятая часть текущей позиции.
Как и ожидалось, размещение ордера на выход со скользящим стоп-лоссом стирает первоначальный ордер на выход со стоп-лоссом - это верно даже при использовании разных идентификаторов. Я хотел бы подождать, пока трейлинг-стоп-лосс сработает (заполнится), а затем снова разместите ордер на выход по стоп-лоссу. Но как я могу определить время выполнения?
Я пробовал что-то вместе
if strategy.position_size < strategy.position_size[1]
strategy.exit(id="longEnter", long=true, qty=1, limit=enterPrice
strategy.exit(id="longExit", from_entry="longEnter", qty_percent=100, stop=stopLossPrice)
чтобы увидеть, что какой-то выход был выполнен, но я никогда не видел, чтобы оба ордера были выполнены. Однако изменение порядка команд влияет на то, какая из двух команд игнорируется. Если в приведенном выше фрагменте кода я изменю id
на что-то совершенно другое, ни один из трех ордеров на выход никогда не будет выполнен!
Так кто-нибудь может помочь здесь? Я имею в виду, что желать иметь один фиксированный стоп-лосс и один трейлинг-стоп-лосс не так уж экзотично, это должно как-то работать, верно?
Редактировать: если я прокручиваю график назад, я действительно вижу то один, то другой исполняемый ордер на выход, но никогда не оба для одного и того же ордера на вход.