複数の指標を組み合わせた動的取引最適化戦略

CCI RSI MFI WMA IFT
作成日: 2024-12-20 16:31:21 最終変更日: 2024-12-20 16:31:21
コピー: 1 クリック数: 397
1
フォロー
1617
フォロワー

複数の指標を組み合わせた動的取引最適化戦略

概要

この戦略は,複数の技術指標の組み合わせに基づいた取引システムであり,CCI,RSI,ランダムな指標 (((Stochastic) とMFIなどの4つの主要な指標を統合し,指数平滑処理と組み合わせて,総合的な市場分析の枠組みを構築しています.

戦略原則

戦略の核心は,複数の指標を融合させることで,より信頼性の高い取引シグナルを提供することです.まずは,各指標の標準化処理とWMAの平滑化が行われ,IFT変換によって指標の値をマッピングします.[-1,1] 区 〇 具体的には:

  1. CCI,RSI,ストキャスティック,MFIの4つの指標をそれぞれ計算し,統合する
  2. WMAを使用して指標値を滑らかに処理する
  3. IFT変換で指標値を統一区間に変換する
  4. 4つの変換後の指標の平均値を最終信号として計算する
  5. 信号線が -0.5 を突破すると多行信号が発生し,0.5 を突破すると空白信号が発生
  6. 0.5%のストップと1%のストップを設定してリスクをコントロールする

戦略的優位性

  1. 多指標融合は,単一の指標の限界を軽減し,より包括的な市場視点を提供します.
  2. IFT変換は,指標出力の一致性を確保し,信号合成を容易にします.
  3. WMAのスムーズ処理は偽信号を効果的に低減する
  4. 合理的なストップ・ストップを設定し,リスクをコントロールしながら利益の余地を確保します.
  5. 信号生成機構の明晰さ,调度と最適化に便利

戦略リスク

  1. 多指数は,急激な波動の市場の中で遅れをとる可能性があります.
  2. 固定ストップ・ストップパラメータは,すべての市場環境に対応しない可能性があります.
  3. WMA平滑は信号の遅延を引き起こす可能性がある
  4. 指標のパラメータは,異なる市場に対して最適化する必要があります. 推奨: 止損停止パラメータを動的に調整し,波動率指標を導入し,平滑パラメータを最適化

戦略最適化の方向性

  1. 市場変動の動向に合わせて適応的なストップ・ストップメカニズムを導入する
  2. 市場環境のフィルタリングメカニズムを追加し,異なるトレンドの強度に応じて異なるパラメータを使用します.
  3. シグナル合成の最適化方法,加重平均の代替単純な平均を考慮する
  4. 取引量加重と変動率調整メカニズムの導入
  5. 開発指標パラメータの自動最適化システム

要約する

この戦略は,多指標融合と信号最適化により,比較的完全な取引システムを構築している.この戦略の優位性は,信号の信頼性とリスク制御の整合性にあるが,現実の応用では,市場の特徴に応じてパラメータの最適化が必要である.提案された最適化方向によって,戦略は,異なる市場環境でより良いパフォーマンスを期待している.

ストラテジーソースコード
/*backtest
start: 2024-11-19 00:00:00
end: 2024-12-18 08:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('wombocombo', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// IFTCOMBO Hesaplamaları
ccilength = input.int(5, 'CCI Length')
wmalength = input.int(9, 'Smoothing Length')
rsilength = input.int(5, 'RSI Length')
stochlength = input.int(5, 'STOCH Length')
mfilength = input.int(5, 'MFI Length')

// CCI
v11 = 0.1 * (ta.cci(close, ccilength) / 4)
v21 = ta.wma(v11, wmalength)
INV1 = (math.exp(2 * v21) - 1) / (math.exp(2 * v21) + 1)

// RSI
v12 = 0.1 * (ta.rsi(close, rsilength) - 50)
v22 = ta.wma(v12, wmalength)
INV2 = (math.exp(2 * v22) - 1) / (math.exp(2 * v22) + 1)

// Stochastic
v1 = 0.1 * (ta.stoch(close, high, low, stochlength) - 50)
v2 = ta.wma(v1, wmalength)
INVLine = (math.exp(2 * v2) - 1) / (math.exp(2 * v2) + 1)

// MFI
source = hlc3
up = math.sum(volume * (ta.change(source) <= 0 ? 0 : source), mfilength)
lo = math.sum(volume * (ta.change(source) >= 0 ? 0 : source), mfilength)
mfi = 100.0 - 100.0 / (1.0 + up / lo)
v13 = 0.1 * (mfi - 50)
v23 = ta.wma(v13, wmalength)
INV3 = (math.exp(2 * v23) - 1) / (math.exp(2 * v23) + 1)

// Ortalama IFTCOMBO değeri
AVINV = (INV1 + INV2 + INVLine + INV3) / 4

// Sinyal çizgileri
hline(0.5, color=color.red, linestyle=hline.style_dashed)
hline(-0.5, color=color.green, linestyle=hline.style_dashed)

// IFTCOMBO çizgisi
plot(AVINV, color=color.red, linewidth=2, title='IFTCOMBO')

// Long Trading Sinyalleri
longCondition = ta.crossover(AVINV, -0.5) 
longCloseCondition = ta.crossunder(AVINV, 0.5) 

// Short Trading Sinyalleri
shortCondition = ta.crossunder(AVINV, 0.5) 
shortCloseCondition = ta.crossover(AVINV, -0.5) 

// Stop-loss seviyesi (%0.5 kayıp)
stopLoss = strategy.position_avg_price * (1 - 0.005) // Long için
takeProfit = strategy.position_avg_price * (1 + 0.01) // Long için


// Long Strateji Kuralları
if longCondition
    strategy.entry('Long', strategy.long)
    strategy.exit('Long Exit', 'Long', stop=stopLoss, limit=takeProfit) // Stop-loss eklendi


if longCloseCondition
    strategy.close('Long')

// Stop-loss seviyesi (%0.5 kayıp)
stopLossShort = strategy.position_avg_price * (1 + 0.005) // Short için
takeProfitShort = strategy.position_avg_price * (1 - 0.01) // Short için

// Short Strateji Kuralları
if shortCondition
    strategy.entry('Short', strategy.short)
    strategy.exit('Short Exit', 'Short', stop=stopLossShort, limit=takeProfitShort) // Stop-loss eklendi


if shortCloseCondition
    strategy.close('Short')

// Sinyal noktalarını plotlama
plotshape(longCondition, title='Long Signal', location=location.belowbar, color=color.purple, size=size.small)
plotshape(shortCondition, title='Short Signal', location=location.abovebar, color=color.yellow, size=size.small)