이동 평균 필터링 전략과 결합된 동적 다중 기간 추세 예측

EMA SMA ML AI PREDICTION Trend FILTER BACKTEST
생성 날짜: 2025-02-20 14:03:44 마지막으로 수정됨: 2025-02-27 17:38:36
복사: 1 클릭수: 345
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

이동 평균 필터링 전략과 결합된 동적 다중 기간 추세 예측 이동 평균 필터링 전략과 결합된 동적 다중 기간 추세 예측

개요

이 전략은 전통적인 기술 분석과 현대 인공지능 방법을 결합한 트렌드 추적 시스템이다. 그것은 주로 지수 이동 평균 (EMA) 과 간단한 이동 평균 (SMA) 을 트렌드 필터로 사용하며, 입시 시기를 최적화하기 위해 예측 모델을 도입한다. 전략은 특히 일선 레벨에 최적화되어 중·장기 시장 트렌드를 포착하기 위해 고안되었다.

전략 원칙

전략의 핵심 논리는 세 가지 주요 구성 요소로 구성됩니다.

  1. 트렌드 판단 시스템 - 200주기의 EMA와 SMA를 주요 트렌드 필터로 사용하여 가격과 평균선의 위치 관계를 통해 현재 트렌드 방향을 판단합니다.
  2. 예측 모듈 - 확장 가능한 예측 컴포넌트를 사용하여, 현재는 모형 예측을 사용하고, 이후에는 기계 학습 모델로 대체할 수 있습니다.
  3. 포지션 관리 - 포지션 시간 및 위험을 제어하기 위해 고정된 4 K 라인 포지션 주기를 설정합니다.

거래 신호의 생성에는 트렌드 방향과 예측 신호의 일관성을 동시에 충족해야 합니다.

  • 다중 신호: 가격은 EMA와 SMA 위에 있으며, 예측 값은 긍정적이다.
  • 빈 머리 신호: 가격은 EMA와 SMA 아래로, 예측 값은 마이너스

전략적 이점

  1. 명확한 구조 - 전략 논리는 간단하고 직관적이며, 이해하기 쉽고 유지하기 쉽습니다.
  2. 위험 조절 - 고정 포지션 주기와 이중 평균 필터링을 통해 위험을 효과적으로 제어
  3. 확장성 - 예측 모듈은 필요에 따라 다른 예측 모델에 액세스 할 수있는 유연한 설계
  4. 적응성 - 다양한 시장 환경에 적응할 수 있도록 변수를 조정할 수 있다
  5. 거래 주파수 중도 - 일선 수준의 거래가 거래 비용과 심리적 스트레스를 줄여줍니다.

전략적 위험

  1. 트렌드 리버스 리스크 - 트렌드 리버스 포인트에서 연속적인 손실이 발생할 수 있습니다.
  2. 매개 변수 민감성 - 평균 라인 주기와 포지션 주기의 선택이 전략 성과에 큰 영향을 미칩니다.
  3. 모델 의존성 - 예측 모듈의 정확성은 전략 효과에 직접적인 영향을 미칩니다.
  4. 미끄러지점 영향 - 일선 레벨의 동작은 더 큰 미끄러지점을 직면할 수 있다
  5. 시장 환경 의존성 - 불안정한 시장에서 부진할 수 있습니다.

전략 최적화 방향

  1. 예측 모델 업그레이드 - 기존의 무작위 예측을 대체하여 기계 학습 모델을 도입합니다.
  2. 역동적인 포지션 주기 - 시장의 변동에 따라 역동적으로 조정된 포지션 기간
  3. 손해 차단 최적화 - 동적 손해 차단 메커니즘을 추가하여 위험 제어 능력을 향상시킵니다.
  4. 포지션 관리 - 변동율 기반의 포지션 관리 시스템을 도입
  5. 다차원 필터링 - 거래량, 변동률 등의 보조 지표

요약하다

이 전략은 전통적인 기술 분석과 현대적인 예측 방법을 결합하여 안정적인 트렌드 추적 시스템을 구축한다. 주요 장점은 논리 명확성, 위험 제어 가능성과 강력한 확장성이다. 전략 최적화, 특히 예측 모델과 위험 제어의 개선으로 전략의 안정성과 수익성을 더욱 향상시킬 것으로 기대된다. 전략은 중·장기적으로 안정적인 수익을 추구하는 투자자에게 적합하다.

전략 소스 코드
/*backtest
start: 2024-02-21 00:00:00
end: 2025-02-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("My Strategy", overlay=true)

// Parameters (adjust as needed)
neighborsCount = 8
maxBarsBack = 2000
featureCount = 5
useDynamicExits = true
useEmaFilter = true
emaPeriod = 200
useSmaFilter = true
smaPeriod = 200

// Moving Average Calculations
ema = ta.ema(close, emaPeriod)
sma = ta.sma(close, smaPeriod)

// Trend Conditions
isEmaUptrend = close > ema
isEmaDowntrend = close < ema
isSmaUptrend = close > sma
isSmaDowntrend = close < sma

// Model Prediction (Replace with your real model)
// Here a simulation is used, replace it with real predictions
prediction = math.random() * 2 - 1 // Random value between -1 and 1

// Entry Signals
isNewBuySignal = prediction > 0 and isEmaUptrend and isSmaUptrend
isNewSellSignal = prediction < 0 and isEmaDowntrend and isSmaDowntrend

// Exit Signals
var int barsHeld = 0
var bool in_position = false
var int entry_bar = 0

if isNewBuySignal and not in_position
    in_position := true
    entry_bar := bar_index
    barsHeld := 1
else if isNewSellSignal and not in_position
    in_position := true
    entry_bar := bar_index
    barsHeld := 1
else if in_position
    barsHeld := barsHeld + 1
    if barsHeld == 4
        in_position := false

endLongTradeStrict = barsHeld == 4 and isNewBuySignal[1]
endShortTradeStrict = barsHeld == 4 and isNewSellSignal[1]

// Backtest Logic
var float totalProfit = 0
var float entryPrice = na
var int tradeDirection = 0

if isNewBuySignal and tradeDirection <= 0
    entryPrice := close
    tradeDirection := 1
    strategy.entry("Long", strategy.long)

if isNewSellSignal and tradeDirection >= 0
    entryPrice := close
    tradeDirection := -1
    strategy.entry("Short", strategy.short)

if (endLongTradeStrict and tradeDirection == 1) or (endShortTradeStrict and tradeDirection == -1)
    exitPrice = close
    profit = (exitPrice - entryPrice) / entryPrice
    if tradeDirection == -1
        profit := (entryPrice - exitPrice) / entryPrice

    totalProfit := totalProfit + profit
    tradeDirection := 0
    strategy.close_all()

plot(close, color=color.blue)
plot(ema, color=color.orange)
plot(sma, color=color.purple)