ATR トレンド 標準偏差チャネルに基づく戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-05 16:34:27
タグ:

img

概要

ATRトレンドフォローリング戦略というこの戦略は,ストップ損失とエントリー信号の標準偏差チャネルのための平均真の範囲 (ATR) をベースとしたトレンドフォローリング戦略です.インデックス,フォレックス,コモディティなどの明らかなトレンドを持つ金融製品に適しています.

取引の論理

この戦略は,ストップ損失価格を設定するために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期間と倍数は最適なパラメータの組み合わせを見つけるために最適化することができます.

また,標準偏差チャネルパラメータが不適切で,過剰に高い/低いエントリー周波数につながるリスクもあります.パラメータを最適化して最適を見つけることができます.

増進 の 機会

戦略は次の側面から強化される:

  1. ATR 期間と倍数を最適化して,より良いストップ損失効果を達成する.

  2. 標準偏差チャネルパラメータを最適化して より良い入力信号を出す

  3. フィルタリングのための他の指標,例えば移動平均,キャンドルスタイクパターンなどを追加し,トレンド方向を判断し,収益性を向上させる.

  4. 入口と出口ロジックを最適化します.例えば,価格がチャネル帯に達したときのキャンドルスタイルのパターンを確認した後でのみポジションを開きます.

概要

この戦略は,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)



もっと