スーパーATRトレンドフォロー戦略


作成日: 2024-02-19 11:41:20 最終変更日: 2024-02-19 11:41:20
コピー: 0 クリック数: 669
1
フォロー
1617
フォロワー

スーパーATRトレンドフォロー戦略

概要

スーパーATRトレンドフォロー戦略はATR指標に基づくトレンドフォロー戦略である.ATR指標を使用して市場の変動性を測定し,ATRの何倍ものストップラインを使用してトレンドフォローを実現する.

戦略原則

この戦略は,まずATR指標を計算し,ATR指標は過去N日の株式価格の変動幅の移動平均であり,市場リスクと変動性を表すためのものです.戦略は,ATRの計算方法を変更して,通常のATRまたはSMAの計算方法を選択することができます.

その後,ATR 値に基づいて,上下線として通路の倍数で掛け算します.close - Multiplier * ATR軌道下での計算:close + Multiplier * ATRこれはATR指数に基づくトレンドチャネルを構成する.

次に,現在の価格がチャネルを突破したかどうかを判断します. 価格がチャネルを突破した場合は,下降傾向に入ると判断します.

また,戦略は,指定された日付の時間帯のみで取引する取引時間ウィンドウを設定しています.

戦略的優位性

この指標チャネルベースのトレンド追跡戦略には以下の利点があります.

  1. ATR指数を使用して自動でストップポジションを調整し,リスクを効果的に制御します.
  2. ATR指標は株価の変動を考慮し,止損線は合理的です
  3. 経路の突破判断による入場精度向上
  4. ATRの計算方法の調整を許可し,戦略の柔軟性を高めます.
  5. 取引の時間窓を設定し,重大事件を回避する戦略が失敗する

総じて,これは,リスクを効果的に管理し,より良いリターンを得ることができるシンプルで実用的なトレンド追跡戦略です.

リスク分析

この戦略にはいくつかのリスクがあります.

  1. 市場が急激に変動する際,ATR指標は市場の変化に反応し得ず,ストップローズが過度に緩やかになる
  2. 多空意見が一致しない場合,通路内での価格変動が起こり,取引リスクが増加します.
  3. 固定的倍数設定は,すべての品種に適さない場合があり,異なる品種に合わせて調整する必要があります.
  4. setWindowは取引の機会を制限し,正しく設定されていない場合は,よりよい取引の機会を逃す可能性があります.

リスクの管理には,以下のような対策を講じます.

  1. 市場状況を判断する他の指標と組み合わせて,ATR指標のみに頼らないこと
  2. フィルタリング条件を追加し,無効なブレイクが取引のリスクを引き起こすのを防ぐ
  3. 異なる品種の歴史的特徴に応じて適切な倍数を選択
  4. setWindowのパラメータを最適化してテストし,合理的な設定を保証する

最適化の方向

この戦略をさらに改善する余地があります.

  1. 機械学習アルゴリズムを導入して倍数の動的最適化が可能
  2. 感情の指標などと組み合わせて判断し,通路の範囲を最適化する多空の杆
  3. 取引量または波動確認を増加させ,無効突破を回避する
  4. 高級時間ベースのポリシーフレームワークを使用してバックテスト

戦略の安定性や収益性をさらに向上させることができる.

要約する

この策略overallは,非常に実用的なトレンド追跡策略である.それはATR指標を使用して自適應チャネルを構築し,チャネルを突破して買い売りのタイミングを判断する.戦略は,シンプルで実用的で,リスクを効果的に制御し,中長期トレンドを追跡するのに適しています.我々は,さらにリスク制御と戦略の最適化勧告を提出し,この戦略をより強力で堅牢にします.

ストラテジーソースコード
/*backtest
start: 2023-02-12 00:00:00
end: 2024-02-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('B厂长 @超级趋势精简优化版', overlay=true)
Periods = input(title='ATR周期', defval=10)
src = input(hl2, title='价格数据源')
Multiplier = input.float(title='ATR 乘数', step=0.1, defval=3.0)
changeATR = input(title='更改ATR计算方法', defval=true,tooltip = '默认为art否则sma(ta.tr,ATR周期)')
showsignals = input(title='显示买入/卖出信号', defval=false)
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title='上涨趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0))
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal and showsignals ? up : na, title='买点', text='买点', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0))
dnPlot = plot(trend == 1 ? na : dn, title='下跌趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal and showsignals ? dn : na, title='卖点', text='卖点', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
FromMonth = input.int(defval=9, title='From Month', minval=1, maxval=12)
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31)
FromYear = input.int(defval=2018, title='From Year', minval=999)
ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12)
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31)
ToYear = input.int(defval=9999, title='To Year', minval=999)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
window() =>
    time >= start and time <= finish ? true : false
longCondition = buySignal
if longCondition and window()
    strategy.entry('BUY', strategy.long, comment = '做多')
shortCondition = sellSignal
if shortCondition and window()
    strategy.entry('SAL', strategy.short, comment = '做空')

buy1 = ta.barssince(buySignal)
sell1 = ta.barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na