ATR変動に適応するダイナミックストップロスモメンタムノックイン戦略


作成日: 2023-10-09 15:30:29 最終変更日: 2023-10-09 15:30:29
コピー: 0 クリック数: 628
1
フォロー
1617
フォロワー

概要

この戦略は,動量指数ランダム指数K値と波動率指数ATRを組み合わせて,ATRの値に応じてK値のストップラインとエントリーラインを動的に調整し,市場の波動に応じてストップラインとエントリーラインを自動的に調整する考えを実現した.

戦略原則

  1. 計算長さはlenのK値sma (((stoch (((close, high, low, len), smoothK) で,ランダムな指標K値を表している.

  2. 計算長がlenであるATR値はatr ((len) 。

  3. ATR値に基づいてストップラインプロット (rsi,atr,len) +lowLine, …, title = “low line”) と入場ラインプロット (rsi,atr,len) を描く*-1+100-lowLine, …, title = “up line”)。

  4. K値がエントリーラインのクロスオーバー (k,up line) とストップラインのクロスアンダー (k,low line) を突破する際の判断で,買入と売却のシグナルが発生します.

  5. 背景の色を塗り替える

  6. 上記のシグナルが満たされると,買入・売却操作を行い,ストップ・ロスを設定する.

戦略的優位分析

  1. この戦略は,市場の波動率ATRに応じてストップラインとエントリーラインを動的に調整し,市場の波動率に応じてストップリスクの調整に自動的に適応することができる.

  2. 市場の波動が大きいときは,ストップラインと入場ラインの間の距離を大きくして,ストップが震え出さないようにする.

  3. 市場の波動が静かであるとき,ストップラインとエントリーラインの間の距離が狭くなり,タイミングでストップすることができる.

  4. 動量指標K値を用いて入場と出場を判断する.K値は価格変化の速度に対応し,ターニングポイントを捉える.

  5. 動量指標と波動率指標を組み合わせて,トレンドを捉え,波動に応じてリスクを自動的に調整することができます.

戦略的リスク分析

  1. K値は偽突破に容易で,不必要な取引信号を誘発する可能性がある。K値パラメータsmoothKを適切に調整してK線を平滑化することができる。

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

  3. 単なるストップを追跡するだけでは,ストップ位置が合理的かどうかを判断できず,単一のストップリスクを制御することはできません. 期待ストップアルゴリズムと組み合わせて,単一のストップリスクを制御することを考えることができます.

  4. 戦略信号は頻繁で取引費は高い。入場ラインパラメータlowLineを適切に調整して取引頻度を制御できる。

戦略最適化の方向性

  1. K値のパラメータをsmoothKに調整して,スムートK値の最適なパラメータの組み合わせを見つけるテスト.

  2. ATRパラメータlenの異なる取値をテストし,適切なATRパラメータを決定する.

  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)