ADXの動的上昇傾向 戦略をフォローする

作者: リン・ハーンチャオチャン,日付: 2023年12月11日 17:18:32
タグ:

img

概要

この戦略は,市場傾向の初期シフトを把握するために,ADX指標のダイナミックな変化を追跡し,適切なトレンドをフォローする.ADXが低水準から急速に上昇すると,エントリーする大きな機会を提供するトレンドが形成されていることを示します.移動平均の助けにより,誤った信号を効果的にフィルタリングすることができます.

戦略の論理

この戦略の核心は,ADX指標の動的変化に基づいてトレンド開発を判断することにある.低 ADXはトレンドの小さな変動を意味する.ADXが低水準から急速に上昇すると,トレンドが形成されていることを示唆する.この戦略は,ADXの急激な上昇を監視することによってトレンドの出現を捉える.

具体的には,入力信号は次の要素で構成されます.

  1. ADX が値を超えると (例: 10)
  2. ADXは急上昇
  3. 価格が単純または指数関数移動平均値を超える

上記のすべての条件が満たされると,上向きトレンドが形成され,ロングになる.価格が移動平均値を下回ると,ポジションを閉じる. 2つの移動平均値は,傾向をより正確に判断するために使用されます.

ストップロスの論理は類似しています ADXが急落するとショートで,価格が移動平均値以上になると閉じる.

利点分析

この戦略は,ADXの急速な上昇を追跡することによって,トレンドの初期展開を把握する.この戦略は,ADXの急上昇を追跡することで,ADXの初期展開を把握する.

さらに,移動平均値は誤った信号を効果的にフィルタリングし,戦略の安定性を高めます.

リスクと最適化分析

最大のリスクは,ADXそのものの遅滞性から生じる.遅滞を軽減するために迅速な上昇を捉えることにもかかわらず,まだ遅延がある.これは急速に逆転するいくつかの市場を逃す原因です.

また,ADX は トレンド を 完璧 に 判断 する こと が でき ませ ん で,時 と 時 に 誤り の 診断 を する こと が 避け られ ます.移動 平均 は 雑音 を フィルタリング し て い ます が,さらに 最適 化 さ れる 必要 が あり ます.

この戦略を最適化するにはまだ大きな余地があり,主にトレンドを把握するADXの精度を向上させる.機械学習のような方法を探検し,ADXの変化に基づいて確率分布を予測するためのトレーニングモデルも利用できます.パラメータチューニング,追加の指標などなどの他の側面もテストできます.

結論

この動的な上昇するADXトレンドフォロー戦略は,急激なADX上昇を特定することによってトレンドシフトを迅速に捕捉し,したがってタイミングでトレンドをフォローする.最大の利点は,早期トレンド開発を効果的に把握する時間における敏捷性です.一方,継続的な最適化とテストを必要とする誤判のリスクは残っています.


/*backtest
start: 2023-12-03 00:00:00
end: 2023-12-10 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/
// © dhilipthegreat

//@version=4
//Rising ADX strategy

strategy(title="Rising ADX strategy", overlay=false)

adxlen = input(14, title="ADX Length", minval=1)
threshold = input(10, title="threshold", minval=5)

hline(threshold, color=color.black, linestyle=hline.style_dashed)

atype = input(2,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA")
malen=input(20, title="Moving average 1 ",minval=1, maxval=50)
avg = atype == 1 ? sma(close,malen) : atype == 2 ? ema(close,malen) : atype == 3 ? wma(close,malen) : atype == 4 ? hma(close,malen) : na

atype2 = input(2,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA")
malen2=input(20, title="Moving average 2",minval=1, maxval=200)
avg2 = atype2 == 1 ? sma(close,malen2) : atype2 == 2 ? ema(close,malen2) : atype2 == 3 ? wma(close,malen2) : atype2 == 4 ? hma(close,malen2) : na

//ADX&DI
dilen = 14
dirmov(len,_high,_low,_tr) =>
	up = change(_high)
	down = -change(_low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(_tr, len)
	
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)

	[plus, minus]

adx(dilen, adxlen,_high,_low,_tr) =>
	[plus, minus] = dirmov(dilen,_high,_low,_tr)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)

[plus, minus] = dirmov(dilen,high,low,tr)
sig = adx(dilen, adxlen,high,low,tr)
prev_sig = adx(dilen, adxlen,high[1],low[1],tr)
plot(sig ? sig : na, color = rising(sig, 1) ? color.lime : falling(sig, 1) ? color.orange : color.purple, title="ADX",linewidth=2)

//////
longCondition=  sig > threshold  and rising(sig, 1) and falling(prev_sig, 1) and close > avg and close > avg2
barcolor(longCondition ? color.yellow: na)
Long_side = input(true, "Long side")
if Long_side
    strategy.entry(id="Long", long=true,  when= longCondition  and strategy.position_size<1)
    exitCondition=  (rising(prev_sig, 1) and falling(sig, 1)) or close < avg and close < avg2
    strategy.close(id="Long",comment="L exit",    qty=strategy.position_size ,   when= exitCondition)   //close all

shortCondition=  sig > threshold  and rising(sig, 1) and falling(prev_sig, 1) and close < avg and close < avg2
barcolor(shortCondition ? color.gray: na)
Short_side = input(true, "Short side")
if Short_side
    strategy.entry(id="Short", long=false,  when= shortCondition  and strategy.position_size<1)
    sell_exitCondition=  (rising(prev_sig, 1) and falling(sig, 1)) or close > avg and close > avg2
    strategy.close(id="Short",comment="S exit",    qty=strategy.position_size ,   when= sell_exitCondition)   //close all

barcolor(strategy.position_size>1 ? color.lime: na)
bgcolor(strategy.position_size>1 ? color.lime: na)

barcolor(strategy.position_size<0 ? color.orange: na)
bgcolor(strategy.position_size<0 ? color.orange: na)

もっと