
この戦略は,相対的に強い弱指数 ((RSI) と平均方向性指数 ((ADX) を組み合わせた二方向の取引システムである.戦略は,8サイクルRSIによって超買超売り信号を識別し,20サイクルADXフィルタリングトレンドの強さと合わせて,強いトレンドの反転の機会を捕捉する.システムは,手動でADXを計算する方法を採用し,方向性運動 ((DM) と実際の波幅 ((TR) の平滑処理によって,トレンドの強さを正確に測定する.戦略は10%のポジション管理を設定し,多引と空引の二方向操作をサポートし,明らかなトレンド特性を有する取引品に適用する.
戦略の核心的な論理は,2つの技術指標の協同作用に基づいています. まず,8周期RSIを主要取引シグナルジェネレーターとして使用し,RSIが70を突破するときに多行シグナルを生成し,30を突破するときに空白シグナルを生成します.この逆操作の論理は,極値回帰の市場特性に基づいています.
次に,戦略は,トレンド強度フィルターとしてのADXを導入する.ADXの計算過程は,上昇運動 ((upMove) と下降運動 ((downMove) を計算し,正向運動 ((+DM) と負向運動 ((-DM) を決定し,RMAの平滑処理によって正向指数 ((+DI) と負向指数 ((-DI) を計算し,最終的にDI差値の標準化によってADX値を計算する.ADXが14より大きいときのみ,市場が明らかなトレンド状態にあることを示すとき,RSI信号は有効とみなされます.
退出メカニズムは,逆のRSI極値を平仓の信号として使用します.多頭持仓は,RSIが30を下回ったときに平仓,空頭持仓は,RSIが70を下回ったときに平仓.この設計は,トレンドが逆転する可能性のあるときに,タイムリーに退出することを保証します.
ダブルフィルタリングRSIは正確な入場時間を提供し,ADXはトレンドが明確であるときにのみ取引することを保証し,波動的な市場における偽信号を効果的に軽減します.
フレキシブルな2方向取引戦略は,上昇と下降のトレンドを同時に捉え,資金の利用効率を向上させ,異なる市場環境で利益を得る機会を与えます.
パラメータの最適化は合理的:8周期RSIは,従来の14周期と比較して,より敏感で,市場の変化をより早く捉えることができます.20周期ADXは,安定したトレンド判断を提供します.14周期ADXの値は,市場が検証した有効レベルです.
リスク管理が厳格です:10%のポジション設定と明確な止損退出ルールは,単一取引のリスクを効果的に制御します.
計算の精度と信頼性: ADX計算を手動で実行し,内蔵関数のバージョンの違いを回避し,異なるプラットフォームでポリシーの一致性を確保する.
逆転取引のリスク強いトレンドでは,RSIは長期にわたって超買いまたは超売り状態で,早期入場が大きな浮動を伴う可能性があります. 価格が重要なサポートレジスタンスを破った場合,トレンドの強さの二次確認を加えることをお勧めします.
遅滞の問題:ADXは,トレンド追跡指標として固有の遅れがあるため,トレンドが確認されるのは,トレンドの終わりである可能性がある.価格行動または取引量指標を組み合わせて補助判断を行うことを考慮することができる.
市場の動揺:ADXは部分的な振動をフィルターしていますが,ADX値が値に近いところでは,頻繁な出入信号が生じることがあります. ADXの緩衝区間を設定することが推奨されています. 入場はADX>15を要求し,保有期間にはADX>13を許可します.
極端な市場リスク: 急速な一方的な取引では,反転操作は大きな損失に直面する可能性があります. 最大損失制限または時間停止メカニズムを増加させることをお勧めします.
動態参数調整:市場の変動率の動向に応じてRSIサイクルとADX値の調整.高い変動期にはより長いサイクルを使用し,騒音を軽減し,低い変動期にはより短いサイクルを使用し,感度を増やす.
複数時間枠確認: 現在のタイムフレームシグナルに基づいて,より高いタイムフレームのトレンド確認を追加し,取引方向がメイントレンドと一致していることを確認します.
ポジション管理の最適化:ADXの強度に応じて動的にポジションを調整し,トレンドが強くなるほどポジションが大きくなる.また,トレンドが確認された後に徐々にポジションを増やすピラミッド加仓戦略を考慮することもできます.
ストップ・ロスト・最適化: RSI反転信号のストップに加えて,ATRベースの追跡ストップを追加し,利益を保護しながら十分な振動空間を与えます.
シグナルフィルタリング強化:取引量確認,価格形状識別などの補助条件を増やし,信号の質を向上させる.例えば,突破時に放大を伴って要求するか,または重要なサポート抵抗点の近くで取引を実行する.
RSI-ADX双方向動量フィルター取引戦略は,動量指標とトレンド指標の優位性を組み合わせて,リスクをコントロールした前提で市場機会を捉えるための巧妙に設計された量化取引システムである.戦略の核心的な革新は,トレンドの強さの過動量シグナルを使用して,単一の指標の限界を回避することである.反転取引の固有のリスクがあるにもかかわらず,合理的なパラメータ設定と厳格なリスク制御により,戦略は良い実用性を示している.将来の最適化は,信号の質を向上させ,リスク収益率を改善することに重点を置くべきである.
/*backtest
start: 2024-08-13 00:00:00
end: 2025-08-11 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":5000000}]
*/
//@version=6
strategy("RSI & ADX Long/Short Strategy v6 (Manual ADX)", overlay=true,
margin_long=100, margin_short=100,
default_qty_type=strategy.percent_of_equity, default_qty_value=10)
//--------------------
// Parameters
//--------------------
rsiLength = 8
adxLength = 20
adxThreshold = 14.0
//--------------------
// RSI
//--------------------
rsiVal = ta.rsi(close, rsiLength)
//--------------------
// Manual ADX Calculation
//--------------------
upMove = high - high[1]
downMove = low[1] - low
plusDM = (upMove > downMove and upMove > 0) ? upMove : 0
minusDM = (downMove > upMove and downMove > 0) ? downMove : 0
tr = ta.rma(ta.tr(true), adxLength)
plusDI = 100 * ta.rma(plusDM, adxLength) / tr
minusDI = 100 * ta.rma(minusDM, adxLength) / tr
dx = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
adxVal = ta.rma(dx, adxLength) // <-- Final ADX value
//--------------------
// Entry/Exit Conditions
//--------------------
longEntry = ta.crossover(rsiVal, 70) and adxVal > adxThreshold
shortEntry = ta.crossunder(rsiVal, 30) and adxVal > adxThreshold
longExit = ta.crossunder(rsiVal, 30)
shortExit = ta.crossover(rsiVal, 70)
//--------------------
// Orders
//--------------------
if longEntry
strategy.entry("Long", strategy.long)
if longExit
strategy.close("Long")
if shortEntry
strategy.entry("Short", strategy.short)
if shortExit
strategy.close("Short")
//--------------------
// Plots
//--------------------
plot(rsiVal, title="RSI(8)", color=color.new(color.blue, 0))
hline(70, 'RSI Overbought', color=color.red)
hline(30, 'RSI Oversold', color=color.green)
plot(adxVal, title="ADX(20)", color=color.new(color.orange, 0))
hline(adxThreshold, 'ADX Threshold', color=color.gray, linestyle=hline.style_dotted)