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

E9 상어-32 패턴 양적 가격 유출 전략

저자:차오장, 날짜: 2024-11-12 14:51:17
태그:

img

전반적인 설명

이 전략은 패턴 인식에 기반을 둔 양적 거래 시스템으로, 샤크-32 촛불 패턴을 식별하고 거래하는 데 초점을 맞추고 있다. 전략은 최고와 최저의 지속적인 변화를 분석하고, 패턴 확인 후 주요 가격 수준을 설정하고, 이러한 레벨의 브레이크에 거래를 실행한다. 패턴 인식, 트렌드 추적 및 가격 브레이크 요소를 결합하여 완전한 거래 시스템을 만듭니다.

전략 원칙

기본 원리는 샤크-32 패턴을 식별하는 데 있습니다. 이는 이전 두 개의 촛불에서 연속적인 낮은 하락과 높은 높이를 요구합니다. 패턴 확인 후 전략은 초기 패턴 촛불의 높고 낮은 것을 주요 가격 수준으로 잠금합니다. 시스템은 가격이 이러한 주요 수준을 넘을 때 포지션을 입력합니다. 잠금 된 최고 이상에서 파기되는 긴 엔트리, 잠금 된 최저 이하에서 파기되는 짧은 엔트리. 전략은 수익 목표를위한 예측 목표 라인과 유연한 스톱-러스 배치에 대한 비율 기반 매개 변수를 사용합니다.

전략적 장점

  1. 정확한 패턴 인식: 주관적 판단을 피하는 엄격한 수학적 정의를 사용하여 패턴을 식별합니다.
  2. 종합적인 리스크 관리: 명확한 스톱 로스 및 수익 목표 설정
  3. 명확한 시각적 피드백: 패턴과 거래 신호를 표시하기 위해 다른 색상의 선과 배경을 사용합니다.
  4. 필터링 반복 신호: 패턴당 하나의 거래만 허용하여 과잉 거래를 방지합니다.
  5. 합리적인 목표 설정: 패턴 범위에 기반한 수익 목표를 설정하여 좋은 위험/이익 비율을 제공합니다.

전략 위험

  1. 시장 위험: 다양한 시장에서 빈번한 잘못된 파업 신호를 생성할 수 있습니다.
  2. 미끄러짐 위험: 빠르게 변화하는 시장에서 상당한 미끄러짐을 겪을 수 있습니다.
  3. 단일 패턴 의존성: 하나의 패턴에 과도하게 의존하면 다른 거래 기회를 놓칠 수 있습니다.
  4. 매개 변수 민감성: 전략 성과는 스톱 로스 및 수익 목표 매개 변수 설정에 크게 의존합니다.

전략 최적화 방향

  1. 볼륨 확인을 추가: 브레이크오웃 유효성을 확인하기 위해 볼륨 변경을 포함
  2. 시장 환경 필터를 구현: 불리한 시장 조건을 필터링하기 위해 트렌드 강도 지표를 추가하십시오.
  3. 스톱 로스 방법 최적화: 전략 적응력을 향상시키기 위해 동적 스톱 로스를 고려하십시오.
  4. 시간 필터를 추가합니다. 특정 변동성 기간을 피하기 위해 거래 세션 필터를 통합합니다.
  5. 자금 관리 개선: 자본 효율을 최적화하기 위해 위치 사이징 모듈을 추가

요약

E9 상어-32 패턴 양적 가격 유출 전략은 명확한 논리를 가진 잘 구성된 거래 시스템입니다. 엄격한 패턴 정의와 명확한 거래 규칙을 통해 수치화 가능한 거래 전략을 구축합니다. 전략은 포괄적인 리스크 관리 시스템과 명확한 시각 피드백을 갖추고 있어 거래자가 쉽게 이해하고 실행할 수 있습니다. 제안된 최적화 방향을 통해 추가 개선의 여지가 있습니다. 이 전략은 체계적인 거래 접근 방식을 추구하는 투자자에게 적합하지만 시장 환경 적응력과 매개 변수 최적화에주의를 기울여야합니다.


/*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))


더 많은