추세 확인에 기반한 다중 지표 동적 손절매 전략

SMA MACD ADX Swing Low
생성 날짜: 2025-02-20 11:19:58 마지막으로 수정됨: 2025-02-20 11:19:58
복사: 2 클릭수: 323
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

추세 확인에 기반한 다중 지표 동적 손절매 전략 추세 확인에 기반한 다중 지표 동적 손절매 전략

개요

이것은 여러 기술 지표의 트렌드 추적 전략을 결합하고, 주로 SMA (단순 이동 평균), MACD ( 이동 평균 수렴 분산 지표) 및 ADX (평균 트렌드 지수) 의 세 지표의 협동 조합을 통해 주일 라인 수준에서 거래한다. 이 전략은 동적 중단 메커니즘을 채택하고, 스윙 낮은 지점을 식별하여 위험 관리를 최적화하고, 더 정확한 포지션 통제를 실현한다.

전략 원칙

이 전략의 핵심 논리는 다음과 같은 3차 검증 메커니즘을 기반으로 합니다.

  1. SMA ((30) 를 통해 전체적인 트렌드 방향을 판단하면, 평균선 위에 있는 가격은 상승세를 나타냅니다.
  2. MACD ((9,18,9) 를 사용하여 가격 동력을 포착하고 MACD 라인이 신호 라인의 상단에 있고 양수라고 요구합니다.
  3. ADX ((14) 를 사용하여 트렌드 강도를 확인합니다. ADX는 25보다 크면 트렌드가 충분히 있음을 나타냅니다.
  4. 3가지 조건이 충족되면 더 많은 돈을 벌 수 있습니다.
  5. 동적 스톱을 설정하여 하위 지점을 식별하여 SMA를 넘어가는 경우 청산

전략적 이점

  1. 여러 지표의 크로스 검증으로 가짜 신호의 영향을 크게 줄입니다.
  2. 일일 변동의 방해를 피하기 위해 주경계 수준의 거래
  3. 동적 스톱 메커니즘, 낮은 지점을 흔들면서 스톱 지점을 조정
  4. ADX 필터링의 약화, 거래 품질의 향상
  5. 트렌드 리버스 및 스톱 로즈 두 가지 보호가 포함된 포괄적 인 위험 관리

전략적 위험

  1. 다중 지표로 인해 신호가 느려지고 빠른 속도로 기회를 놓치게 될 수 있습니다.
  2. 둘레 레벨 작업은 더 큰 철회에 직면할 수 있습니다.
  3. 변동하는 낮은 지표는 급격한 변동에서 불안정할 수 있습니다.
  4. 충분한 가격 데이터를 수집하는 데 시간이 걸립니다.
  5. 불안한 시장에서 빈번한 잘못된 신호가 발생할 수 있습니다.

전략 최적화 방향

  1. 시장의 변동성에 따라 동적으로 조정하는 적응 지표 매개 변수를 도입할 수 있습니다.
  2. 거래량 지표 검증을 늘리고 신호 신뢰도를 높여라
  3. 더 똑똑한 스윙 로우 인식 알고리즘 개발
  4. 시장 환경 분류에 추가하여 다른 시장 상태에 대한 다른 매개 변수를 사용합니다.
  5. 이동식 스톱을 도입하는 것을 고려하여 스톱 로직을 최적화합니다.

요약하다

이 전략은 여러 기술 지표의 연동 작용을 통해 견고한 트렌드 추적 시스템을 구축한다. 동적 스톱 로드 메커니즘은 중기 및 장기 트렌드를 추적하는 데 적합한 좋은 위험 제어를 제공합니다. 전략의 주요 장점은 신호 신뢰성이 높고, 위험 관리가 완벽하지만, 신호 지연과 같은 도전에 직면합니다.

전략 소스 코드
/*backtest
start: 2024-02-20 00:00:00
end: 2024-03-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("Invest SMA|MACD|ADX Long Weekly Strategy (BtTL)", overlay=true)

// SMA Inputs
smaLength = input.int(30, title="SMA Länge")
// MACD Inputs
macdFastLength = input.int(9, title="MACD schnelle Periode")
macdSlowLength = input.int(18, title="MACD langsame Perside")
macdSignalLength = input.int(9, title="MACD Signal Smoothing")
//ADX Inputs
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Länge")

// SMA-Berechnung
smaValue = ta.sma(close, smaLength)
isAboveSMA = close > smaValue
isBelowSMA = close < smaValue

// MACD-Berechnung
[macdLine, signalLine, _] = ta.macd(close, macdFastLength, macdSlowLength, macdSignalLength)
isMACDBuy = macdLine > signalLine and macdLine > 0

// Swing-Low Berechnung (5-Kerzen)
isSwingLow = low[2] > low[1] and low[3] > low[1] and low[1] < low and low[1] < low[4]
var float lastSwingLow = na
var float secondLastSwingLow = na

// Wenn ein neuer Swing-Low gefunden wird
if (isSwingLow[1])
    secondLastSwingLow := lastSwingLow
    lastSwingLow := low[1]

//ADX ermitteln
[pDI,mDI,ADX] = ta.dmi(dilen, adxlen)
IsInTrend = ADX > 25

// Einstiegskondition mit MACD und SMA
longCondition = isAboveSMA and isMACDBuy and IsInTrend
if (longCondition)
    strategy.entry("Long", strategy.long)

// Ausstiegskondition am vorletzten Swing-Low
if (isBelowSMA and na(secondLastSwingLow) == false)
    strategy.exit("Exit", from_entry="Long", stop=secondLastSwingLow)

// Reset bei Position schließen
if(strategy.position_size <= 0)
    secondLastSwingLow := na
    lastSwingLow := na

// Plots
plot(smaValue, title="SMA 30", color=#063eda, linewidth=2)
plot(na(lastSwingLow) ? na : lastSwingLow, title="Last Swing Low", color=#ffb13b, linewidth=1, style=plot.style_circles)
plot(na(secondLastSwingLow) ? na : secondLastSwingLow, title="Second Last Swing Low", color=color.red, linewidth=1, style=plot.style_circles)