유사한 직사각형 높이 패턴 정량화 전략

RSI SMA 趋势分析 矩形模式识别 价格波动 成交量 技术指标 止损 止盈 高度模式 回调分析
생성 날짜: 2025-03-26 11:44:39 마지막으로 수정됨: 2025-03-26 11:44:39
복사: 0 클릭수: 320
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

유사한 직사각형 높이 패턴 정량화 전략 유사한 직사각형 높이 패턴 정량화 전략

개요

유사 직사각형 고도 패턴량화 전략은 가격 변동 특성에 기반한 거래 시스템으로, 시장에서 유사 높이의 직사각형 형태를 식별하여 잠재적인 거래 기회를 포착합니다. 전략의 핵심은 가격 변동의 폭과 유사한 패턴을 찾는 것이며, RSI 지표, 거래량 확인 및 동적으로 조정된 중지 손실을 관리하여 위험을 관리하고 거래 결과를 최적화합니다. 이 전략은 다양한 거래 품목에 적용되며, 가격 고도 비율 관계를 정확하게 계산하여 거래자에게 가능한 추세 역전 또는 지속 신호를 식별하는 체계화된 방법을 제공합니다.

전략 원칙

이 전략의 핵심 원칙은 가격 형태에 대한 기하학적 특성 분석에 기반하며, 다음과 같은 몇 가지 핵심 포인트를 중심으로 전개됩니다.

  1. 고도 패턴 인식전략은 크게 두 가지 유형의 고도 모드에 초점을 맞추고 있습니다. 주요 고도 ((사용자가 사용자 정의한 가격 퍼센트) 와 회귀 고도 ((사용자가 사용자 정의한 더 작은 퍼센트)). 시스템은 다양한 시장 조건에 맞게 이러한 고도 값을 동적으로 계산합니다.

  2. 다중 모드 탐지

    • 황소 시장 모델: 하위 형성 후 특정 고도 상승 형태를 식별
    • 곰 시장 모델: 꼭대기 형성 후 특정 높이의 하락 형태를 식별합니다.
    • 황소 시장 회귀: 상승 추세에서 특정 규모의 회귀를 식별
    • 곰 시장 회귀: 하향 추세에서 특정 규모의 반향을 식별
  3. 변수 최적화

    • 돌아보기 주기 (lookbackPeriod): 분석된 역사 데이터의 범위를 결정한다
    • 모드 너비 제한: 최소 및 최대 너비 변수를 통해 모드를 제어하는 시간 간격
    • 높이 일치 용도 차: 실제 높이와 이상적인 높이에서 20%의 오차를 허용하여 패턴 식별의 유연성을 증가시킵니다.
  4. 기술 지표 필터

    • RSI 지표: 거래 신호를 필터링하기 위해 선택적으로 RSI 초과 구매 초과 판매 수준을 사용합니다.
    • 거래량 확인: 거래량이 평균보다 높을 때만 거래 신호가 유효하도록 선택적으로 요구할 수 있습니다.
  5. 입점과 출구 전략

    • 진입 신호: 시가 시장 패턴 또는 시가 시장 회귀를 감지할 때 더 많이 하고, 시가 시장 패턴 또는 시가 시장 회귀를 감지할 때 더 적게 한다.
    • 출구 전략: 회귀 높이를 설정한 스톱로스를 사용하여, 주요 높이를 설정한 스톱을 사용하여, 위험과 수익의 비율이 명확한 거래 시스템을 형성

전략적 이점

이 전략은 코드 구현을 심층적으로 분석하여 다음과 같은 중요한 장점을 보여준다.

  1. 객관적인 신호 생성 메커니즘: 수학적 계산과 명확하게 정의된 기하학적 관계에 기반하여, 주관적 판단의 영향을 줄이고, 거래 의사결정을 더 체계화하고 일관되게 만든다.

  2. 시장 조건에 적응: 평균 가격의 비율을 사용하여 고도 매개 변수를 계산함으로써, 전략은 다양한 가격 범위와 변동성 시장 환경에 자동으로 적응할 수 있다.

  3. 다차원 확인 메커니즘형태 인식, RSI 지표 및 거래량 분석과 결합하여, 여러 계층의 신호 확인을 제공하여 낮은 품질의 거래 신호를 필터링하는 데 도움이됩니다.

  4. 명확한 위험 관리 프레임워크: 각 거래에는 미리 정의된 중지 및 중지 위치가 있으며, 거래자가 위험을 통제하고 일관된 위험-수익 비율을 유지하도록 도와줍니다.

  5. 시각적 도움말: 도표에 직사각형과 태그를 그리는 것으로, 직관적으로 식별된 거래 패턴을 표시하여 거래자가 신호를 이해하고 확인하는 것을 용이하게 한다.

  6. 변수화 설계전략: 전략은 특정 시장 조건과 개인 위험 선호도에 따라 최적화 할 수있는 여러 조정 가능한 매개 변수를 제공합니다.

  7. 다중 모드 인식주요 트렌드가 형성되는 것을 식별할 수 있을 뿐만 아니라, 트렌드에서 회귀할 기회를 잡을 수 있고, 더 많은 거래 입시점을 제공할 수 있다.

전략적 위험

이 전략은 많은 장점이 있지만, 다음과 같은 잠재적인 위험도 있습니다.

  1. 매개변수 민감도전략의 성능은 파라미터 설정에 크게 의존하며, 잘못된 파라미터는 과도한 거래 또는 중요한 신호를 놓치게 할 수 있습니다. 해결책은 역사 회귀를 통해 최적의 파라미터 조합을 찾고, 정기적으로 파라미터의 유효성을 재평가하는 것입니다.

  2. 가짜 침입 위험: 시장은 예상 패턴과 비슷한 형태를 형성할 수 있지만 그 후 반전하여 잘못된 신호를 유발한다. 종결 가격 확인을 기다리는 것과 같은 확인 메커니즘을 추가하거나 다른 지표와 함께 교차 검증을 수행하는 것이 좋습니다.

  3. 고정 비율 제한: 고정된 비율로 계산되는 높이는 급격하게 변동하는 시장에 적합하지 않을 수 있다. ATR 또는 역사적인 변동률에 기반한 동적 높이를 계산하는 방법을 도입하는 것을 고려할 수 있다.

  4. 컴퓨터 집중 처리: 전략은 여러 개의 순환과 조건 판단을 포함하며, 많은 양의 데이터를 처리할 때 성능 문제를 일으킬 수 있습니다. 코드 구조를 최적화하거나 특정 계산 단계를 단순화하면 실행 효율을 높일 수 있습니다.

  5. 트렌드 판단을 단순화: 현재 트렌드를 판단하는 것은 이동 평균의 간단한 비교에만 기초하여 복잡한 시장 구조를 정확하게 포착 할 수 없습니다. 정확성을 높이기 위해 더 복잡한 트렌드 식별 알고리즘을 통합하는 것을 고려하십시오.

  6. 스탠더드 스탠더드 정지 설정: 고정된 사용 회귀 높낮이 및 주요 높낮이가 손해 및 중지로 충분히 유연하지 않을 수 있다. 시장의 변동성이나 지지 저항 지점을 기반으로 한 동적 중지 손해 차단 장치가 도입될 수 있다.

전략 최적화 방향

코드 분석을 바탕으로, 이 전략의 최적화 방향은 다음과 같습니다.

  1. 동적 변수 조정: 시장의 변동성과 거래 사이클에 따라 높은 비율과 패턴 폭의 파라미터를 자동으로 조정하는 적응 파라미터 메커니즘을 도입한다. 이것은 다른 시장 단계의 특성에 더 잘 적응 할 수 있다.

  2. 증가 추세 확인: 더 복잡한 트렌드 식별 방법을 통합하여 트렌드 판단의 정확도를 높이기 위해 다중 주기 트렌드 분석, 브린 대역폭 변화 또는 방향 이동 지수 (DMI) 를 사용합니다.

  3. 최적화 신호 필터링: 가격과 이동 평균의 위치 관계, 다중 주기 RSI 일관성 분석 또는 거래량 분포 특징과 같은 추가 필터 조건을 도입하여 가짜 신호를 줄인다.

  4. 재검토를 개선하기: 전략의 성능을 종합적으로 평가하고 매개 변수 최적화를 안내하기 위해 최대 회수, 샤프 비율, 손해 요소와 같은 보다 포괄적인 전략 평가 지표를 추가합니다.

  5. 적응형 상쇄장치: ATR 또는 최근 변동성 동적에 기반하여 고정된 회귀 높이를 사용하는 것보다는 스톱 레벨을 조정하여 위험 관리의 효율성을 높인다.

  6. 통합 시장 환경 분석: 시장 환경 분류 기능을 추가하여 다른 시장 상태 (예: 높은 변동성, 낮은 변동성, 강한 추세 또는 간격의 흔들림) 에 따라 다른 파라미터 설정이나 거래 논리를 사용합니다.

  7. 실행의 효율성을 최적화: 패턴 인식 알고리즘을 재구성하여, 嵌套循环 및 반복 계산을 줄이고, 실시간 환경에서 전략 실행 속도를 향상시킵니다.

  8. 필터링 시간을 추가합니다.시간 기반 필터링 조건을 추가하여 시장의 개시, 종료 또는 중요한 보도 발표와 같은 격렬한 변동의 시기를 피하고 신호 품질을 향상시킵니다.

요약하다

비슷한 직사각형 고도 패턴 수치화 전략은 가격 변동의 기하학적 특성을 정밀하게 정의하고 식별하여 거래 기회를 포착하는 독특한 기술 분석 방법이다. 핵심 혁신은 추상적인 차트 패턴을 수치화 가능한 수학적 관계로 변환하고 기술 지표와 결합하여 여러 가지 확인을 수행하는 것이다. 전략은 입문 신호, 위험 관리 및 그래픽 표시를 포함한 완전한 거래 프레임워크를 제공하며 체계화된 거래 방법을 추구하는 거래자에게 적합하다.

이 전략은 시장을 분석하는 새로운 관점을 제공하지만, 그 효과는 크게 변수 최적화와 시장 적응성에 달려 있습니다. 신호 필터링 메커니즘을 지속적으로 개선하고, 트렌드 판단 정확성을 강화하고, 위험 관리 방법을 최적화함으로써, 이 전략은 거래자의 도구 상자에 효과적인 도구가 될 잠재력을 가지고 있습니다.

전략 소스 코드
/*backtest
start: 2024-03-26 00:00:00
end: 2025-03-25 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("Similar Rectangle Heights - Strategy", overlay=true)

// Strategy parameters
lookbackPeriod = input.int(45, "Analysis period", minval=10)
primaryHeightPercent = input.float(5.0, "Primary height (% of price)", minval=0.5, maxval=20.0, step=0.5)
correctionHeightPercent = input.float(2.2, "Correction height (% of price)", minval=0.5, maxval=10.0, step=0.5)
minPatternBars = input.int(5, "Minimum pattern width (candles)", minval=3)
maxPatternBars = input.int(14, "Maximum pattern width (candles)", minval=5)
useVolume = input.bool(false, "Include volume")
useRSI = input.bool(true, "Include RSI")
rsiPeriod = input.int(23, "RSI period", minval=5)
rsiOverbought = input.int(55, "RSI overbought level", minval=50, maxval=90)
rsiOversold = input.int(50, "RSI oversold level", minval=10, maxval=50)

// Calculate primary height and correction height in price points
avgPrice = ta.sma(close, lookbackPeriod)
primaryHeight = avgPrice * primaryHeightPercent / 100
correctionHeight = avgPrice * correctionHeightPercent / 100

// Calculate RSI
rsi = ta.rsi(close, rsiPeriod)

// Function to detect a bullish pattern
bullishPattern(idx) =>
    // Check if there is a low followed by a rise of a specified height
    lowestLow = ta.lowest(low, minPatternBars)[idx]
    highAfterLow = ta.highest(high, minPatternBars)[idx]
    patternHeight = highAfterLow - lowestLow
    
    // Check if pattern height matches the primary height
    heightMatch = math.abs(patternHeight - primaryHeight) <= primaryHeight * 0.2
    
    // Check if pattern width is within range
    patternWidth = 0
    for i = 0 to maxPatternBars - 1
        if idx + i < lookbackPeriod and low[idx + i] == lowestLow
            for j = i to maxPatternBars - 1
                if idx + j < lookbackPeriod and high[idx + j] == highAfterLow
                    patternWidth := j - i + 1
                    break
            break
    
    widthMatch = patternWidth >= minPatternBars and patternWidth <= maxPatternBars
    
    // Check volume and RSI conditions
    volumeCondition = not useVolume or volume > ta.sma(volume, lookbackPeriod)
    rsiCondition = not useRSI or rsi[idx] < rsiOversold
    
    // Return true if all conditions are met
    heightMatch and widthMatch and volumeCondition and rsiCondition

// Function to detect a bearish pattern
bearishPattern(idx) =>
    // Check if there is a high followed by a drop of a specified height
    highestHigh = ta.highest(high, minPatternBars)[idx]
    lowAfterHigh = ta.lowest(low, minPatternBars)[idx]
    patternHeight = highestHigh - lowAfterHigh
    
    // Check if pattern height matches the primary height
    heightMatch = math.abs(patternHeight - primaryHeight) <= primaryHeight * 0.2
    
    // Check if pattern width is within range
    patternWidth = 0
    for i = 0 to maxPatternBars - 1
        if idx + i < lookbackPeriod and high[idx + i] == highestHigh
            for j = i to maxPatternBars - 1
                if idx + j < lookbackPeriod and low[idx + j] == lowAfterHigh
                    patternWidth := j - i + 1
                    break
            break
    
    widthMatch = patternWidth >= minPatternBars and patternWidth <= maxPatternBars
    
    // Check volume and RSI conditions
    volumeCondition = not useVolume or volume > ta.sma(volume, lookbackPeriod)
    rsiCondition = not useRSI or rsi[idx] > rsiOverbought
    
    // Return true if all conditions are met
    heightMatch and widthMatch and volumeCondition and rsiCondition

// Function to detect a bullish correction in an uptrend
bullishCorrection(idx) =>
    // Check if there is a pullback of correction height after a rise
    highBeforeCorrection = ta.highest(high, minPatternBars)[idx]
    lowDuringCorrection = ta.lowest(low, minPatternBars)[idx]
    correctionSize = highBeforeCorrection - lowDuringCorrection
    
    // Check if correction height matches expected height
    heightMatch = math.abs(correctionSize - correctionHeight) <= correctionHeight * 0.2
    
    // Check if correction width is within range
    correctionWidth = 0
    for i = 0 to maxPatternBars - 1
        if idx + i < lookbackPeriod and high[idx + i] == highBeforeCorrection
            for j = i to maxPatternBars - 1
                if idx + j < lookbackPeriod and low[idx + j] == lowDuringCorrection
                    correctionWidth := j - i + 1
                    break
            break
    
    widthMatch = correctionWidth >= minPatternBars / 2 and correctionWidth <= maxPatternBars / 2
    
    // Check if we are in an uptrend
    uptrend = ta.sma(close, lookbackPeriod)[idx] > ta.sma(close, lookbackPeriod)[idx + minPatternBars]
    
    // Return true if all conditions are met
    heightMatch and widthMatch and uptrend

// Function to detect a bearish correction in a downtrend
bearishCorrection(idx) =>
    // Check if there is a pullback of correction height after a drop
    lowBeforeCorrection = ta.lowest(low, minPatternBars)[idx]
    highDuringCorrection = ta.highest(high, minPatternBars)[idx]
    correctionSize = highDuringCorrection - lowBeforeCorrection
    
    // Check if correction height matches expected height
    heightMatch = math.abs(correctionSize - correctionHeight) <= correctionHeight * 0.2
    
    // Check if correction width is within range
    correctionWidth = 0
    for i = 0 to maxPatternBars - 1
        if idx + i < lookbackPeriod and low[idx + i] == lowBeforeCorrection
            for j = i to maxPatternBars - 1
                if idx + j < lookbackPeriod and high[idx + j] == highDuringCorrection
                    correctionWidth := j - i + 1
                    break
            break
    
    widthMatch = correctionWidth >= minPatternBars / 2 and correctionWidth <= maxPatternBars / 2
    
    // Check if we are in a downtrend
    downtrend = ta.sma(close, lookbackPeriod)[idx] < ta.sma(close, lookbackPeriod)[idx + minPatternBars]
    
    // Return true if all conditions are met
    heightMatch and widthMatch and downtrend

// Detecting signals
var float entryPrice = na
var float stopLoss = na
var float takeProfit = na

// Buy signal
buySignal = false
for i = 0 to 3
    if bullishPattern(i) or (i > 0 and bullishCorrection(i))
        buySignal := true
        break

// Sell signal
sellSignal = false
for i = 0 to 3
    if bearishPattern(i) or (i > 0 and bearishCorrection(i))
        sellSignal := true
        break

// Execute strategy
if buySignal
    entryPrice := close
    stopLoss := close - correctionHeight
    takeProfit := close + primaryHeight
    strategy.entry("Long", strategy.long)
    strategy.exit("Exit Long", "Long", stop=stopLoss, limit=takeProfit)

if sellSignal
    entryPrice := close
    stopLoss := close + correctionHeight
    takeProfit := close - primaryHeight
    strategy.entry("Short", strategy.short)
    strategy.exit("Exit Short", "Short", stop=stopLoss, limit=takeProfit)