듀얼 타임 프레임 트렌드 반전 캔들스틱 패턴 양적 거래 전략

MA
생성 날짜: 2025-01-10 15:47:53 마지막으로 수정됨: 2025-01-10 15:47:53
복사: 1 클릭수: 385
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

듀얼 타임 프레임 트렌드 반전 캔들스틱 패턴 양적 거래 전략

개요

이 전략은 망치선과 매달린 남자라는 두 가지 고전적 촛대 패턴을 기반으로 한 양적 거래 시스템입니다. 이 전략은 시장에서 이러한 반전 패턴을 식별하여 가격 움직임의 잠재적인 전환점을 예측하는 방식으로 작동합니다. 이 시스템은 K-라인 본체와 그림자 사이의 비례 관계, 추세 방향 및 기타 요소를 포함한 여러 기술 지표를 결합하여 신호의 유효성을 확인하고 시장 반전 지점을 정확하게 포착합니다.

전략 원칙

이 전략의 핵심 논리는 프로그래밍 방식으로 두 가지 주요 캔들스틱 패턴을 식별하는 것입니다.

  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")