이중 이동 평균 동적 추세 추적 및 지능형 위험 제어 전략

SMA TP SL ATR ROC
생성 날짜: 2024-11-29 11:06:38 마지막으로 수정됨: 2024-11-29 11:06:38
복사: 1 클릭수: 417
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

이중 이동 평균 동적 추세 추적 및 지능형 위험 제어 전략

개요

이 전략은 양평선 기반의 지능형 트렌드 추적 시스템으로, 고위점과 낮은 점의 이동 평균과 기울기 지표를 계산하여 시장의 트렌드를 식별하고, 동적 스톱 스톱 손실 메커니즘과 결합하여 위험 관리를 수행합니다. 전략의 핵심은 기울기 하락을 통해 가짜 신호를 필터링하고, 트레일링 스톱 동적 추적 방식을 사용하여 수익을 잠금하는 것입니다.

전략 원칙

전략은 쌍평균선 시스템을 핵심 거래 논리로 삼고 있으며, 각각 최고 가격과 최저 가격의 순서로 이동 평균을 계산한다. 가격이 상향평균선을 뚫고 평균선 경사가 눈에 띄게 올라가면, 시스템은 여러 신호를 낸다. 가격이 상향평균선을 넘어서는 다음 평균선 경사가 눈에 띄게 내려가면, 시스템은 공백 신호를 낸다. 불안한 시장에서 자주 거래되는 것을 피하기 위해, 전략은 경사치 절감 장치를 도입했다. 경사치 경사가 설정된 절감값을 초과할 때만 트렌드의 유효성을 확인한다. 위험 측면에서, 전략은 동적 스톱포드 메커니즘을 설계했으며, 초기에는 상대적으로 급진적인 스톱포드를 설정했으며, 동시에 스톱포드 보호를 사용하여 얻은 이익을 추적했다.

전략적 이점

  1. 트렌드 인식 정확도: 이중 평균선과 기울기 절댓값의 조합을 통해 가로판 진동에서 가짜 신호를 효과적으로 필터링 할 수 있습니다.
  2. 리스크 제어: 동적 스톱 손실 메커니즘은 가격 변화에 따라 자동으로 조정되어 수익을 보호하고 트렌드에 충분한 공간을 제공합니다.
  3. 매개 변수 유연성: 전략의 핵심 매개 변수인 평균선 주기, 스톱로스 비율, 마이너스 마이너스 등은 시장 특성에 따라 유연하게 조정할 수 있습니다.
  4. 논리적으로 명확하고 간단하다: 전략적 논리는 직관적이고, 유지 및 최적화하기 쉽습니다.
  5. 적응력: 다른 시간 주기 및 거래 품종에 적용할 수 있습니다.

전략적 위험

  1. 트렌드 역전 위험: 트렌드가 갑자기 역전될 경우, 트레일링 스톱은 모든 수익을 적시에 고정하지 못할 수 있습니다.
  2. 매개 변수 민감성: 전략의 성능은 매개 변수 설정에 민감하며, 다른 시장 환경에는 다른 매개 변수 조합이 필요할 수 있다
  3. 흔들림 시장의 성능: 기울기 필터링이 있지만, 격렬한 흔들림 시장에서 잘못된 신호가 발생할 수 있습니다.
  4. 슬라이드 포인트 영향: 급격한 변동 기간 동안 실제 거래 가격은 신호 가격과 큰 오차가있을 수 있습니다.

전략 최적화 방향

  1. 변동율 자조 메커니즘을 도입: ATR 동력에 따라 기울기 절단값과 중지 거리를 조정하는 것이 고려될 수 있습니다.
  2. 시장 환경 필터를 추가: 트렌드 강도 지표를 추가하여 다른 시장 환경에서 다른 파라미터 조합을 사용합니다.
  3. 정지 손실 메커니즘을 최적화하십시오: 다단계 정지 목표를 설계하여 수익의 일부를 단계적으로 고정 할 수 있습니다.
  4. 거래량 분석을 추가: 트렌드를 확인하는 거래량 데이터 통합의 효과
  5. 시간 필터 도입: 시장의 변동성이 높은 기간 동안 거래를 피하십시오.

요약하다

이것은 트렌드 추적과 위험 관리를 유기적으로 결합한 양적 거래 전략이다. 쌍평선 시스템과 기울기 하락값의 조합을 통해 전략은 시장 추세를보다 정확하게 포착할 수 있으며, 동적 스톱 스톱 손실 메커니즘은 완벽한 위험 관리를 제공합니다. 전략은 파라미터 선택과 시장 적응성 측면에서 개선 할 여지가 있지만, 명확한 논리 프레임 워크와 유연한 시스템은 후속 최적화 파라미터를위한 좋은 기반을 제공합니다.

전략 소스 코드
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("SMA Buy/Sell Strategy with Significant Slope", overlay=true)

// Parametri configurabili
smaPeriod = input.int(20, title="SMA Period", minval=1)
initialTPPercent = input.float(5.0, title="Initial Take Profit (%)", minval=0.1)  // Take Profit iniziale (ambizioso)
trailingSLPercent = input.float(1.0, title="Trailing Stop Loss (%)", minval=0.1) // Percentuale di trailing SL
slopeThreshold = input.float(0.05, title="Slope Threshold (%)", minval=0.01)    // Soglia minima di pendenza significativa

// SMA calcolate su HIGH e LOW
smaHigh = ta.sma(high, smaPeriod)
smaLow = ta.sma(low, smaPeriod)

// Funzioni per pendenza significativa
isSignificantSlope(sma, threshold) =>
    math.abs(sma - sma[5]) / sma[5] > threshold / 100

slopePositive(sma) =>
    sma > sma[1] and isSignificantSlope(sma, slopeThreshold)

slopeNegative(sma) =>
    sma < sma[1] and isSignificantSlope(sma, slopeThreshold)

// Condizioni di BUY e SELL
buyCondition = close > smaHigh and low < smaHigh and close[1] < smaHigh and slopePositive(smaHigh)
sellCondition = close < smaLow and high > smaLow and close[1] > smaLow and slopeNegative(smaLow)

// Plot delle SMA
plot(smaHigh, color=color.green, linewidth=2, title="SMA 20 High")
plot(smaLow, color=color.red, linewidth=2, title="SMA 20 Low")

// Gestione TP/SL dinamici
longInitialTP = strategy.position_avg_price * (1 + initialTPPercent / 100)
shortInitialTP = strategy.position_avg_price * (1 - initialTPPercent / 100)

// Trailing SL dinamico
longTrailingSL = close * (1 - trailingSLPercent / 100)
shortTrailingSL = close * (1 + trailingSLPercent / 100)

// Chiusura di posizioni attive su segnali opposti
if strategy.position_size > 0 and sellCondition
    strategy.close("Buy", comment="Close Long on Sell Signal")
if strategy.position_size < 0 and buyCondition
    strategy.close("Sell", comment="Close Short on Buy Signal")

// Apertura di nuove posizioni con TP iniziale e Trailing SL
if buyCondition
    strategy.entry("Buy", strategy.long, comment="Open Long")
    strategy.exit("Long TP/Trailing SL", from_entry="Buy", limit=longInitialTP, stop=longTrailingSL)

if sellCondition
    strategy.entry("Sell", strategy.short, comment="Open Short")
    strategy.exit("Short TP/Trailing SL", from_entry="Sell", limit=shortInitialTP, stop=shortTrailingSL)