ADXインテリジェントトレンドトラッキング戦略は,トレンドの強さを判断し,傾向が弱いときにトレンドを捕捉し,利益のために強いトレンドをフォローするために平均方向指数 (ADX) を使用する.この戦略は,価格突破を組み合わせながらトレンドの強さを判断することによって取引信号を生成し,トレンドトラッキング戦略の一種に属している.
この戦略の核心は,現在のトレンド強さを判断するために,主に平均方向指数 (ADX) に基づいている.ADXは,トレンド強さを表現するために,特定の期間中の価格変動の平均値を計算する.ADX値が設定された
戦略は,まず14サイクル ADX値を計算する.18を下回るとトレンドが弱くなると考えられる.その後,過去20Kラインの最高値と最低値によって形成されたボックス範囲を計算する.価格がこのボックスを突破すると,買い売り信号が生成される.ストップ損失距離はボックスサイズの50%であり,利益を得る距離はボックスサイズの100%である.
この戦略は,トレンド強度判断と突破シグナルを組み合わせ,トレンドが弱くなって統合に入るときにトレンドを捕捉し,不規則な市場で頻繁な取引を避けます.そして強いトレンドが現れたとき,より広い利益目標がより多くの利益を得ることができます.
ADX,ボックスレンジ,ストップ損失係数などのパラメータは,異なる製品や市場環境により適するように最適化できます.同時に,大きな損失を避けるためにシングルストップ損失の割合を制御するために厳格なマネーマネジメントも不可欠です.
ADXインテリジェントトレンドトラッキング戦略は,一般的に比較的安定したトレンドトラッキング戦略である.傾向強度判断と価格突破シグナルを組み合わせ,典型的なトレンドフォロー戦略で一般的な高値を追いかける,低値殺すなどの問題を避ける.パラメータ最適化と厳格なマネーマネジメントを通じて,戦略は安定して利益を得ることができます.
/*backtest start: 2023-11-20 00:00:00 end: 2023-11-27 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Developer: Andrew Palladino. //Creator: Rob Booker. //Date: 9/29/2017 //@version=5 //Date: 08/10/2022 //Updated to V5 from V1, default cash settings added and indicators made more easily visible by: // @ Powerscooter strategy("Rob Booker - ADX Breakout", shorttitle="ADX Breakout V5", overlay=true, default_qty_type = strategy.cash, default_qty_value = 100000, initial_capital = 100000) adxSmoothPeriod = input(14, title="ADX Smoothing Period", group = "ADX Settings") adxPeriod = input(14, title="ADX Period", group = "ADX Settings") adxLowerLevel = input(18, title="ADX Lower Level", group = "ADX Settings") boxLookBack = input(20, title="BreakoutBox Lookback Period", group = "BreakoutBox") profitTargetMultiple = input(1.0, title="Profit Target Box Width Multiple", group = "Take Profit and Stop Loss") stopLossMultiple = input(0.5, title="Stop Loss Box Width Multiple", group = "Take Profit and Stop Loss") enableDirection = input(0, title="Both(0), Long(1), Short(-1)", group = "Trade Direction") // When the ADX drops below threshold limit, then we consider the pair in consolidation. // Set Box around highs and lows of the last 20 candles. with upper and lower boundaries. // When price breaks outside of box, a trade is taken. (on close or on touch?) // Stop is placed, default 50%, of the size of the box. So if box is 200 pips, stop is at 100 pips. // Profit target is 100% of the size of the box. Default. User can set a profit target of 0.5, 1 full size, 2 or 3. dirmov(len) => up = ta.change(high) down = -ta.change(low) truerange = ta.rma(ta.tr, len) plus = fixnan(100 * ta.rma(up > down and up > 0 ? up : 0, len) / truerange) minus = fixnan(100 * ta.rma(down > up and down > 0 ? down : 0, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) adxHigh(dilen, adxlen) => [plus, minus] = dirmov(dilen) plus adxLow(dilen, adxlen) => [plus, minus] = dirmov(dilen) minus sig = adx(adxSmoothPeriod, adxPeriod) //sigHigh = adxHigh(dilen, adxlen) //sigLow = adxLow(dilen, adxlen) isADXLow = sig < adxLowerLevel //boxUpperLevel = ta.highest(high, boxLookBack)[1] //boxLowerLevel = ta.lowest(low, boxLookBack)[1] var float boxUpperLevelCarry = 0 var float boxLowerLevelCarry = 0 boxUpperLevel = strategy.position_size == 0 ? ta.highest(high, boxLookBack)[1] : boxUpperLevelCarry boxUpperLevelCarry := boxUpperLevel boxLowerLevel = strategy.position_size == 0 ? ta.lowest(low, boxLookBack)[1] : boxLowerLevelCarry boxLowerLevelCarry := boxLowerLevel boxWidth = boxUpperLevel - boxLowerLevel profitTarget = strategy.position_size > 0 ? strategy.position_avg_price + profitTargetMultiple*boxWidth : strategy.position_size < 0 ? strategy.position_avg_price - profitTargetMultiple*boxWidth : na stopLoss = strategy.position_size > 0 ? strategy.position_avg_price - stopLossMultiple*boxWidth : strategy.position_size < 0 ? strategy.position_avg_price + stopLossMultiple*boxWidth : na plot(strategy.position_size == 0 ? boxUpperLevel : na, color=color.white, style = plot.style_linebr) plot(strategy.position_size == 0 ? boxLowerLevel : na, color=color.white, style = plot.style_linebr) bgcolor(isADXLow ? color.purple : na, transp=72, title = "ADX limit") plot(stopLoss, color=color.red, linewidth=2, style = plot.style_linebr, title="StopLossLine") plot(profitTarget, color=color.blue, linewidth=2, style = plot.style_linebr, title="ProfitTargetLine") isBuyValid = strategy.position_size == 0 and ta.cross(close, boxUpperLevel) and isADXLow //Long Entry Condition strategy.exit("close_long", from_entry="open_long", limit = profitTarget, stop = stopLoss) if isBuyValid and strategy.opentrades == 0 and (enableDirection == -1 or enableDirection == 0) strategy.entry("open_long", strategy.long) isSellValid = strategy.position_size == 0 and ta.cross(close, boxLowerLevel) and isADXLow //Short Entry condition strategy.exit(id="close_short", from_entry="open_short", limit = profitTarget, stop = stopLoss) if isSellValid and strategy.opentrades == 0 and (enableDirection == 1 or enableDirection == 0) strategy.entry("open_short", strategy.short)