資源の読み込みに... 荷物...

RSIモメンタムとADXトレンド強度に基づく資本管理システム

作者: リン・ハーンチャオチャン開催日:2024年12月20日 14:24:34
タグ:RSIADXATRエイマTP

img

概要

この戦略は,トレンドフォローとスウィングトレードを組み合わせたハイブリッドシステムで,複数の技術指標のスクリーニングと厳格な資本管理を通じて安定した取引を達成する.この戦略は,収益をロックするために段階的な利益の取扱アプローチを採用し,最大引き下げ制御を設定し,リスクを管理しながら収益を確保する.このシステムは,取引効果を確保するためにボリューム,ATR,EMAの複数のフィルターと組み合わせて,RSIモメントインジケーターとADXトレンド強度インジケーターを主な取引信号トリガーとして使用する.

戦略原則

戦略の基本論理には,次の主要な要素が含まれます.

  1. 入場条件は同時に満たさなければならない:取引量は1M以上,ADXは25以上で明確な傾向を示し,RSIは60以上で強い勢いを示し,ATRは2以上で十分な変動範囲を確保し,価格は200日移動平均以上で上昇傾向を維持する.
  2. ステップアップのメリットは,最初のメリットは15%で50%のポジションを閉鎖し,第二のメリットは30%で残りのポジションを閉鎖する.このデザインは,部分的な利益を早期にロックし,大きなトレンドを見逃さない.
  3. ストップ・ロスのコントロール: 15%のストップ・ロスのポジションは資本を保護し,RSIが50を下回り,価格が200MAを下回った場合も終了します.
  4. 運用管理: 戦略資本のリアルタイム追跡,システムリスク管理の起動,利用率が30%を超えるとすべてのポジションのクリア

戦略 の 利点

  1. 複数の技術指標のクロスバリダーションは,取引信号の信頼性を向上させる
  2. ステップアップのメリット・テイク・デザインは,短期利益と主要なトレンドを把握するバランス
  3. 個々のストックストップ損失とシステムリスク管理を含む完全なリスク管理システム
  4. 厳格な取引条件は,誤った信号を効果的にフィルタリングします
  5. 明確な戦略論理,市場状況に基づいてパラメータを簡単に調整する

戦略リスク

  1. 複数の指標をフィルタリングすることで,いくつかの取引機会を逃す可能性があります.
  2. 振動市場では頻繁にストップ・ロスが発生する可能性があります.
  3. 固定パーセントのストップ・ロストとテイク・プロフィートの設定は,すべての市場環境に適合しない可能性があります.
  4. 戦略は技術指標に依存し,根本的な突然の出来事に対して十分な反応がない可能性があります.
  5. 取引量要件を満たすために,より大きな資本規模が必要

戦略の最適化方向

  1. 市場変動に基づいて動的に調整する適応性のあるストップ・ロスト・テイク・プロフィート・メカニズムを導入する
  2. 異なる市場条件下で異なるパラメータ設定を使用して,市場環境判断モジュールを追加
  3. ADX 計算方法を最適化し,適応期間の使用を検討する
  4. 取引コストの考慮を含めて,ポジション管理システムを最適化
  5. 機械学習に基づく信号フィルタリングメカニズムを開発

概要

この戦略は,複数の技術指標と厳格な資本管理を通じて安定した取引を達成する包括的な取引システムである.この戦略の主な利点は,完全なリスク管理システムと段階的な利益のメカニズムにあるが,実用的な適用における市場状況に基づいて適時なパラメータ調整に注意を払う必要がある.この戦略のさらなる最適化空間は主にパラメータダイナミック適応と信号フィルタリングメカニズム改善にあります.


