역동적인 브레이크업 거래 전략

저자:차오장, 날짜: 2023-10-25 12:09:40
태그:

img

전반적인 설명

상반된 브레이크아웃 거래 전략 (contrarian breakout trading strategy) 은 연속적인 가격 상승이나 하락에 기반한 상반된 신호를 받아 짧은 조건이 충족되면 긴 조건이 충족되면 긴 조건이 충족되면 긴 조건으로 이동하거나 짧은 조건으로 이동하는 전략이다. 자산이 주어진 전략으로 손실을 초래할 때 반대 거래를 통해 이익을 창출하는 것을 목표로합니다.

전략 논리

이 전략은 주로 다음과 같은 부분으로 실행됩니다.

  1. 가격 상승과 하락을 위한 연속 시기를 설정합니다. 즉, 연속적인 바스업과 연속적인 바스다운입니다. 현재 기간 트렌드가 설정된 길이에 도달하면 거래 신호가 활성화됩니다.

  2. 전기 가격에 대한 현재 가격의 상승과 하락을 계산합니다. 상승과 하락을 기반으로 현재 연속 상승 또는 하락 기간 상승과 하락의 길이를 계산합니다.

  3. 백테스팅 시간 범위를 설정하여 time_cond을 통해 백테스팅 시간 내에서만 전략을 작동하도록 제한합니다.

  4. 일일 거래 시간을 설정하여 timetobuy를 통해 설정된 시간 내에만 발행되는 거래 신호를 제한합니다.

  5. 연속 상승 사이클이 설정된 길이를 도달하면, strategy.long를 통해 긴 신호를 발산합니다. 연속 하락 사이클이 설정된 길이를 도달하면, strategy.short를 통해 짧은 신호를 발산합니다.

  6. 스톱 로스 및 영업 수익 가격을 설정할 수 있습니다. 긴 포지션에 단기 스톱을 설정하고 짧은 포지션에 장기 스톱을 설정하십시오. 긴 포지션에 장기 영업 수익을 설정하고 짧은 포지션에 단기 영업 수익을 설정하십시오.

  7. 트레이드 신호 메시지는 전송 도중 설정할 수 있습니다.

  8. 상위 매개 변수와 가격 수준에 따라 조건이 충족되면 긴 신호나 짧은 신호를 발송합니다.

이점 분석

이 반대적인 탈출 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 가격 반전 지점을 포착합니다. 역행 작전은 좋은 이익을 얻을 수 있습니다. 가격이 추세를 형성 할 때 반대 방향으로 작전은 가격 반전에서 이익을 얻을 수 있습니다.

  2. 유연한 구성 매개 변수. 연속 기간과 같은 매개 변수를 조정할 수 있으며, 스톱 로스 및 취리 레벨을 설정할 수 있으며, 거래 시간 프레임을 제한할 수 있습니다. 매개 변수는 시장 조건에 따라 최적화 할 수 있습니다.

  3. 스톱 로스 및 영업이익은 위험을 조절할 수 있습니다. 스톱 로스 및 영업이익을 미리 설정하면 장기 또는 단위로 거래 한 후 거래 위험을 제어 할 수 있습니다.

  4. 트레이드 메시지는 자동화 된 거래를 촉진합니다. 트레이드 신호 메시지를 설정하면 자동화 된 거래 시스템과의 통합을 촉진합니다.

  5. 백테스팅 시간 범위는 전략 테스트를 용이하게 합니다. 백테스팅 시간 범위 설정을 추가하면 다른 시장 조건에서 전략 성과를 쉽게 관찰할 수 있습니다.

위험 분석

이 전략은 또한 몇 가지 위험을 가지고 있습니다.

  1. 중요한 뉴스 이벤트를 피하십시오. 주요 발표 동안 가격 추세는 예측할 수 없으며, 동시에 장기 및 단기 신호 및 손실을 유발합니다. 주요 경제 발표는 피해야합니다.

  2. 반전이 명확하지 않을 때 덜 효과적입니다. 트렌드가 모호할 때 덜 효과적이므로 반대 거래는 신중하게 사용해야합니다.

  3. 백테스팅 데이터 과잉 적합 위험. 최적화는 미래의 추세를 나타내지 않는 백테스팅 데이터에 대한 과도한 의존을 피해야합니다. 매개 변수는 라이브 거래 중에 적절하게 조정해야합니다.

  4. 높은 거래 빈도는 과잉 거래의 위험이 있습니다. 짧은 주기 설정은 과도한 거래 빈도와 장기적인 안정적인 이익의 위험을 초래할 수 있습니다.

  5. 스톱 손실 및 수익 전략은 위험을 줄이기 위해 최적화 될 수 있습니다. 고정 스톱은 후속 스톱으로 더 향상 될 수 있습니다.

