この戦略は,トレンドの方向性を決定するために平均真の範囲 (ATR) インジケーターを使用します.トレンドが上昇すると長行し,トレンドが下がると短行します.これはトレンドをフォローする戦略タイプに属します.
この戦略は,まず価格の単純な移動平均値 (sma) と指数的な移動平均値 (ema) を計算し,その後,過去N日間の価格動きの平均範囲であるATR指標を計算します.
この戦略は,EMA平均線,上帯 (EMA + ATR *係数) と下帯 (EMA - ATR *係数) を用いてトレンド方向を決定する.価格は上帯を突破すると長引く.下帯を突破すると短引く.
コードの主な論理:
ATRに基づいて動的にポジションを調整することで,動向の方向性を効果的に追うことができます.
解決策:
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)