이 전략은 가격 회전점을 사용하여 지원 및 저항 수준을 동적으로 식별하는 데 기반한 적응적 거래 시스템입니다. 실시간으로 지역 최고와 최저치를 계산하여 주요 가격 수준을 결정하고 그에 따라 거래를 실행합니다. 핵심 강점은 동적인 성격에 있으며 변화하는 시장 조건에 따라 거래 매개 변수를 조정할 수 있으므로 트렌딩 및 범위 시장에 적합합니다.
핵심 논리는 몇 가지 핵심 요소에 기반합니다. 1. 동적 회전 계산: 조정 가능한 회전 길이 매개 변수 (예정 2) 를 사용하여 지역 최고와 최저를 식별 2. 지원/저항 구역: 유효한 거래 구역을 정의하기 위해 지점 주위에서 비율 기반 범위 (예정값 0.4%) 를 설정합니다. 3. 신호 생성: 가격이 지원 이상으로 돌파할 때 긴 신호, 가격이 저항 이하로 돌파할 때 짧은 신호 4. 위험 관리: 계정 자금에 기초한 포지션 크기를 통해 역동적인 스톱 로스 (10%) 및 영리 (27%) 수준을 구현합니다.
이 전략은 엄격한 위험 통제와 결합한 주요 가격 수준을 동적으로 식별함으로써 트렌드 추적 및 역전 거래를 위한 신뢰할 수 있는 틀을 제공합니다. 일부 매개 변수 민감성과 시장 환경 의존성을 나타내면서도 지속적인 최적화와 정교화는 다양한 시장 조건에서 일관된 성능을 가능하게합니다. 성공적인 구현은 거래자가 그 원칙을 깊이 이해하고 특정 시장 상황에 따라 매개 변수를 조정하는 것을 요구합니다.
/*backtest start: 2019-12-23 08:00:00 end: 2025-01-08 08:00:00 period: 1d basePeriod: 1d 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=6 strategy("Dynamic Support and Resistance Pivot Strategy ", overlay=true) // Strategy parameters pivot_length = input.int(2, title="Pivot Length", tooltip="Pivot size to identify peaks and troughs") support_resistance_distance = input.float(0.4, title="Support/Resistance Distance %", tooltip="Distance to consider a support or resistance level in %") // Stop Loss and Take Profit parameters stop_loss_pct = input.float(10.0, title="Stop Loss %", tooltip="Stop loss percentage", minval=0.1) / 100 take_profit_pct = input.float(26.0, title="Take Profit %", tooltip="Take profit percentage", minval=0.1) / 100 // Functions to identify high and low pivots pivot_high = ta.pivothigh(high, pivot_length, pivot_length) pivot_low = ta.pivotlow(low, pivot_length, pivot_length) // Storing support and resistance levels var float resistance_level = na var float support_level = na var float last_pivot_high = na var float last_pivot_low = na // Updating support and resistance based on pivots if (not na(pivot_high)) resistance_level := high[pivot_length] last_pivot_high := high[pivot_length] if (not na(pivot_low)) support_level := low[pivot_length] last_pivot_low := low[pivot_length] // Function to check if the current price is near a support or resistance level is_near_resistance = (not na(resistance_level)) and (close >= resistance_level * (1 - support_resistance_distance / 100)) and (close <= resistance_level * (1 + support_resistance_distance / 100)) is_near_support = (not na(support_level)) and (close >= support_level * (1 - support_resistance_distance / 100)) and (close <= support_level * (1 + support_resistance_distance / 100)) // Cross conditions variables long_cross = ta.crossover(close, support_level) and not na(support_level) short_cross = ta.crossunder(close, resistance_level) and not na(resistance_level) // Entry conditions long_condition = is_near_support and long_cross // Buy when crossing support from below short_condition = is_near_resistance and short_cross // Sell when crossing resistance from above // Order execution if (long_condition) strategy.entry("Long", strategy.long) if (short_condition) strategy.entry("Short", strategy.short) // Stop Loss and Take Profit if (strategy.opentrades > 0) if (strategy.position_size > 0) // For long position avg_price_long = strategy.position_avg_price long_stop_level = avg_price_long * (1 - stop_loss_pct) long_take_profit_level = avg_price_long * (1 + take_profit_pct) strategy.exit("Exit Long", from_entry="Long", stop=long_stop_level, limit=long_take_profit_level) if (strategy.position_size < 0) // For short position avg_price_short = strategy.position_avg_price short_stop_level = avg_price_short * (1 + stop_loss_pct) short_take_profit_level = avg_price_short * (1 - take_profit_pct) strategy.exit("Exit Short", from_entry="Short", stop=short_stop_level, limit=short_take_profit_level) // Plotting support and resistance levels on the chart plot(support_level, title="Support", color=color.green, linewidth=2, style=plot.style_line) plot(resistance_level, title="Resistance", color=color.red, linewidth=2, style=plot.style_line) // Adding labels to show pivot values if (long_condition and not na(support_level)) label.new(bar_index, low[pivot_length], str.tostring(low[pivot_length]), style=label.style_label_up, color=color.green, textcolor=color.white, size=size.small) if (short_condition and not na(resistance_level)) label.new(bar_index, high[pivot_length], str.tostring(high[pivot_length]), style=label.style_label_down, color=color.red, textcolor=color.white, size=size.small)