최적화 방향

이 전략은 다음 측면에서 더 이상 최적화 될 수 있습니다.

  1. 트렌드를 감지하여 트렌드가 아닌 시장에서 무작위적인 반전을 피하기 위해 변동성, 채널 등을 사용하여 트렌드를 측정하고 반전을 포착합니다.

  2. % 기반, ATR 또는 다른 적응적인 방법을 사용하여 시장 변동성에 따라 정지 및 취득을 최적화합니다.

  3. 부피 분석을 추가하여 가격 패턴에서만 잘못된 신호를 피합니다.

  4. 단일 자산 위험을 줄이기 위해 여러 상품에 포트폴리오 다양화

  5. 매개 변수 최적화 및 기계 학습. 더 많은 역사적 데이터를 수집하고 기계 학습을 사용하여 더 강력한 전략을 위해 매개 변수를 자동 최적화합니다.

결론

역전적 브레이크아웃 전략은 역전적 운영을 통해 가격 반전을 포착함으로써 좋은 거래 신호를 제공합니다. 장점은 유연한 구성, 위험 통제 및 자동화 거래에 적합성을 포함합니다. 그러나 위험이 존재하며 장기적인 안정적인 수익을 위해 매개 변수 및 논리의 지속적인 개선이 필요합니다.


/*backtest
start: 2023-10-17 00:00:00
end: 2023-10-24 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

// Strategy
strategy("Up/Down Strategy - Contrarian", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash)

consecutiveBarsUp = input(1, title='Consecutive Bars Up')
consecutiveBarsDown = input(1, title='Consecutive Bars Down')

price = close

ups = 0.0
ups := price > price[1] ? nz(ups[1]) + 1 : 0

dns = 0.0
dns := price < price[1] ? nz(dns[1]) + 1 : 0

// Strategy Backtesting
startDate  = input(timestamp("2021-01-01T00:00:00"), type = input.time, title='Backtesting Start Date')
finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time, title='Backtesting End Date')

time_cond  = true

//Time Restriction Settings
startendtime = input("", title='Time Frame To Enter Trades')
enableclose = input(false, title='Enable Close Trade At End Of Time Frame')
timetobuy = true
timetoclose = true

// Stop Loss & Take Profit Tick Based
enablesltp = input(false, title='Enable Take Profit & Stop Loss')
stopTick = input(5.0, title='Stop Loss Ticks', type=input.float) / 100
takeTick = input(10.0, title='Take Profit Ticks', type=input.float) / 100

longStop = strategy.position_avg_price - stopTick
shortStop = strategy.position_avg_price + stopTick
shortTake = strategy.position_avg_price - takeTick
longTake = strategy.position_avg_price + takeTick

plot(strategy.position_size > 0 and enablesltp ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL")
plot(strategy.position_size < 0 and enablesltp ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL")
plot(strategy.position_size > 0 and enablesltp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit")
plot(strategy.position_size < 0 and enablesltp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit")

// Alert messages
message_enterlong  = input("", title="Long Entry message")
message_entershort = input("", title="Short Entry message")
message_closelong = input("", title="Close Long message")
message_closeshort = input("", title="Close Short message")

// Strategy Execution
if (dns >= consecutiveBarsDown) and time_cond and timetobuy
    strategy.entry("Long", strategy.long, stop = high + syminfo.mintick, alert_message = message_enterlong)
    
if (ups >= consecutiveBarsUp) and time_cond and timetobuy
    strategy.entry("Short", strategy.short, stop = low + syminfo.mintick, alert_message = message_entershort)
    
if strategy.position_size < 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closelong)
if strategy.position_size > 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closeshort)
    
if strategy.position_size < 0 and enablesltp and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size > 0 and enablesltp and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)






더 많은