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

동적 지지 및 저항 적응 피브트 거래 전략

저자:차오장, 날짜: 2025-01-10 15:08:24
태그:ATR피브

 Dynamic Support and Resistance Adaptive Pivot Trading Strategy

전반적인 설명

이 전략은 가격 회전점을 사용하여 지원 및 저항 수준을 동적으로 식별하는 데 기반한 적응적 거래 시스템입니다. 실시간으로 지역 최고와 최저치를 계산하여 주요 가격 수준을 결정하고 그에 따라 거래를 실행합니다. 핵심 강점은 동적인 성격에 있으며 변화하는 시장 조건에 따라 거래 매개 변수를 조정할 수 있으므로 트렌딩 및 범위 시장에 적합합니다.

전략 원칙

핵심 논리는 몇 가지 핵심 요소에 기반합니다. 1. 동적 회전 계산: 조정 가능한 회전 길이 매개 변수 (예정 2) 를 사용하여 지역 최고와 최저를 식별 2. 지원/저항 구역: 유효한 거래 구역을 정의하기 위해 지점 주위에서 비율 기반 범위 (예정값 0.4%) 를 설정합니다. 3. 신호 생성: 가격이 지원 이상으로 돌파할 때 긴 신호, 가격이 저항 이하로 돌파할 때 짧은 신호 4. 위험 관리: 계정 자금에 기초한 포지션 크기를 통해 역동적인 스톱 로스 (10%) 및 영리 (27%) 수준을 구현합니다.

전략적 장점

  1. 높은 적응력: 정적 수준에서 지연을 피하여 시장 조건에 따라 지원/저항 수준을 동적으로 조정합니다.
  2. 통제된 위험: 엄격한 비율 기반의 중지 및 동적 위치 크기를 통해 거래당 합리적인 위험을 유지합니다.
  3. 확장성: 다양한 시장 환경에서 최적화를 위해 여러 시간 프레임 및 매개 변수 조합을 지원합니다.
  4. 투명성: 모든 신호와 가격 수준이 그래프에 시각적으로 표시되는 명확한 거래 논리

전략 위험

  1. 가짜 브레이크 위험: 지지/저항지대 매개 변수를 조정해야 하는 범위 시장에서 빈번한 잘못된 신호를 생성할 수 있습니다.
  2. 슬라이프 효과: 실제 실행 가격은 유동성이 낮은 시장 조건에서 신호 가격과 크게 다를 수 있습니다.
  3. 트렌드 의존성: 트렌드 시장에서 전략은 더 잘 수행되지만 통합 단계에서 과도한 신호를 생성 할 수 있습니다.
  4. 매개 변수 민감성: 매개 변수 설정에 크게 의존하는 성능, 최적화를 위해 철저한 백테스팅이 필요합니다.

최적화 방향

  1. 변동성에 기초한 자동 매개 변수 조정을 위한 시장 환경 인식 모듈 추가
  2. 부피 및 추가 기술 표시를 확인 신호로 포함
  3. 시장 변동성에 기초한 동적 조정으로 포지션 사이징 알고리즘을 최적화
  4. 불리한 기간 동안 거래를 피하기 위해 시간 필터를 구현하십시오.
  5. 시장 변동성에 기초한 동적 조정으로 적응 가능한 스톱 로스 알고리즘을 개발

요약

이 전략은 엄격한 위험 통제와 결합한 주요 가격 수준을 동적으로 식별함으로써 트렌드 추적 및 역전 거래를 위한 신뢰할 수 있는 틀을 제공합니다. 일부 매개 변수 민감성과 시장 환경 의존성을 나타내면서도 지속적인 최적화와 정교화는 다양한 시장 조건에서 일관된 성능을 가능하게합니다. 성공적인 구현은 거래자가 그 원칙을 깊이 이해하고 특정 시장 상황에 따라 매개 변수를 조정하는 것을 요구합니다.


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


관련

더 많은