ATR変動に適応するダイナミックストップ損失戦略

作者: リン・ハーンチャオチャン,日付: 2023年10月9日 15:30:29
タグ:

概要

この戦略は,動力指標Stochastic K値と波動指標ATRを組み合わせて,ATR値に基づいてストップ損失ラインとエントリーラインを動的に調整し,市場の波動に応じてストップ損失とエントリーラインを自動的に調整するというアイデアを実現します.

戦略の論理

  1. ストキャスティックK値を表す長さlenでK値 sma (ストック (近,高,低,len),スムーズK) を計算する.

  2. ATR値 atr ((len) を長さ len で計算する.

  3. グラフストップ損失線グラフ ((rsi(atr, len) +lowLine,..., title = low line) とエントリーライングラフ ((rsi(atr, len) *-1+100-lowLine,..., title = up line) がATR値に基づいています.

  4. 入力線交差点 (k,上線) を越えて,低線交差点 (k,下線) を越えてK値が交差したときの入口と出口信号を決定する.

  5. 購入・販売信号の背景色をグラフ化する.

  6. 取引を実行し,上記信号が発信されたときにストップ・ロスを設定します.

利点分析

  1. この戦略は,市場の変動に基づいてストップ損失とエントリーラインを動的に調整します.ATRは,市場の変動に応じてストップ損失リスクを自動的に調整します.

  2. 市場の変動が大きいとき,ストップ・ロストとエントリーラインの間の距離は上昇し,変動によって停止されないようにします.

  3. 市場変動が低いとき,ストップ・ロースとエントリーラインの間の距離が短縮して,タイミングよくストップ・ロースをします.

  4. インパクトインジケーター K 値を入力と出口を決定するために使用する. K 値は価格変化速度とキャッチターニングポイントを反映する.

  5. 動力指標と波動指標を組み合わせることで,動向を把握し,変動に基づいてリスクを自動的に調整できます.

リスク分析

  1. K値は誤ったブレイクがあり,不要な取引信号を引き起こす可能性があります. smoothKパラメータを調整することでK線を滑らかにすることができます.

  2. ATRパラメータ len が大きすぎると,ストップ損失とエントリーラインの間の距離はリスクが高いので大きすぎます.異なる len パラメータの安定性をテストできます.

  3. 純粋にストップ損失を追うことは,ストップ損失ポジションが適切かどうかを判断できず,シングルストップ損失リスクを制御できない.シングルストップ損失リスクを制御するために期待されるストップ損失を考慮することができる.

  4. 頻繁な戦略信号は高取引コストにつながります.取引頻度を制御するためにエントリーラインパラメータlowLineを調整できます.

オプティマイゼーションの方向性

  1. 最適のスムーズK値パラメータの組み合わせを見つけるためにスムーズKパラメータをテストし調整する.

  2. 適切なATRパラメータを決定するために,ATRパラメータ lenの異なる値を試験する.

  3. 入力ラインパラメータ lowLine を最適化して,取引頻度を制御する最適なパラメータを見つけます.

  4. 他の指標を組み合わせてエントリーシグナルをフィルタリングし,取引量指標,KDJ指標など,偽のブレイクアウトを回避することを検討する.

  5. ストップ・ロスの方法を最適化し,ストップ・ロスのリスクを積極的に制御するために,予想されるストップ・ロスの改善を検討します.

概要

この戦略は,モメントインジケーターK値と波動性インジケーターATRに基づいてストップ損失とエントリーラインを動的に調整するアイデアを実現している.トレンドを把握し,変動に基づいてリスクを自動的に調整できる.これは非常に革新的で実用的です.パラメータチューニングなどのさらなる最適化,ストップ損失方法の改善は,戦略をより安定して信頼性のあるものになり,大きな発展見通しを持っています.


/*backtest
start: 2023-09-08 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Stoch + ATR", overlay=false, pyramiding = 0, calc_on_order_fills = false, commission_type =  strategy.commission.percent, commission_value = 0.0454, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

len = input(34, minval=1, title="Length for Main Stochastic & ATR") 
smoothK = input(2, minval=1, title="SmoothK for Main Stochastic")
lowLine = input(10, minval=-50, maxval=50, title="Multiplier for up/low lines")

//Stoch formula
k = sma(stoch(close, high, low, len), smoothK)
plot(k, color=aqua, title = "Stoch")

//len=input
atr=atr(len)
plot(rsi(atr, len)+lowLine , color=red,linewidth=2, title = "low line")
plot(rsi(atr, len)*-1+100-lowLine, color=lime,linewidth=2, title = "up line")

aboveLine = crossunder(k,(rsi(atr, len)+lowLine))? 1 : 0
belowLine = crossover(k,(rsi(atr, len)*-1+100-lowLine))? 1 : 0

aboveLine2 = crossover(k,(rsi(atr, len)+lowLine))? 1 : 0
belowLine2 = crossunder(k,(rsi(atr, len)*-1+100-lowLine))? 1 : 0

skip=(aboveLine2==1 or belowLine2==1) and (aboveLine==1 or belowLine==1)? 1 : 0

//BackGroound Color Plots
plotchar(belowLine==1 and skip==0, title="Buy Signal", char='B', location=location.bottom, color=white, transp=0, offset=0)
plotchar(aboveLine==1 and skip==0, title="Sell Signal", char='S', location=location.top, color=white, transp=0, offset=0)
plotchar(belowLine2==1 and skip==0, title="Close Signal", char='C', location=location.bottom, color=white, transp=0, offset=0)
plotchar(aboveLine2==1 and skip==0, title="Close Signal", char='C', location=location.top, color=white, transp=0, offset=0)

bgcolor(aboveLine==1 ? red : na, transp=30, title = "sell signal")
bgcolor(belowLine==1 ? lime : na, transp=30, title = "buy signal")

bgcolor(aboveLine2==1 ? lime : na, transp=80, title = "close short")
bgcolor(belowLine2==1 ? red : na, transp=80, title = "close long")

bgcolor(skip==1 ? black : na, transp=0, title = "skip signal")

//strategy
longCondition = belowLine==1
shortCondition = aboveLine==1

strategy.entry("BUY", strategy.long, when = longCondition)
strategy.entry("SELL", strategy.short, when = shortCondition)
strategy.cancel_all(when = skip==1)





もっと