0

非常に単純な MA クロスオーバー戦略 (ロングのみ) を作成しようとしています。そこでは、固定ストップロス レベルで、または終了条件が満たされたときに取引を終了します。このため、私は自分の取引を終了するために strategy.order 関数を使用しています。しかし、いくつかのショート トレードも開始されているため、明らかに何かが間違っています... ここで、コードの最も重要な部分を見つけることができます。

//strategy conditions & variables

ordersize=floor(strategy.equity/close)

trendfilter = RSI_w > i_RSI_TH ? 1 : 0

longCondition = crossover(shortMA,longMA)
exitCondition = crossover(longMA,shortMA)

stopLoss = float(na)
stopLoss := strategy.position_size[0]>strategy.position_size[1] ? strategy.position_avg_price - (i_atr_mult * atr) : strategy.position_size>0 ?  stopLoss[1] : na

// strategy entry & exits

strategy.entry(id="going long", long=true, qty=ordersize, when=longCondition and TimeWindow and trendfilter>0)

strategy.order(id="stop loss", long=false, stop=stopLoss, oca_name='L', oca_type=strategy.oca.cancel, qty=strategy.position_size, when=strategy.position_size > 0 and TimeWindow)
strategy.order(id="exit long", long=false, oca_name='L', oca_type=strategy.oca.cancel, qty=strategy.position_size, when= exitCondition and strategy.position_size > 0 and TimeWindow)

したがって、私のロジックでは、最初の strategy.order 関数は、strategy.position_size > 0 の場合にのみ取引を開くことができます。価格が SL レベルに達すると、オープン トレードでなくてもショート トレードが開始されます。さらに良いことに、これらの短いエントリを回避するためにコードをどのように適応させることができますか? これは私を大いに助けるでしょう!!

要約すると、これらの短いエントリを担当するコード行は次のとおりです。

strategy.order(id="stop loss", long=false, stop=stopLoss, oca_name='L', oca_type=strategy.oca.cancel, qty=strategy.position_size, when=strategy.position_size > 0 and TimeWindow)
4

1 に答える 1