/*backtest
start: 2023-12-20 00:00:00
end: 2024-12-18 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Swing Strategy (<30% DD)", shorttitle="SwingStratDD", overlay=true)

//-----------------------------------------------------
// Example Indicators and Logic
//-----------------------------------------------------
emaLen   = input.int(200, "EMA Length", minval=1)
emaValue = ta.ema(close, emaLen)

plot(emaValue, color=color.yellow, linewidth=2, title="EMA 200")


//-----------------------------------------------------
// User Inputs
//-----------------------------------------------------
adxLen           = input.int(14,  "ADX Length",      minval=1)
rsiLen           = input.int(14,  "RSI Length",      minval=1)
atrLen           = input.int(14,  "ATR Length",      minval=1)

rsiBuyThresh     = input.float(60, "RSI Buy Threshold",     minval=1, maxval=100)
adxThresh        = input.float(25, "ADX Threshold (Trend)", minval=1, maxval=100)
minVolume        = input.float(1e6,"Minimum Volume",         minval=1)
minATR           = input.float(2,  "Minimum ATR(14)",        minval=0.1, step=0.1)

stopLossPerc     = input.float(15, "Stop-Loss %",            minval=0.1, step=0.1)
// We’ll do two partial take-profit levels to aim for consistent cashflow:
takeProfit1Perc  = input.float(15, "Take-Profit1 %",         minval=0.1, step=0.1)
takeProfit2Perc  = input.float(30, "Take-Profit2 %",         minval=0.1, step=0.1)

ddLimit          = input.float(30, "Max Drawdown %",         minval=0.1, step=0.1)

//-----------------------------------------------------
// Indicators
//-----------------------------------------------------

rsiValue = ta.rsi(close, rsiLen)
atrValue = ta.atr(atrLen)

//--- Fully Manual ADX Calculation ---
upMove      = high - high[1]
downMove    = low[1] - low
plusDM      = (upMove > downMove and upMove > 0) ? upMove : 0.0
minusDM     = (downMove > upMove and downMove > 0) ? downMove : 0.0
smPlusDM    = ta.rma(plusDM, adxLen)
smMinusDM   = ta.rma(minusDM, adxLen)
smTR        = ta.rma(ta.tr, adxLen)
plusDI      = (smPlusDM / smTR) * 100
minusDI     = (smMinusDM / smTR) * 100
dx          = math.abs(plusDI - minusDI) / (plusDI + minusDI) * 100
adxValue    = ta.rma(dx, adxLen)

//-----------------------------------------------------
// Screener-Like Conditions (Technical Only)
//-----------------------------------------------------
volumeCondition   = volume > minVolume
adxCondition      = adxValue > adxThresh
rsiCondition      = rsiValue > rsiBuyThresh
atrCondition      = atrValue > minATR
aboveEmaCondition = close > emaValue

longCondition = volumeCondition and adxCondition and rsiCondition and atrCondition and aboveEmaCondition

//-----------------------------------------------------
// Strategy Entry / Exit Logic
//-----------------------------------------------------
var bool inTrade = false

// Entry
if longCondition and not inTrade
    strategy.entry("Long", strategy.long)

// Basic Exit Condition: RSI < 50 or Price < EMA
exitCondition = (rsiValue < 50) or (close < emaValue)
if inTrade and exitCondition
    strategy.close("Long")

// Update inTrade status
inTrade := strategy.position_size > 0

//-----------------------------------------------------
// Multi-Level Stop-Loss & Partial Profits
//-----------------------------------------------------
if inTrade
    float entryPrice = strategy.position_avg_price

    // Stop-Loss
    float stopPrice     = entryPrice * (1 - stopLossPerc / 100)

    // Two partial take-profit levels
    float tp1Price      = entryPrice * (1 + takeProfit1Perc / 100)
    float tp2Price      = entryPrice * (1 + takeProfit2Perc / 100)

    // Example approach: exit half at TP1, half at TP2
    strategy.exit("TP1/SL",     from_entry="Long", stop=stopPrice,    limit=tp1Price, qty_percent=50)
    strategy.exit("TP2",        from_entry="Long", limit=tp2Price,    qty_percent=50)

//-----------------------------------------------------
// Dynamic Drawdown Handling
//-----------------------------------------------------
var float peakEquity = strategy.equity
peakEquity := math.max(peakEquity, strategy.equity)

currentDrawdownPerc = (peakEquity - strategy.equity) / peakEquity * 100
if currentDrawdownPerc > ddLimit
    strategy.close_all("Max Drawdown Exceeded")

//-----------------------------------------------------
// Plotting
//-----------------------------------------------------
plot(emaValue, title="EMA 200", color=color.yellow, linewidth=2)
plotchar(rsiValue, title="RSI", char='●', location=location.bottom, color=color.new(color.teal, 50))
plot(adxValue, title="Manual ADX", color=color.orange)


関連性

もっと