리차드 북스테이버 모멘텀 브레이크아웃 전략


생성 날짜: 2023-11-02 15:12:46 마지막으로 수정됨: 2023-11-02 15:12:46
복사: 1 클릭수: 695
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

리차드 북스테이버 모멘텀 브레이크아웃 전략

개요

동력 돌파 전략은 리처드 벅스타버가 1984년에 제시한 개념에 기초하고 있는데, 큰 변동이 발생하면 시장이 계속 이 방향으로 움직일 수 있다는 것이다. 따라서 이 전략은 ATR을 사용하여 변동성을 측정하고, 종결 가격 변화가 ATR의 수배를 넘어서면 거래 신호를 낸다.

전략 원칙

이 전략은 우선 시장의 변동성을 측정하기 위해 ATR 지표를 계산한다. 그리고 매일의 종결 가격 변화의 절대 값을 계산한다. 종결 가격이 ATR 지표 값의 몇 배 이상을 변화하면 거래 신호가 발생한다. 구체적으로, 종결 가격 상승률이 ATR 상승률보다 더 높다면 더 많이; 종결 가격 하락률이 ATR 상승률보다 더 높다면 공백한다.

이 전략은 ATR 지표를 사용하여 돌파 경계를 동적으로 결정한다. 시장의 변동성이 증가하면 경계가 상승하여 잘못된 거래를 줄일 수 있다. 시장의 변동성이 감소하면 경계가 감소하여 돌파 기회를 잡을 수 있다.

우위 분석

  • 동적 ATR 중지 (Dynamic ATR Stop) 은 위험을 효과적으로 제어하고, 시장의 변동성에 따라 중지 포인트가 변경될 수 있도록 한다.
  • 브레이크를 통해 거래 신호를 생성하여 시장의 흐름의 전환을 파악할 수 있다.
  • 매개 변수 최적화 공간은 넓고, 다양한 품종과 주기별로 조정할 수 있다.
  • 전략적 아이디어는 간단하고 명확하며, 이해하기 쉽고 실행이 가능합니다.

위험 분석

  • ATR 지표는 급격한 사건에 느리게 반응하여 첫 번째 돌파구를 놓칠 수 있습니다.
  • 다방위 균형이 나빠서, 다방위 또는 공백 시간만 하는 것이 양방향 거래보다 훨씬 더 효과적이다.
  • 전략적 매개 변수는 너무 쉽게 최적화될 수 있고 실제 효과는 좋지 않을 수 있다.
  • 거래가 빈번하고 거래 비용이 높을 수 있습니다.

다른 지표와 결합하여 거래 시기를 필터링하여 효율성을 높이는 것을 고려할 수 있습니다. 또한 품종 특성에 따라 더 나은 매개 변수를 선택할 수 있습니다. 마틴겔 알고리즘과 같은 기술을 사용하여 거래 빈도를 제어합니다.

최적화 방향

  • 다른 지표와 결합하여 트렌드 방향을 판단하여 잘못된 거래를 방지 할 수 있습니다. 예를 들어 RSI, MACD 등.
  • 포지션 관리 모듈을 추가하여 시장 상황에 따라 포지션을 조정할 수 있습니다.
  • 다양한 품종에 대해 최적의 선택 가능한 파라미트 조합
  • 기계 학습 기술을 결합하여 자동 최적화 매개 변수를 사용할 수 있다.

요약하다

동력 돌파 전략은 간단하고 직접적이며, 돌파를 이용하여 거래 신호를 생성한다. ATR 상쇄는 시장의 변동성에 적응할 수 있게 한다. 이 전략은 파라미터 최적화에 의존하여 좋은 효과를 얻을 수 있다. 그러나, 첫 번째 돌파를 놓친 것, 빈번한 거래 등과 같은 몇 가지 문제도 있다. 이것은 복잡한 시장에서 안정적으로 이익을 얻기 위해 다른 기술과 함께 추가적으로 개선되어야 한다.

전략 소스 코드
/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 00:00:00
period: 1d
basePeriod: 1h
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/
// © EduardoMattje

//@version=5
strategy("Volatility System", overlay=false, margin_long=0, margin_short=0, default_qty_type=strategy.percent_of_equity, 
 default_qty_value=100, process_orders_on_close=true, initial_capital=20000)

// Inputs

var averageLength = input.int(14, "Average length", 2)
var multiplier = input.float(2.0, "Multiplier", 0.0, step=0.1)

// Calculations

atr = ta.atr(averageLength) * multiplier
closingChange = ta.change(close, 1)

atrPenetration(int signal) =>
    res = closingChange * signal > atr[1]

longCondition = atrPenetration(1)
shortCondition = atrPenetration(-1)

// Order calls

if (longCondition)
    strategy.entry(strategy.direction.long, strategy.long)

if (shortCondition)
    strategy.entry(strategy.direction.short, strategy.short)

// Visuals

plot(atr, "ATR", color.white, 2)
plot(math.abs(closingChange), "Absolute close change", color.red)