다중 지표 조합 동적 거래 최적화 전략

CCI RSI MFI WMA IFT
생성 날짜: 2024-12-20 16:31:21 마지막으로 수정됨: 2024-12-20 16:31:21
복사: 1 클릭수: 397
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

다중 지표 조합 동적 거래 최적화 전략

개요

이 전략은 여러 기술 지표의 조합을 기반으로 한 거래 시스템으로 CCI, RSI, Random Indicator (RSI), Stochastic (Stochastic) 및 MFI와 같은 네 가지 주요 지표를 통합하여 지수 매끄러운 처리에 결합하여 포괄적인 시장 분석 프레임 워크를 구축합니다. 이 전략은 IFT (Inverse Fisher Transform) 변환을 사용하여 지표 출력을 규율하고 결국 신호 통합을 통해 거래 결정을 내립니다.

전략 원칙

전략의 핵심은 여러 지표의 통합을 통해 더 신뢰할 수 있는 거래 신호를 제공하는 것입니다. 먼저 각 지표에 대한 표준화 처리를 수행하고 WMA를 매끄럽게 하고, IFT 변환을 통해 지표 값을 매핑합니다.[-1,1] 구역. 구체적으로 다음을 포함한다:

  1. 4가지 지표인 CCI, RSI, Stochastic, MFI를 각각 계산하고 통합
  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)