この戦略は,ストップ損失価格を設定するためにATR指標を使用する.ATRは市場の変動を反映し,ストップ損失距離を動的に設定するために使用することができる.この戦略は,ユーザー入力ATR期間と倍数値に基づいてATR値を計算し,倍数値に倍したATR値をストップ損失距離として使用する.具体的には,ATRトレーリングストップ計算式は:
ATR Line = Prior ATR Line ± nLoss (nLoss = nATRMultip * ATR value)
If close > ATR Line, adjust ATR Line up to close - nLoss
If close < ATR Line, adjust ATR Line down to close + nLoss
この方法により,ATR線は,ストップロスの後にトレンドを達成するために,価格変動に基づいて動的に調整できます.
ATR トレイリングストップに加えて,この戦略は入路信号を決定するために標準偏差チャネルも使用する.標準偏差チャネル計算式は:
Middle Line = ATR Trailing Stop Line
Upper Band = Middle Line + n * Standard Deviation
Lower Band = Middle Line - n * Standard Deviation
価格が中間線を突破すると長引く.価格が中間線を突破すると短引く.
この戦略の最大の利点は,市場変動に基づいて動的にストップロスを設定するためにATR指標を使用し,ストップロスをフォローするトレンドと効果的なリスク管理を可能にすることです.
さらに,エントリー信号の標準偏差チャネルを使用することで,価格変動が小さいため,頻繁にポジションを開くことは避けられます.
主なリスクは,ストップ損失距離が大きすぎると,リスクを効果的に制御できないことであり,小さすぎると,市場の騒音によって簡単に停止できるということです.このリスクを解決するために,ATR期間と倍数は最適なパラメータの組み合わせを見つけるために最適化することができます.
また,標準偏差チャネルパラメータが不適切で,過剰に高い/低いエントリー周波数につながるリスクもあります.パラメータを最適化して最適を見つけることができます.
戦略は次の側面から強化される:
ATR 期間と倍数を最適化して,より良いストップ損失効果を達成する.
標準偏差チャネルパラメータを最適化して より良い入力信号を出す
フィルタリングのための他の指標,例えば移動平均,キャンドルスタイクパターンなどを追加し,トレンド方向を判断し,収益性を向上させる.
入口と出口ロジックを最適化します.例えば,価格がチャネル帯に達したときのキャンドルスタイルのパターンを確認した後でのみポジションを開きます.
この戦略は,ATR指標に基づいてストップロスのトレンドを追求し,エントリーシグナルのために標準偏差チャネルを使用する.その利点はトレンド取引のための良いリスク制御能力にあります.リスクと改善も明確に分析されています.この戦略はさらなるテストと最適化に価値があり,実践的な取引価値があります.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version = 2 strategy(title="Average True Range Strategy", overlay = true) nATRPeriod = input(11) //Hur många perioder ATR är på nATRMultip = input(0.5) //Hur många gånger nuvarande ATR multipliceras med xATR = atr(nATRPeriod) nLoss = nATRMultip * xATR xATRTrailingStop = iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss), iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss), iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss))) pos = iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), -1, iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), 1, nz(pos[1], 0))) stdev3 = 14*stdev(xATR, nATRPeriod) band1 = xATRTrailingStop+stdev3 //Översta stdev bandet band2 = xATRTrailingStop-stdev3 //Nedersta stdev bandet // Datum och tid FromMonth = input(defval = 8, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 18, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2013, title = "From Year", minval = 2013) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 2020, title = "To Year", minval = 2017) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest slut startTimeOk() => true initial_capital = 100000 take = close > xATRTrailingStop if( startTimeOk() ) and (pos == 1) //if (pos == 1) strategy.entry("Long", strategy.long, comment = "KOP") strategy.exit("Long", when = take) if( startTimeOk() ) and (pos == -1) //if (pos == -1) strategy.entry("Short", strategy.short, comment = "SALJ") barcolor(pos == -1 ? red: pos == 1 ? green : blue ) plot(xATRTrailingStop, color=red, title="ATR Trailing Stop") //Mittersta linjen som är triggerlinjen för köp/sälj plot(band1, color=red) plot(band2, color=blue)