ADX、RSI モメント インディケーター 戦略

作者: リン・ハーンチャオチャン開催日:2023年12月11日 16:06:30
タグ:

img

概要

この戦略は,市場動向と過買い/過売状況を決定するために,動力指標 ADX,RSI,ボリンジャー帯を使用し,低価格で購入し高価格で販売するための自動取引を実施します.

戦略の原則

  1. ADX指標はトレンドを決定します.ADXが32を超えると,トレンド市場を示します.

  2. RSIインジケーターは,過剰購入/過剰販売レベルを決定する.RSIが30を超えると,過剰販売市場をシグナルする.RSIが70を下回ると,過剰購入市場をシグナルする.

  3. ボリンジャー帯は統合とブレイクを決定する. 閉じる価格が上部帯を超えると,統合の終わりと上部ブレイクをシグナルします. 閉じる価格が下部帯を下回ると,統合の終わりと下部ブレイクをシグナルします.

上記の指標に基づいて,取引戦略は次のように定義されます.

購入条件:

  1. ADX>32 傾向
  2. RSIは30を超え 超売り
  3. ダウントレンド konsolidiation の終わり

販売条件:

  1. ADX>32 傾向
  2. RSIは70を下回り,過買い
  3. 閉じる価格 ボリンジャーバンド上位,上昇傾向の結束

利点分析

この戦略は,複数の指標を使用して市場状況を決定し,単一の指標に依存するときにエラーの可能性を回避する.トレンドと過買い/過売れ状態を決定することにより,市場のターニングポイントを効果的に把握し,低価格の購入高値を達成することができます.

この戦略は,トレンドインジケーターのみを使用すると比較して,短期間の機会をより迅速に把握することができます. オシレーターのみを使用すると比較して,この戦略はトレンド方向をよりよく把握することができます. したがって,トレンドを追跡する利点が保ち,同時に平均逆転取引の柔軟性があります. これは潜在的に効率的な定量戦略です.

リスク分析

この戦略の主なリスクは以下のとおりです.

  1. インディケーターからの誤った信号のリスクです.市場が極端な出来事を経験すると,インディケーターが失敗する可能性があります.

  2. ストップが狭すぎるリスク ストップが狭すぎる場合,短期的な市場の変動がポジションを損なう可能性があります.

  3. 過剰調整のリスク:指標パラメータを単なる過去データに合わせれば,安定性は疑わしいものであり,変化する市場動態に適応できない可能性があります.

リスク管理対策

  1. 戦略を一時停止し,誤った信号による損失を回避するために,異常な市場状況下で手動的に介入します.

  2. 合理的な停止距離を設定し,移動平均値と組み合わせて停止レベルを決定し,早速停止を避ける.

  3. パラメーターチューニングモジュールを導入し 安定性を確保するために ウォーク・フォワード・アナリストを使用して パラメータを動的に最適化します

オプティマイゼーションの方向性

この戦略の改善の主な側面は以下の通りである.

  1. 各市場に合わせた機械学習アルゴリズムを使用して指標パラメータを最適化します

  2. 機能工学により,より多くの技術指標と訓練モデルを導入し,SVMのような信号精度を向上させる.

  3. 安定性を高めるため,価格チャネル,サポート/レジスタンスなどを使用して,各市場の特徴に基づいたブレークアウト戦略を組み込む.

  4. 利潤を最大化しリスクを効果的に制御するために,トライリングストップ,ムービングストップなどを導入することで,利益とストップ損失のメカニズムを最適化します.

結論

この中期量的な取引戦略は,ADX,RSI,ボリンジャーバンドなどの複数の技術指標を利用し,重要な構造変化が確認されたときに市場状況を決定し,取引を行う.論理は明確で解釈可能で,単一の指標への依存を大幅に削減する.一方,誤った信号,過度に緊密なストップ,パラメータオーバーフィッティングなどのリスクは,リスク管理とモデル最適化を通じて,安定性と効率性を高める必要があります.


/*backtest
start: 2023-11-10 00:00:00
end: 2023-12-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("DAX Shooter 5M Strategy", overlay=true)

//Creo ADX
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
th = input(title="threshold", type=input.integer, defval=20)
dirmov(len) =>
    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) =>
    [plus, minus] = dirmov(dilen)
    sum = plus + minus
    adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
    adx


[plus, minus] = dirmov(dilen)
sig = adx(dilen, adxlen)

//Creo RSI

src = close
len = input(7, minval=1, title="Periodo RSI")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down)
bandainf = input(30, title="Livello Ipervenduto")
bandasup = input(70, title="Livello Ipercomprato")


//Creo Bande di Bollinger

source = close
length = input(50, minval=1, title="Periodo BB")
mult = input(2.0, minval=0.001, maxval=50, title="Dev BB")

basis = sma(source, length)
dev = mult * stdev(source, length)

upper = basis + dev
lower = basis - dev

plot(basis, color=color.white)
p1 = plot(upper, color=color.aqua)
p2 = plot(lower, color=color.aqua)
fill(p1, p2)

//Stabilisco regole di ingresso

if crossover(rsi, bandainf) and adx(dilen, adxlen) > 32 and low < lower
    strategy.entry("COMPRA", strategy.long, limit=upper, oca_name="DaxShooter", comment="COMPRA")
else
    //strategy.exit("exit", "COMPRA", loss = 90) 
    strategy.cancel(id="COMPRA")

if crossunder(rsi, bandasup) and adx(dilen, adxlen) > 32 and high > upper
    strategy.entry("VENDI", strategy.short, limit=lower, oca_name="DaxShooter",comment="VENDI")
else
    //strategy.exit("exit", "VENDI", loss = 90)
    strategy.cancel(id="VENDI")

//Imposto gli alert
buy= crossover(rsi, bandainf) and adx(dilen, adxlen) > 32 and low < lower
sell= crossunder(rsi, bandasup) and adx(dilen, adxlen) > 32 and high > upper
alertcondition(buy, title='Segnale Acquisto', message='Compra DAX')
alertcondition(sell, title='Segnale Vendita', message='Vendi DAX')

//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)


もっと