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

확장성 있는 브레이크아웃 거래 전략

저자:차오장, 날짜: 2023-10-30 17:25:17
태그:

img

전반적인 설명

확장 가능한 브레이크아웃 거래 전략은 가격이 가격 변동에 의해 식별되는 주요 지원 및 저항 수준을 통과 할 때 거래 신호를 생성합니다. 그것은 매우 유연하고 확장 가능한 브레이크아웃 전략입니다. 이 전략은 매개 변수를 조정하여 다른 시간 프레임에 적응 할 수 있으며 최적화를 위해 추가 필터와 리스크 관리 메커니즘을 쉽게 통합 할 수 있습니다.

어떻게 작동 합니까?

이 전략은 우선swings()뷰백 기간을 기반으로 스윙 최고와 최저를 계산하는 함수. 뷰백 기간은swingLookback매개 변수, 20 바로 기본. 가격이 스윙 최상위 이상으로 넘어갈 때 긴 신호가 발생하고, 가격이 스윙 최저 아래로 넘어갈 때 짧은 신호가 발생합니다.

특히, 긴 신호는 닫기 가격이 스윙 높은 가격보다 크거나 같을 때 발생한다. 짧은 신호는 닫기 가격이 스윙 낮은 가격보다 작거나 같을 때 발생한다.

이 전략은 또한stopTargetPercent스톱 로스 레벨을 정의하는 매개 변수입니다. 예를 들어, 긴 스톱 로스는 스윙 하위보다 5% 낮고 짧은 스톱 로스는 스윙 하위보다 5% 낮게 설정할 수 있습니다.

이 전략의 장점은 거래 빈도를 제어하기 위해 룩백 기간을 조정할 수 있는 유연성이다. 짧은 룩백 기간은 브레이크에 더 민감하게 작용하고 거래 빈도를 증가시킨다. 더 긴 룩백 기간은 민감성과 거래 빈도를 감소시키지만 기회를 놓칠 수 있다. 최적의 룩백 기간을 찾는 것은 전략을 최적화하는 데 매우 중요하다.

장점

  • 간단한 브레이크아웃 로직, 이해하기 쉽고 구현하기 쉬운
  • 룩백 기간은 매개 변수를 최적화하고 거래 빈도를 제어 할 수 있습니다.
  • 손해를 중지, 후속 중지 및 다른 위험 관리 쉽게 통합
  • 필터를 추가하고 수익성을 높이기 위해 매우 확장 가능
  • 내일 거래 또는 스윙 거래의 모든 기간에 적용됩니다.

위험 및 완화

  • 너무 짧은 리크백 기간은 과잉 거래로 이어질 수 있습니다.
  • 너무 긴 리크백 기간은 거래 기회를 놓칠 수 있습니다.
  • 너무 큰 스톱 로스는 수익 잠재력을 감소시킵니다.
  • 너무 단단한 스톱 손실은 자주 중지 될 수 있습니다.

완화:

  • 최적의 매개 변수를 찾기 위해 다른 룩백 기간을 테스트
  • 수익과 위험 통제를 균형을 맞추기 위해 스톱 로스 레벨을 최적화합니다.
  • 수익을 잠금하기 위해 후속 정지 또는 사다리 출구를 추가하십시오.
  • 거래 신호의 품질을 향상시키기 위해 필터를 추가
  • 백테스팅을 통해 매개 변수를 최적화

더 나은 기회

이 전략은 여러 가지 방법으로 향상될 수 있습니다.

  1. 최적의 매개 변수를 찾기 위해 다른 룩백 기간 값을 테스트합니다.

  2. 5m, 15m, 1h와 같은 다른 시간 프레임을 테스트하여 최상의 시간 프레임을 결정합니다.

  3. 스톱 로스 비율을 최적화하여 수익 잠재력과 위험 관리의 균형을 맞추십시오.

  4. 부피, 변동성 같은 필터를 추가해서 열등한 설정을 줄이세요.

  5. 더 많은 위험 관리 메커니즘을 통합합니다.

  6. 전진 분석과 기계 학습을 통해 매개 변수 최적화

  7. AI/머신러닝을 도입하여 매개 변수를 자동으로 최적화할 수 있습니다.

결론

확장 가능한 브레이크아웃 거래 전략은 견고하고 사용자 정의 가능한 브레이크아웃 시스템입니다. 사용이 간단하고 룩백을 조정하고 필터를 추가하여 매우 적응력이 있습니다. 위험 통제를 위해 위험 관리를 쉽게 통합 할 수 있습니다. 매개 변수 최적화 및 기계 학습 통합으로 전략은 변화하는 시장에 적응하기 위해 시간이 지남에 따라 진화 할 수 있습니다. 전반적으로 권장되는 보편적인 브레이크아웃 전략입니다.


/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © deperp

//@version=5
// strategy("Range Breaker", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.07, pyramiding=0)

// Backtest Time Period

useDateFilter = input.bool(true, title="Begin Backtest at Start Date",
     group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2020"), 
     title="Start Date", group="Backtest Time Period",
     tooltip="This start date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")

inTradeWindow = true

swingLookback = input.int(20, title="Swing Lookback", minval=3)
stopTargetPercent = input.float(5, title="Stop Target Percentage", step=0.1)

// Calculate lockback swings
swings(len) =>
    var highIndex = bar_index
    var lowIndex = bar_index
    var swingHigh = float(na)
    var swingLow = float(na)
    
    upper = ta.highest(len)
    lower = ta.lowest(len)
    
    if high[len] > upper
        highIndex := bar_index[len]
        swingHigh := high[len]

    if low[len] < lower
        lowIndex := bar_index[len]
        swingLow := low[len]

    [swingHigh, swingLow, highIndex, lowIndex]


// Strategy logic
[swingHigh, swingLow, highIndex, lowIndex] = swings(swingLookback)
longCondition = inTradeWindow and (ta.crossover(close, swingHigh))
shortCondition = inTradeWindow and (ta.crossunder(close, swingLow))

if longCondition
    strategy.entry("Long", strategy.long)
if shortCondition
    strategy.entry("Short", strategy.short)

longStopTarget = close * (1 + stopTargetPercent / 100)
shortStopTarget = close * (1 - stopTargetPercent / 100)

strategy.exit("Long Stop Target", "Long", limit=longStopTarget)
strategy.exit("Short Stop Target", "Short", limit=shortStopTarget)

// Plot break lines
// line.new(x1=highIndex, y1=swingHigh, x2=bar_index, y2=swingHigh, color=color.rgb(255, 82, 82, 48), width=3, xloc=xloc.bar_index, extend=extend.right)
// line.new(x1=lowIndex, y1=swingLow, x2=bar_index, y2=swingLow, color=color.rgb(76, 175, 79, 47), width=3, xloc=xloc.bar_index, extend=extend.right)


// Alert conditions for entry and exit
longEntryCondition = inTradeWindow and (ta.crossover(close, swingHigh))
shortEntryCondition = inTradeWindow and (ta.crossunder(close, swingLow))

longExitCondition = close >= longStopTarget
shortExitCondition = close <= shortStopTarget

alertcondition(longEntryCondition, title="Long Entry Alert", message="Enter Long Position")
alertcondition(shortEntryCondition, title="Short Entry Alert", message="Enter Short Position")
alertcondition(longExitCondition, title="Long Exit Alert", message="Exit Long Position")
alertcondition(shortExitCondition, title="Short Exit Alert", message="Exit Short Position")

더 많은