適応型 ATR-ADX トレンド戦略 V2


作成日: 2023-12-05 18:08:14 最終変更日: 2023-12-05 18:08:14
コピー: 0 クリック数: 1056
1
フォロー
1619
フォロワー

適応型 ATR-ADX トレンド戦略 V2

概要

この戦略はATR指標とADX指標を組み合わせたトレンド追跡戦略である.これは市場のトレンド状態に応じてATRの倍数を動的に調整し,より良いトレンド追跡を実現する.

戦略原則

この戦略は主にATR指数とADX指数に基づいています.

まず,実際の波動範囲 ((ATR) とADXを計算する.ATRは市場の波動程度を反映し,ADXはトレンドの強さを判断する.

次に,ADXの多空方向指数DXの差値に基づいて,現在のトレンドの多空状態を判断する.DI+がDI−より高い場合は多頭トレンド,DI−がDI+より高い場合は空頭トレンドである.

次に,ADXが上昇すると,より大きなATR倍数 ((m1) を使用し,ADXが低下すると,より小さなATR倍数 ((m2) を使用し,動的調整を実現します.これはこの戦略の核心です.

最後に,ATRと価格の平均値を組み合わせて,上下トレンドを計算し,トレンドの方向を判断します.価格が上下トレンドを突破したときには見上げ,価格が下下トレンドを突破したときには見空きます.

したがって,この戦略はATR指標とADX指標を融合させ,ATRパラメータを動的に調整することで,トレンドをよりよく捉え,取引することができる.

優位分析

この戦略にはいくつかの明らかな利点があります.

  1. 動的にパラメータを調整し,トレンドを把握できます.
  2. ATRとADXの2つの指標を組み合わせると,より全面的な判断が得られます.
  3. 撤退は,ある範囲で制御される見込みです.
  4. 実現プロセスはシンプルで分かりやすい

このトレンドは,トレンドを観察する上で非常に実用的で,トレンドをコントロールする上で非常に優れた能力を持ち,推奨されています.

リスク分析

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

  1. ADXは後退し,トレンド転換点を逃している可能性がある
  2. ATRのサイズが間違って,利益が不足したり,損失が大きすぎたりする可能性があります.
  3. 突発事故で急激に上下線が壊れ,損害が発生

ブラック・スウェン事件は,戦略にも大きな衝撃を与えます.

最適化の方向

この戦略は以下の方向から最適化できます.

  1. ATRとADXのパラメータを最適化して,トレンドをよりよく捉える
  2. ADXの遅れを回避するために,他の指標の確認を追加します.
  3. ダイナミック・ストップ・メカニズムの構築
  4. ポジション管理を調整し,異なる市場環境で異なる戦略を採用

この戦略は,最適化できる余地があり,問題に対応してパラメータとメカニズムを調整することが必要である.

要約する

ATR-ADXのトレンド戦略を自主的に適応するV2は,ATRのパラメータを動的に調整することで,トレンドをうまく捉えることができ,ATRとADXの2つの指標判断を組み合わせて,誤差を許容します.しかし,我々はまた,リスク管理と戦略の最適化に注意して,遅れと損失の拡大を防ぐ必要があります.全体的に,この戦略は学習と適用に値します.

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

//@version=2
// From mortdiggiddy's indicator to strategy
// See also: https://www.tradingview.com/u/mortdiggiddy/

strategy(title = "Adaptive ATR-ADX Trend V2", shorttitle = "Adaptive ATR V2 Strategy", overlay = true)

//Mode
src = input(title = "Source",  defval = hlc3)
atrLen = input(title = "ATR",  defval = 21, minval = 1, maxval = 100)
m1 = input(title = "ATR Multiplier - ADX Rising", type = float, defval = 3.5, minval = 1, step = 0.1, maxval = 100)
m2 = input(title = "ATR Multiplier - ADX Falling", type = float, defval = 1.75, minval = 1, step = 0.1, maxval = 100)

adxLen = input(title = "ADX",  defval = 14, minval = 1, maxval = 100)
adxThresh = input(title = "ADX Threshold",  defval = 30, minval = 1)
aboveThresh = input(true, title = "ADX Above Threshold uses ATR Falling Multiplier Even if Rising?")
useHeiken = input(false, title = "Use Heiken-Ashi Bars (Source will be ohlc4)")
    
// DI-Pos, DI-Neg, ADX

hR = change(high)
lR = -change(low)

dmPos = hR > lR ? max(hR, 0) : 0
dmNeg = lR > hR ? max(lR, 0) : 0

sTR = nz(sTR[1]) - nz(sTR[1]) / adxLen + tr
sDMPos = nz(sDMPos[1]) - nz(sDMPos[1]) / adxLen + dmPos
sDMNeg = nz(sDMNeg[1]) - nz(sDMNeg[1]) / adxLen + dmNeg

DIP = sDMPos / sTR * 100
DIN = sDMNeg / sTR * 100
DX = abs(DIP - DIN) / (DIP + DIN) * 100
adx = sma(DX, adxLen)

// Heiken-Ashi

xClose = ohlc4
xOpen = (nz(xOpen[1]) + nz(close[1])) / 2
xHigh = max(high, max(xOpen, xClose))
xLow = min(low, min(xOpen, xClose))

// Trailing ATR

v1 = abs(xHigh - xClose[1])
v2 = abs(xLow - xClose[1])
v3 = xHigh - xLow

trueRange = max(v1, max(v2, v3))
atr = useHeiken ? rma(trueRange, atrLen) : atr(atrLen)

m = rising(adx, 1) and (adx < adxThresh or not aboveThresh) ? m1 : falling(adx, 1) or (adx > adxThresh and aboveThresh) ? m2 : nz(m[1])
mUp = DIP >= DIN ? m : m2
mDn = DIN >= DIP ? m : m2

src_ = useHeiken ? xClose : src
c = useHeiken ? xClose : close
t = useHeiken ? (xHigh + xLow) / 2 : hl2

up = t - mUp * atr
dn = t + mDn * atr

TUp = max(src_[1], c[1]) > TUp[1] ? max(up, TUp[1]) : up
TDown = min(src_[1], c[1]) < TDown[1] ? min(dn, TDown[1]) : dn

trend = min(src_, min(c, close)) > TDown[1] ? 1 : max(src_, max(c, close)) < TUp[1]? -1 : nz(trend[1], 1)
stop = trend == 1 ? TUp : TDown
trendChange = change(trend)

longCondition = (trendChange > 0)
if (longCondition)
    strategy.entry("long", strategy.long)
shortCondition = (trendChange < 0)
if (shortCondition)
    strategy.entry("short", strategy.short)    
    
// Plot

lineColor = not(trendChange) ? trend > 0 ? #00FF00DD : #FF0000DD : #00000000
shapeColor = trendChange ? trendChange > 0 ? #00FF00F8 : #FF0000F8 : #00000000

plot(stop, color = lineColor, style = line, linewidth = 1, title = "ATR Trend")
plotshape(trendChange ? stop : na, style = shape.circle, size = size.tiny, location = location.absolute, color = shapeColor, title = "Change")

alertcondition(trendChange > 0, title = "ATR-ADX Change Up", message = "ATR-ADX Change Up")
alertcondition(trendChange < 0, title = "ATR-ADX Change Down", message = "ATR-ADX Change Down")

// end