Индивидуальное управление остановками для заказов по пирамиде - PullRequest
0 голосов
/ 06 января 2020

Я ищу способ напрямую управлять заказами пирамид. Я попытался использовать функцию Strategy.position_entry_name, но, по-видимому, она ссылается только на самую раннюю открытую сделку.

Например, в приведенном ниже скрипте я бы хотел сделать то, что сделал для остановки от LONG 1 до LONG 2 и 3. Теоретически я мог бы использовать Strategy.opentrades, чтобы ссылаться на них, но это кажется ненадежным, когда ситуация, когда LONG 1 остановлен, а LONG 2 и 3 все еще открыты, LONG 3 снова откроется, когда количество открытых сделок упадет с 3 до 2. В идеале, Я бы хотел, чтобы код распознал непосредственно, что он все еще держит LONG 3. Поэтому он не должен открывать его снова.

Любая помощь будет оценена, спасибо!

//@version=4
strategy("Manage Pyramid Stop Orders Individually", shorttitle='MPSOI' , overlay=true, pyramiding=3)

MA = sma(close, 50)

Buy = MA > MA[1]
Sell = MA < MA[1]

PositionSize = strategy.initial_capital/close
Stops = low

//LONG STOPS
Long1InPosition = strategy.position_entry_name == 'LONG 1'
Long1_Stops = Stops
Long1_Stops := Long1InPosition ? Long1_Stops[1] : low

Long2InPosition = strategy.position_entry_name == 'LONG 2'
Long2_Stops = Stops
Long2_Stops := Long2InPosition ? Long2_Stops[1] : low

Long3InPosition = strategy.position_entry_name == 'LONG 3'
Long3_Stops = Stops
Long3_Stops := Long3InPosition ? Long3_Stops[1] : low


if strategy.opentrades == 0
    strategy.entry("LONG 1", strategy.long, qty=PositionSize, when=Buy)

if strategy.opentrades == 1
    strategy.entry("LONG 2", strategy.long, qty=PositionSize, when=Buy)

if strategy.opentrades == 2
    strategy.entry("LONG 3", strategy.long, qty=PositionSize, when=Buy)


strategy.exit("LONG 1 Exit", 'LONG 1', stop=Long1_Stops)
strategy.exit("LONG 2 Exit", 'LONG 2', stop=Long2_Stops)
strategy.exit("LONG 3 Exit", 'LONG 3', stop=Long3_Stops)

strategy.close_all(when=Sell)
strategy.cancel_all(when=Sell)


//PLOTS
MAcolor = Buy ? color.lime : Sell ? color.red : color.gray
plot(MA, color=MAcolor, title='MA', linewidth=3)
plot(Long1_Stops, color=color.red, title='Long1_Stop', style=plot.style_linebr)
plot(Long2_Stops, color=color.maroon, title='Long2_Stop', style=plot.style_linebr)
plot(Long3_Stops, color=color.purple, title='Long3_Stop', style=plot.style_linebr)

bgcolor(Long1InPosition ? color.lime : na)
bgcolor(Long2InPosition ? color.olive : na)
bgcolor(Long3InPosition ? color.teal : na)

1 Ответ

0 голосов
/ 09 января 2020

Я бы попытался использовать strategy.order вместо strategy.entry и strategy.exit.

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

...