E9 샤크 32 패턴 양적 가격 돌파 전략


생성 날짜: 2024-11-12 14:51:17 마지막으로 수정됨: 2024-11-12 14:51:17
복사: 1 클릭수: 422
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

E9 샤크 32 패턴 양적 가격 돌파 전략

개요

이 전략은 가격 형태 인식에 기반한 정량 거래 시스템으로, 핵심은 “어32”와 같은 특수한 K선 형태를 인식하고 활용하여 거래를 하는 것이다. 전략은 고점과 저점의 연속성 변화를 분석하여, 형태 확인 후 핵심 가격 수준을 설정하고, 이러한 수준을 돌파할 때 거래를 한다. 이 전략은 형태 인식, 트렌드 추적 및 가격 돌파 등 여러 가지 기술 분석 요소를 결합하여 완전한 거래 시스템을 구축한다.

전략 원칙

전략의 핵심은 “32” 형태를 식별하는 데 있습니다. 이 형태는 다음과 같은 조건을 충족해야 합니다. 전두엽 K 선의 낮은 점은 연속적으로 낮아지고, 높은 점은 연속적으로 높습니다. 형태가 확인되면, 전략은 형태의 시작 K 선의 높은 점과 낮은 점을 핵심 가격 수준으로 잠금합니다. 시스템은 가격이 이러한 핵심 수준을 돌파 할 때 포지션을 열습니다.

전략적 이점

  1. 형태 인식 정확성: 형태를 엄격한 수학적 정의를 통해 식별하고, 주관적인 판단을 피한다
  2. 리스크 관리: 명확한 스톱로스 및 수익 목표 설정
  3. 시각적 피드백이 명확하다: 모양과 거래 신호를 표시하기 위해 다양한 색의 선과 배경을 사용합니다.
  4. 반복 신호를 필터링: 각 형태는 한 번만 거래할 수 있으며, 과도한 거래를 방지합니다.
  5. 합리적인 목표 설정: 형태적 변동의 폭에 따라 수익 목표를 설정하고, 좋은 위험-이익 비율을 갖는다.

전략적 위험

  1. 변동 시장 위험: 변동 시장에서 빈번한 가짜 브레이크 신호가 발생할 수 있습니다.
  2. 미끄러지 위험: 빠른 속도로 큰 미끄러짐이 발생할 수 있습니다.
  3. 단일 형태 의존: 단일 형태에 지나치게 의존하면 다른 거래 기회를 놓칠 수 있습니다.
  4. 변수 감수성: 스톱로스 및 수익 목표의 변수 설정이 전략 성능에 큰 영향을 미칩니다.

전략 최적화 방향

  1. 트랜지먼트 확인을 추가: 트랜지먼트 변화를 조합하여 돌파구의 유효성을 확인할 수 있습니다.
  2. 시장 환경 필터 도입: 불리한 시장 환경을 필터링하기 위해 추세 강도 지표를 추가합니다.
  3. 손해 중지 최적화 방법: 전략의 적응성을 높이기 위해 동적 손해를 사용하는 것을 고려할 수 있습니다.
  4. 시간 필터를 추가: 특정 시간대의 변동을 피하기 위해 거래 시간 필터를 추가합니다.
  5. 자금 관리 개선: 포지션 관리 모듈을 추가하여 자금 사용 효율을 최적화

요약하다

E932 형태량화 가격 돌파 전략은 구조가 완전하고, 논리가 명확한 거래 시스템이다. 엄격한 형태 정의와 명확한 거래 규칙으로, 측정 가능한 실행 가능한 거래 전략을 구축한다. 전략의 위험 관리 시스템이 완성되어, 시각적 피드백이 명확하여, 거래자가 이해하기 쉽고 실행한다. 제안된 최적화 방향에 의해, 전략에는 더 많은 개선이 가능하다. 이 전략은 체계화된 거래를 추구하는 투자자에게 적합하지만, 시장 환경의 적합성과 변수 최적화에 주의를 기울여야 한다.

전략 소스 코드
/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//╔═════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
//║                                                                                                             ║
//║ ░▒▓████████▓▒░▒▓███████▓▒░ ░▒▓██████▓▒░░▒▓███████▓▒░░▒▓████████▓▒░▒▓███████▓▒░   ░▒▓████████▓▒░▒▓██████▓▒░  ║
//║    ░▒▓█▓▒░   ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░      ░▒▓█▓▒░░▒▓█▓▒   ░▒▓█▓▒░     ░▒▓█▓▒░░▒▓█▓▒░ ║
//║    ░▒▓█▓▒░   ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░      ░▒▓█▓▒░░▒▓█▓▒.  ░▒▓█▓▒░     ░▒▓█▓▒░░▒▓█▓▒░ ║
//║    ░▒▓█▓▒░   ░▒▓███████▓▒░░▒▓████████▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓██████▓▒░ ░▒▓███████▓▒░.  ░▒▓██████▓▒░ ░▒▓███████▓▒░ ║
//║    ░▒▓█▓▒░   ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░      ░▒▓█▓▒░░▒▓█▓▒.  ░▒▓█▓▒░            ░▒▓█▓▒░ ║
//║    ░▒▓█▓▒░   ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░      ░▒▓█▓▒░░▒▓█▓▒.  ░▒▓█▓▒░            ░▒▓█▓▒░ ║
//║    ░▒▓█▓▒░   ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓███████▓▒░░▒▓████████▓▒░▒▓█▓▒░░▒▓█▓▒.  ░▒▓████████▓▒░▒▓██████▓▒░  ║
//║                                                                                                             ║
//╚═════════════════════════════════════════════════════════════════════════════════════════════════════════════╝

