이 전략은 가격 액션과 동적 지지/저항 수준에 기반한 거래 시스템으로, 특정 촛불 패턴이 등장할 때 핵심 가격 수준 근처에서 거래를 실행합니다. 이 시스템은 16 주기 동적 지지/저항 계산 방법을 활용하며, 잠재적 인 시장 반전을 포착하기 위해 네 가지 고전적인 반전 촛불 패턴 - 해머, 쏘팅 스타, 도지 및 핀 바와 결합합니다. 전략은 리스크 관리를 위해 일정한 비율의 수익 및 스톱 로스 수준을 사용하고 입시 신호 엄격성을 제어하기 위해 민감도 매개 변수를 사용합니다.
이 전략의 핵심은 가격 움직임의 경계를 설정하기 위해 지원 및 저항 수준을 동적으로 계산하는 데 있다. 가격이 이러한 핵심 수준에 접근하면 시스템은 반전 신호로 특정 촛불 패턴을 찾는다. 진입 조건은 지원 / 저항 수준의 1.8% (전면 민감도) 내의 패턴 형성을 필요로 한다. 시스템은 16%의 스톱 로스와 9.5%의 이익 취득을 가진 35%의 주식 관리 규칙을 구현하여 거래 당 총 주식의 약 5.6%에서 위험을 효과적으로 제어한다. 이 전략은 파이인 스크립트 (Pine Script) 에서 완전한 거래 관리 기능과 시각화로 구현된다.
이 가격 액션 기반 거래 전략은 트레이더들에게 동적 지원/저항 수준을 고전적 역전 패턴과 결합함으로써 체계적인 거래 접근 방식을 제공합니다. 전략의 강점은 명확한 논리와 제어 가능한 위험에 속하지만 실제 거래 결과에 기반한 지속적인 최적화가 필요합니다. 트레이더들은 라이브 거래 전에 철저한 백테스팅과 매개 변수 최적화를 수행하고 시장 경험을 기반으로 전략을 사용자 정의하는 것이 좋습니다.
/*backtest start: 2024-11-26 00:00:00 end: 2024-12-03 00:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © felipemiransan //@version=5 strategy("Price Action Strategy", overlay=true) // Settings length = input.int(16, title="Support and Resistance Length") sensitivity = input.float(0.018, title="Sensitivity") // Stop Loss and Take Profit stop_loss_pct = input.float(16, title="Stop Loss percentage", minval=0.1) / 100 take_profit_pct = input.float(9.5, title="Take Profit percentage", minval=0.1) / 100 // Function to identify a Hammer isHammer() => body = close - open price_range = high - low lower_shadow = open - low upper_shadow = high - close body > 0 and lower_shadow > body * 2 and upper_shadow < body * 0.5 and price_range > 0 // Function to identify a Shooting Star isShootingStar() => body = open - close price_range = high - low lower_shadow = close - low upper_shadow = high - open body > 0 and upper_shadow > body * 2 and lower_shadow < body * 0.5 and price_range > 0 // Function to identify a Doji isDoji() => body = close - open price_range = high - low math.abs(body) < (price_range * 0.1) // Doji has a small body // Function to identify a Pin Bar isPinBar() => body = close - open price_range = high - low lower_shadow = open - low upper_shadow = high - close (upper_shadow > body * 2 and lower_shadow < body * 0.5) or (lower_shadow > body * 2 and upper_shadow < body * 0.5) // Support and resistance levels support = ta.lowest(low, length) resistance = ta.highest(high, length) // Entry criteria long_condition = (isHammer() or isDoji() or isPinBar()) and close <= support * (1 + sensitivity) short_condition = (isShootingStar() or isDoji() or isPinBar()) and close >= resistance * (1 - sensitivity) // Function to calculate stop loss and take profit (long) calculate_levels(position_size, avg_price, stop_loss_pct, take_profit_pct) => stop_loss_level = avg_price * (1 - stop_loss_pct) take_profit_level = avg_price * (1 + take_profit_pct) [stop_loss_level, take_profit_level] // Function to calculate stop loss and take profit (short) calculate_levels_short(position_size, avg_price, stop_loss_pct, take_profit_pct) => stop_loss_level = avg_price * (1 + stop_loss_pct) take_profit_level = avg_price * (1 - take_profit_pct) [stop_loss_level, take_profit_level] // Buy entry order with label if (long_condition and strategy.opentrades == 0) strategy.entry("Buy", strategy.long) pattern = isHammer() ? "Hammer" : isDoji() ? "Doji" : isPinBar() ? "Pin Bar" : "" label.new(x=bar_index, y=low, text=pattern, color=color.green, textcolor=color.black, size=size.small) // Sell entry order with label if (short_condition and strategy.opentrades == 0) strategy.entry("Sell", strategy.short) pattern = isShootingStar() ? "Shooting Star" : isDoji() ? "Doji" : isPinBar() ? "Pin Bar" : "" label.new(x=bar_index, y=high, text=pattern, color=color.red, textcolor=color.black, size=size.small) // Stop Loss and Take Profit management for open positions if (strategy.opentrades > 0) if (strategy.position_size > 0) // Long position avg_price_long = strategy.position_avg_price // Average price of long position [long_stop_level, long_take_profit_level] = calculate_levels(strategy.position_size, avg_price_long, stop_loss_pct, take_profit_pct) strategy.exit("Exit Long", from_entry="Buy", stop=long_stop_level, limit=long_take_profit_level) if (strategy.position_size < 0) // Short position avg_price_short = strategy.position_avg_price // Average price of short position [short_stop_level, short_take_profit_level] = calculate_levels_short(strategy.position_size, avg_price_short, stop_loss_pct, take_profit_pct) strategy.exit("Exit Short", from_entry="Sell", stop=short_stop_level, limit=short_take_profit_level) // Visualization of Support and Resistance Levels plot(support, title="Support", color=color.green, linewidth=2) plot(resistance, title="Resistance", color=color.red, linewidth=2)