ATR トレンド 戦略

作者: リン・ハーンチャオチャン, 日時: 2023-09-28 11:32:09
タグ:

概要

この戦略は,トレンドの方向性を決定するために平均真の範囲 (ATR) インジケーターを使用します.トレンドが上昇すると長行し,トレンドが下がると短行します.これはトレンドをフォローする戦略タイプに属します.

戦略の論理

この戦略は,まず価格の単純な移動平均値 (sma) と指数的な移動平均値 (ema) を計算し,その後,過去N日間の価格動きの平均範囲であるATR指標を計算します.

この戦略は,EMA平均線,上帯 (EMA + ATR *係数) と下帯 (EMA - ATR *係数) を用いてトレンド方向を決定する.価格は上帯を突破すると長引く.下帯を突破すると短引く.

コードの主な論理:

  1. 価格SMAとEMAの平均を計算する
  2. ATR 平均範囲を計算する
  3. 上部と下部帯を計算する
  4. 長信号を決定する: 上部帯以上の価格ブレイク
  5. ショート信号を特定する: 価格が下の帯を下回る
  6. ストップ・ロスを設定してポジションを閉じる: ローグを閉じる上位帯を下回る価格ブレイク; ショートを閉じる上位帯を下回る価格ブレイク.

ATRに基づいて動的にポジションを調整することで,動向の方向性を効果的に追うことができます.

利点

  1. トレンドの方向性を決定するためにATRを使用することで,価格の傾向を効果的に把握することができます.
  2. 移動平均値に基づいたストップ損失は,リスクを合理的に制御できます
  3. シンプルで明快な戦略論理,理解し実行しやすい
  4. 柔軟な設定可能なパラメータ,異なる市場環境に適応可能

リスク

  1. ATR指標は,非常に不安定な横向市場で失敗する
  2. パラメータの設定が正しくない場合,取引が頻繁すぎる可能性があります.
  3. 突然の逆転はストップ・ロスを無効にすることができます.
  4. 高い取引コストは,追跡設定の調整を必要とする

解決策:

  1. 戦略を一時停止するか,高変動の他の指標を使用する
  2. 取引頻度を減らすためにパラメータを最適化
  3. 大規模なデータイベントのストップ損失比を増やす
  4. 特定の製品に基づいて ATR 範囲を調整する

改善 の 方向

  1. パラメータを最適化するためにトレンドインジケーターと組み合わせる.例えばトレンドのためにMACDを追加する.
  2. 入力のためにボリンジャー帯のようなフィルターを追加します.
  3. トレイリングストップや出口インジケーターなどのストップ・ロスの方法を最適化
  4. 特定の製品に基づいて ATR の範囲を最適化
  5. 固定分数的なポジションサイズなどのリスク管理を追加します
  6. 機械学習を使用してパラメータを動的に最適化します

概要

ATRトレンドフォロー戦略は,ATRを使用してトレンド方向を決定するための明確な論理を持っています.これは典型的なトレンドフォローシステムです.利点は,トレンドをフォローするシンプルさと能力です.しかし,さまざまな市場のために最適化を必要とするリスクもあります.全体として,定量的な取引ツールとして大きな可能性と価値があります.


/*backtest
start: 2023-08-28 00:00:00
end: 2023-09-27 00:00:00
period: 1h
basePeriod: 15m
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(2.618, type=input.float, minval=0, title="Length")
mullow = input(2.386, 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()) and ema(close,1) > ema(close,528)
    strategy.entry("KOP", strategy.long, when=bull_cross) 
    strategy.close("KOP", when=bear_cross)  
if (startTimeOk()) and ema(close,1) < ema(close,528)
   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)

もっと