//@version=5
strategy("E9 Shark-32 Pattern Strategy with Target Lines", shorttitle="E9 Shark-32 Strategy", overlay=true)

// Inputs for background color settings
bgcolorEnabled = input(true, title="Enable Background Color")
bgcolorColor = input.color(color.new(color.blue, 90), title="Background Color")

// Inputs for bar color settings
barcolorEnabled = input(true, title="Enable Bar Color")
barcolorColor = input.color(color.rgb(240, 241, 154), title="Bar Color")

// Inputs for target lines settings
targetLinesEnabled = input(true, title="Enable Target Lines")
targetLineColor = input.color(color.white, title="Target Line Color")
targetLineThickness = input.int(1, title="Target Line Thickness", minval=1, maxval=5)

// Define Shark-32 Pattern
shark32 = low[2] < low[1] and low[1] < low and high[2] > high[1] and high[1] > high

// Initialize color variables for bars
var color barColorCurrent = na
var color barColor1 = na
var color barColor2 = na

// Update color variables based on Shark-32 pattern
barColorCurrent := barcolorEnabled and (shark32 or shark32[1] or shark32[2]) ? barcolorColor : na
barColor1 := barcolorEnabled and (shark32[1] or shark32[2]) ? barcolorColor : na
barColor2 := barcolorEnabled and shark32[2] ? barcolorColor : na

// Apply the bar colors to the chart
barcolor(barColorCurrent, offset=-2, title="Shark-32 Confirmed Current")
barcolor(barColor1, offset=-3, title="Shark-32 Confirmed Previous Bar 1")
barcolor(barColor2, offset=-4, title="Shark-32 Confirmed Previous Bar 2")

// Variables for locking the high and low of confirmed Shark-32
var float patternHigh = na
var float patternLow = na
var float upperTarget = na
var float lowerTarget = na

// Once Shark-32 pattern is confirmed, lock the patternHigh, patternLow, and target lines
if shark32
    patternHigh := high[2]  // The high of the first bar in Shark-32 pattern
    patternLow := low[2]    // The low of the first bar in Shark-32 pattern

    // Calculate the upper and lower white target lines
    upperTarget := patternHigh + (patternHigh - patternLow)  // Dotted white line above
    lowerTarget := patternLow - (patternHigh - patternLow)   // Dotted white line below

// Initialize variables for the lines
var line greenLine = na
var line redLine = na
var line upperTargetLine = na
var line lowerTargetLine = na

// Draw the lines based on the locked patternHigh, patternLow, and target lines
// if shark32
//     future_bar_index_lines = bar_index + 10

//     // Draw lines based on locked patternHigh and patternLow
//     greenLine := line.new(x1=bar_index[2], y1=patternHigh, x2=future_bar_index_lines, y2=patternHigh, color=color.green, width=2, extend=extend.none)
//     redLine := line.new(x1=bar_index[2], y1=patternLow, x2=future_bar_index_lines, y2=patternLow, color=color.red, width=2, extend=extend.none)

//     // Draw dotted white lines if targetLinesEnabled is true
//     if targetLinesEnabled
//         upperTargetLine := line.new(x1=bar_index[2], y1=upperTarget, x2=future_bar_index_lines, y2=upperTarget, color=targetLineColor, width=targetLineThickness, style=line.style_dotted, extend=extend.none)
//         lowerTargetLine := line.new(x1=bar_index[2], y1=lowerTarget, x2=future_bar_index_lines, y2=lowerTarget, color=targetLineColor, width=targetLineThickness, style=line.style_dotted, extend=extend.none)

//     // Create a box to fill the background between the red and green lines
//     if bgcolorEnabled
//         box.new(left=bar_index[2], top=patternHigh, right=future_bar_index_lines, bottom=patternLow, bgcolor=bgcolorColor)

// -------------------------------------------------------------------------
// Strategy Entry and Exit Parameters
// -------------------------------------------------------------------------

// Input parameters for stop loss
longStopLoss = input.float(1.0, title="Long Stop Loss (%)", minval=0.1)  // Percentage-based stop loss for long
shortStopLoss = input.float(1.0, title="Short Stop Loss (%)", minval=0.1)  // Percentage-based stop loss for short

// Variable to track if a trade has been taken
var bool tradeTaken = false

// Reset the flag when a new Shark-32 pattern is confirmed
if shark32
    tradeTaken := false

// Entry conditions only trigger after the Shark-32 is confirmed
longCondition = ta.crossover(close, patternHigh) and not tradeTaken  // Long entry when close crosses above locked patternHigh
shortCondition = ta.crossunder(close, patternLow) and not tradeTaken  // Short entry when close crosses below locked patternLow

// Trigger long and short trades based on the crossover conditions
if (longCondition)
    label.new(bar_index, high, "Long Trigger", style=label.style_label_down, color=color.green, textcolor=color.white, size=size.small)
    strategy.entry("Shark-32 Long", strategy.long)
    tradeTaken := true  // Set the flag to true after a trade is taken

if (shortCondition)
    label.new(bar_index, low, "Short Trigger", style=label.style_label_up, color=color.red, textcolor=color.white, size=size.small)
    strategy.entry("Shark-32 Short", strategy.short)
    tradeTaken := true  // Set the flag to true after a trade is taken

// Exit long trade based on the upper target line (upper white dotted line) as take profit
if strategy.position_size > 0
    strategy.exit("Take Profit Long", "Shark-32 Long", limit=upperTarget, stop=close * (1 - longStopLoss / 100))

// Exit short trade based on the lower target line (lower white dotted line) as take profit
if strategy.position_size < 0
    strategy.exit("Take Profit Short", "Shark-32 Short", limit=lowerTarget, stop=close * (1 + shortStopLoss / 100))