ATR トレイリングストップ戦略

作者: リン・ハーンチャオチャン, 日付: 2023-09-26 20:23:13
タグ:

ATRトレーリングストップ戦略は,平均真要範囲 (ATR) 指標に基づいてストップ損失レベルを動的に設定する取引戦略である.変動するForexペアに適しており,主要トレンドで利益を得ながら,市場の変動を動的に追跡することによってリスクを制御する.

戦略の論理

この戦略は,ATR値に基づいてAVERAGE指標 (価格移動平均値) と上/下帯DIFF/DIFFLOWを計算し,取引チャネルを形成する.価格がDIFFを超えるとロングになり,価格がDIFFを下回るとショートになり,ATRに基づいて動的にストップを設定する.

DIFFは,価格が上位帯を超えると,ロングポジションをとる.価格が下位帯を超えると,ショートポジションをとる.さらに,ストップ・ロスのレベルはATR値と動的に動きます.これは適応ストップを可能にします.

この戦略は,主要なトレンドで利益を得るために,継続的に長/短に走ることができ,リスクを制御するためにATRトレーリングストップを使用します.これは不安定な楽器に適しています.

利点分析

この戦略の利点は以下の通りです.

  1. ATRベースのダイナミックストップは,市場変動に合わせて調整され,あまりにも近くまたはあまりにも遠くにストップを避ける.

  2. トレーディングチャネルは,トレンド内の平均逆転を捉えることを目的としています.チャネル内の価格の振動時に良い資本利用です.

  3. 継続的なトレンドトレードで 破綻を予測せず より良い利益を得るためにトレンドをフォローします

  4. シンプルなパラメータとルール 分かりやすく自動化できます

  5. 資本の活用が高く 継続的な取引により より多くの利益の機会が生まれます

リスク と 改善

考慮すべきいくつかのリスク:

  1. 大量のATR係数は,危険を制御できないので,距離が大きすぎる停車につながります.毎日ATRの1〜3倍倍を ATR倍数で推奨します.

  2. 範囲限定の市場でのウィップソーが 頻繁に停止を誘発します 望まない停止を減らすために ATR係数を調整します

  3. 初期ブレイク後に価格が逆転すると潜在的な損失.トレンドフィルターをトレードチャネルに追加すると,トレンド方向でのブレイクのみです.

  4. ストップを有効にできない場合もあります ストップ損失を最大限制限する方法を 考えてください

可能な最適化:

  1. ATR パラメータを最適化して 波動性を追跡し 過度の停止を防止する 適切なバランスを求めます

  2. トレンドインジケーターを追加し,トレンド方向でのトレードブレイクのみをします.

  3. 最適値を見つけるため,各計器のパラメータを個別に試験する.

  4. 中央線に突入する方法を考える

  5. 総リスク/引き上げを制御しながら ポジションの大きさを増加させる.

結論

ATRトレーリングストップ戦略は,リスクを動的に管理しながら,トレンドを継続的に取引する.それは不安定な楽器に適しており,資本の良い活用を提供します.パラメータの最適化とフィルターを追加することでパフォーマンスをさらに改善できます.全体的に,シンプルで実践的なトレンドフォロー戦略です.


/*backtest
start: 2023-09-18 00:00:00
end: 2023-09-25 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Investoz

//@version=4
strategy("ATR Strategy FOREX", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

len = input(26, type=input.integer, minval=1, title="Length")
mul = input(1, type=input.float, minval=0, title="Length")
mullow = input(2, type=input.float, minval=0, title="Length")

price = sma(close, 1)
average = ema(close, len)
diff = atr(len) * mul
difflow = atr(len) * mullow

bull_level = average + diff
bear_level = average - difflow
bull_cross = crossunder(price, bear_level)
bear_cross = crossunder(bull_level, price)

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 = 2008, title = "From Year", minval = 2008)
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 = 2019)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       
startTimeOk()  => true

if (startTimeOk())
    strategy.entry("KOP", strategy.long, when=bull_cross)
    strategy.close("KOP", when=bear_cross)  
    strategy.entry("SALJ", strategy.short, when=bear_cross)
    strategy.close("SALJ", when=bull_cross)

plot(price, title="price", color=color.black, transp=50, linewidth=2)
a0 = plot(average, title="average", color=color.red, transp=50, linewidth=1)
a1 = plot(bull_level, title="bull", color=color.green, transp=50, linewidth=1)
a2 = plot(bear_level, title="bear", color=color.red, transp=50, linewidth=1)
fill(a0, a1, color=color.green, transp=97)
fill(a0, a2, color=color.red, transp=97)

もっと