이 전략은 패턴 인식에 기반을 둔 양적 거래 시스템으로,
기본 원리는
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))