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

다중 패턴 인식 및 SR 레벨 거래 전략

저자:차오장, 날짜: 2024-12-05 16:30:14
태그:SR혈압TPFIBOATRSMA

img

전반적인 설명

이 전략은 여러 가지 기술 분석 패턴 인식과 지원 및 저항 수준을 결합한 포괄적인 거래 전략 시스템이다. 전략은 주로 이중 바닥 패턴 (아담과 이브 바닥) 을 식별하고, 피보나치 리트레이싱 레벨을 통합하고, 거래 결정을 위해 지원 및 저항 라인을 활용하여 작동합니다. 핵심 강점은 다차원 기술 지표 검증에 있습니다. 이는 지원 및 저항 수준을 위험 통제의 중요한 참조로 사용하여 거래 신호의 신뢰성을 향상시킵니다.

전략 원칙

이 전략은 거래 결정에 대해 세 가지 검증 메커니즘을 사용합니다. 첫째, 더 날카로운 아담 바닥과 더 둥근 에브 바닥을 포함한 특정 알고리즘을 통해 이중 바닥 패턴을 식별합니다. 둘째, 목표 영역을 결정하기 위해 피보나치 리트레이싱 레벨 (0.618 및 1.618) 을 사용합니다. 마지막으로, 지원 및 저항 레벨 검증을 통해 거래 신호를 확인합니다. 패턴 인식, 피보나치 레벨 및 지원 / 저항 레벨 조건이 동시에 충족 될 때만 거래 신호가 생성됩니다. 구체적으로, 지원 / 저항 수준이 1.618 피보나치 확장보다 높을 때 긴 신호가 트리거되며 지원 / 저항 수준이 0.618 피보나치 리트레이싱보다 낮을 때 짧은 신호가 트리거됩니다.

전략적 장점

  1. 다중 검증 메커니즘은 거래 신호 신뢰성을 크게 향상시킵니다.
  2. 패턴 인식 알고리즘은 시장 전환점을 정확하게 파악합니다.
  3. 피보나치 레벨은 정확한 목표 영역을 제공합니다.
  4. 지원/저항 수준 검증은 거래 안전성을 높인다
  5. 매우 조정 가능한 매개 변수
  6. 높은 수준의 자동화는 주관적 판단 편향을 줄여줍니다.

전략 위험

  1. 패턴 인식은 잠잠을 가질 수 있으며 입력 시점에 영향을 줄 수 있습니다.
  2. 매우 변동적인 시장에서 잘못된 신호가 발생할 수 있습니다.
  3. 지원/저항 레벨의 효과는 시장 조건에 영향을 받습니다.
  4. 부적절한 매개 변수 설정은 과잉 거래로 이어질 수 있습니다.
  5. 더 긴 관찰 기간이 필요하고 빠른 기회를 놓칠 수 있습니다.

전략 최적화 방향

  1. 시장 조건을 필터링하기 위해 변동성 지표를 도입
  2. 패턴 인식 정확성을 향상시키기 위해 트렌드 필터를 추가
  3. 지원/저항 레벨 계산 방법을 최적화
  4. 부피 표시를 확인하기 위해 포함
  5. 더 유연한 스톱 로스 및 수익 취득 메커니즘 개발
  6. 패턴 인식 정확성을 향상시키기 위해 기계 학습 알고리즘을 구현

요약

이 전략은 패턴 인식, 피보나치 레벨, 지원/저항 라인을 포함한 여러 기술적 분석 방법을 포괄적으로 활용하여 비교적 완전한 거래 시스템을 구축합니다. 그것의 강점은 여러 검증 메커니즘에 의해 제공되는 높은 신뢰성, 조정 가능성은 다른 시장 조건에 적응 할 수 있습니다. 일부 내재된 위험이 존재하지만 지속적인 최적화 및 개선으로 전략은 실제 거래에서 안정적인 성능을 약속합니다. 추가 기술 지표 및 최적화 알고리즘을 통합함으로써 성능 향상에 상당한 여지가 있습니다.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-04 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Double Bottom with Support/Resistance Strategy - Aynet", overlay=true)

// Inputs
lookbackPeriod = input(21, "Lookback Period")
swingLowThreshold = input(1.5, "Swing Low Threshold")
fibLevel1 = input(0.618, "Fibonacci Level 1")
fibLevel3 = input(1.618, "Fibonacci Level 2")
srPeriod = input(21, "Support/Resistance Period") 
srThreshold = input(3, "Support/Resistance Touch Points")

// Support/Resistance Function
get_sr_level(idx) =>
    var level = 0.0
    var count = 0
    
    if bar_index % srPeriod == 0
        highCount = 0
        lowCount = 0
        for i = 0 to srPeriod - 1
            if math.abs(high[i] - high) < (high * 0.001)
                highCount += 1
            if math.abs(low[i] - low) < (low * 0.001)
                lowCount += 1
                
        if highCount >= srThreshold
            level := high
            count := highCount
        if lowCount >= srThreshold
            level := low
            count := lowCount
            
    [level, count]

// Pattern Detection Functions
isSwingLow(src, left, right) =>
    isLow = true
    for i = 0 to left + right
        if src[i] < src[right]
            isLow := false
    isLow

getSpikeSharpness(index) =>
    priceRange = high[index] - low[index]
    bodyRange = math.abs(close[index] - open[index])
    sharpness = priceRange / bodyRange
    sharpness

// Pattern Variables
var float firstBottom = na
var float secondBottom = na
var bool isAdam = false
var bool isEve = false
var float level1Value = na
var float level3Value = na

// Pattern Detection
bottom = isSwingLow(low, lookbackPeriod, lookbackPeriod)
if bottom
    sharpness = getSpikeSharpness(0)
    if na(firstBottom)
        firstBottom := low
        isAdam := sharpness > swingLowThreshold
    else if low <= firstBottom * 1.02 and low >= firstBottom * 0.98
        secondBottom := low
        isEve := sharpness <= swingLowThreshold

// Calculate Fibonacci
if not na(secondBottom)
    highPoint = ta.highest(high, lookbackPeriod)
    fibDistance = highPoint - math.min(firstBottom, secondBottom)
    level1Value := math.min(firstBottom, secondBottom) + fibDistance * fibLevel1
    level3Value := math.min(firstBottom, secondBottom) + fibDistance * fibLevel3

// Get S/R Level
[srLevel, srCount] = get_sr_level(0)

// Trading Logic
longCondition = srLevel > level3Value
shortCondition = srLevel < level1Value

if longCondition
    strategy.entry("Long", strategy.long)

if shortCondition
    strategy.entry("Short", strategy.short)

// Reset Pattern
if high > ta.highest(high[1], lookbackPeriod)
    firstBottom := na
    secondBottom := na
    isAdam := false
    isEve := false
var table logo = table.new(position.top_right, 1, 1)
table.cell(logo, 0, 0, 'Double Bottom with Support/Resistance Strategy - Aynet', text_size=size.large, text_color=color.white)
// Plots
plot(level1Value, "0.236", color=color.rgb(245, 0, 0), style=plot.style_line)
plot(level3Value, "0.618", color=color.rgb(82, 166, 255), style=plot.style_line)
plot(srLevel, "S/R Level", color=color.white)

plotshape(bottom and not na(firstBottom) and na(secondBottom), "Adam Bottom", shape.circle, location.belowbar, color.green)
plotshape(bottom and not na(secondBottom), "Eve Bottom", shape.circle, location.belowbar, color.yellow)

관련

더 많은