Разместите несколько стоп-ордеров на выход для одного входа

В стратегии на 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 на что-то совершенно другое, ни один из трех ордеров на выход никогда не будет выполнен!

Так кто-нибудь может помочь здесь? Я имею в виду, что желать иметь один фиксированный стоп-лосс и один трейлинг-стоп-лосс не так уж экзотично, это должно как-то работать, верно?

Редактировать: если я прокручиваю график назад, я действительно вижу то один, то другой исполняемый ордер на выход, но никогда не оба для одного и того же ордера на вход.


person Paul    schedule 03.07.2019    source источник


Ответы (1)


Я нашел решение, также можно установить стоп-лосс с помощью команды strategy.order(), например:

if conditionEnter
    strategy.entry(id="longEnter", long=true, qty=1, limit=enterPrice
    strategy.order(id="stopLossLong", long=strategy.short,qty=strategy.position_size, limit=syminfo.mintick, stop=stopLossPrice)
person Paul    schedule 04.07.2019