역방향 브레이크아웃 트레이딩 전략


생성 날짜: 2023-10-25 12:09:40 마지막으로 수정됨: 2023-10-25 12:38:23
복사: 0 클릭수: 396
1
집중하다
1138
수행원

역방향 브레이크아웃 트레이딩 전략

개요

역폭 거래 전략 (reverse breakout trading strategy) 은 가격의 연속적인 상승 또는 하락을 기반으로 역으로 거래하는 거래 전략이다. 이 전략은 가격의 연속적인 상승 또는 하락의 주기를 설정하여, 가격이 특정 경향을 형성한 후 역으로 거래하여 이익을 얻는다.

전략 원칙

이 전략은 다음과 같은 부분들을 통해 이루어집니다.

  1. 가격의 연속적인 상승과 하락의 주기 길이를 설정합니다. 즉, Consecutive BarsUp와 Consecutive BarsDown입니다. 현재의 주기적 가격 추세는 설정된 길이를 달성한 후에 거래 신호를 유발합니다.

  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. 추가량능력 지표 판단. 거래량 변화와 같은 지표와 결합하여, 단순히 K선 형태에 따라 발생하는 잘못된 신호를 피한다.

  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)