리소스 로딩... 로딩...

듀얼 타임프레임 트렌드 역전 촛불 패턴 양적 거래 전략

저자:차오장, 날짜: 2025-01-10 15:47:53
태그:MA

 Dual Timeframe Trend Reversal Candlestick Pattern Quantitative Trading Strategy

전반적인 설명

이 전략은 두 가지 고전적인 촛불 패턴: 해머와 헝깅맨을 기반으로 한 양적 거래 시스템이다. 이 반전 패턴을 식별함으로써 잠재적 인 시장 전환점을 예측한다. 시스템은 촛불 몸과 그림자, 트렌드 방향 및 기타 요소 사이의 관계를 포함하여 신호 유효성을 확인하기 위해 여러 기술적 지표를 결합하여 시장 반전 지점을 정확하게 파악합니다.

전략 원칙

전략의 핵심 논리는 두 가지 핵심 촛불 패턴을 프로그래밍 방식으로 식별하는 것입니다. 1. 해머: 하향 추세에서 나타나고, 잠재적인 상향 반전을 암시한다. 작은 몸, 긴 아래 그림자 (신장 길이의 최소 두 배), 최소한의 상상 그림자 또는 상상의 그림자가 없는 것이 특징이다. 2. 헝깅맨: 상승 추세에서 나타나고, 잠재적인 하향 반전을 시사한다. 해머와 유사한 특성이지만 반대 함의를 가진 다른 위치에서 나타난다.

전략은 엄격한 매개 변수를 통해 이러한 패턴을 수치화합니다. - 최소 촛불 몸의 길이를 곱하기 - 촛불 높이에 낮은 그림자 비율 - 보관 기간

전략적 장점

  1. 체계적인 식별: 주관적 인 인간의 판단을 피하여 시장 반전 신호를 프로그래밍 방식으로 정확하게 식별합니다.
  2. 통제된 위험: 과도한 포지션 보유로 인한 위험을 피하는 명확한 보유 기간을 설정합니다.
  3. 신호 시각화: 분석 및 최적화를 위해 차트에 직관적으로 거래 신호를 표시합니다.
  4. 유연한 매개 변수: 다른 시장 조건에 따라 매개 변수를 조정하여 전략 적응성을 향상시킬 수 있습니다.

전략 위험

  1. 거짓 파업 위험: 반전 패턴은 다른 기술적 지표로부터 확인을 필요로 하는 거짓 신호를 생성할 수 있습니다.
  2. 타이밍 위험: 고정 보유 기간은 가격 움직임 잠재력을 완전히 포착하지 않을 수 있습니다.
  3. 시장 환경 의존성: 다양한 시장에서 과도한 잘못된 신호를 생성 할 수 있습니다.

전략 최적화 방향

  1. 트렌드 필터를 도입합니다. 트렌드를 필터링하고 신호 품질을 향상시키기 위해 이동 평균과 같은 지표를 추가합니다.
  2. 동적 보유 기간: 시장 변동성에 따라 보유 시간을 조정합니다.
  3. 다중 시간 프레임 확인: 더 높은 시간 프레임 트렌드 확인 메커니즘을 구현합니다.
  4. 스톱 로스 최적화: 위험 통제를 개선하기 위해 동적 스톱 로스 메커니즘을 추가합니다.

요약

이 전략은 고전적인 기술 분석 이론을 정량화로 체계적으로 구현하여 강력한 실용적 가치를 입증합니다. 매개 변수 최적화 및 위험 제어 메커니즘 정리를 통해 전략은 다른 시장 환경에서 안정적인 성능을 유지할 수 있습니다. 모듈형 설계는 후속 최적화에 대한 견고한 기초를 제공합니다.


/*backtest
start: 2024-12-10 00:00:00
end: 2025-01-08 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=6
strategy("Hammer and Hanging Man Strategy", overlay=true)

// Input parameters
length = input.int(5, title="Minimum Candle Body Length (Multiplier)", minval=1)
shadowRatio = input.float(1, title="Lower Shadow to Candle Height Ratio", minval=1.0)
holdPeriods = input.int(26, title="Hold Periods (Bars)", minval=1)  // Holding period in bars

// Function to calculate the absolute value
absValue(x) =>
    x >= 0 ? x : -x

// Function to check if it is a Hammer
isHammer() =>
    bodyLength = absValue(close - open)
    candleHeight = high - low
    lowerShadow = math.min(open, close) - low
    upperShadow = high - math.max(open, close)
    smallBody = bodyLength <= candleHeight / length
    longLowerShadow = lowerShadow >= bodyLength * shadowRatio
    shortUpperShadow = upperShadow <= bodyLength
    smallBody and longLowerShadow and shortUpperShadow and close > open

// Function to check if it is a Hanging Man
isHangingMan() =>
    bodyLength = absValue(close - open)
    candleHeight = high - low
    lowerShadow = math.min(open, close) - low
    upperShadow = high - math.max(open, close)
    smallBody = bodyLength <= candleHeight / length
    longLowerShadow = lowerShadow >= bodyLength * shadowRatio
    shortUpperShadow = upperShadow <= bodyLength
    smallBody and longLowerShadow and shortUpperShadow and close < open

// Detect the candles
hammer = isHammer()
hangingMan = isHangingMan()

// Trading logic: Long on Hammer, Short on Hanging Man
if hammer
    strategy.entry("Long", strategy.long)  // Long entry on Hammer

if hangingMan
    strategy.entry("Short", strategy.short)  // Short entry on Hanging Man

// Exit after X bars
if strategy.position_size > 0 and bar_index - strategy.opentrades.entry_bar_index(0) >= holdPeriods
    strategy.close("Long")

if strategy.position_size < 0 and bar_index - strategy.opentrades.entry_bar_index(0) >= holdPeriods
    strategy.close("Short")

// Visualization of signals
plotshape(hammer, title="Hammer", location=location.belowbar, color=color.green, style=shape.labelup, text="Hammer")
plotshape(hangingMan, title="Hanging Man", location=location.abovebar, color=color.red, style=shape.labeldown, text="Hanging Man")

관련

더 많은