모멘텀 오스칠레이션 거래 전략

저자:차오장, 날짜: 2023-11-21 16:57:07
태그:

img

전반적인 설명

이 전략은 볼링거 밴드 지표에 기반하여 볼링거 밴드 반전 및 추진력 브레이크오웃의 조합 거래 전략을 구현하기 위해 모멘텀 지표와 결합되어 있습니다. 가격이 아래에서 볼링거 밴드의 중간선을 통과 할 때 길게 가고 가격이 위에서 중간선을 통과 할 때 짧게됩니다. 또한 목표 위험 보상 비율이 충족되면 입상 가격에 기반한 스톱 로스를 추적하고 수익을 취합니다.

전략 논리

이 전략은 이동 평균 지표로 볼링거 밴드 중간 라인 sma를 사용하며, 패람 멀트*스트데브를 통해 밴드 폭을 동적으로 조정합니다. 가격이 아래에서 중간 라인을 통과할 때, 상승 동력이 얻어진다는 것을 나타냅니다. 가격이 위에서 중간 라인을 통과 할 때, 하락 동력이 얻어진다는 것을 나타냅니다. 긴 / 짧은 포지션을 입력한 후, 수익을 추적하고 위험을 제어하기 위해 스톱 로스 및 영업 매개 변수를 설정합니다.

구체적으로 볼링거 밴드는 길이와 멀트라는 두 가지 매개 변수로 계산됩니다. 길이는 중간 라인의 기간을 결정하고 멀트는 밴드 폭을 결정합니다. enterLong 및 enterShort는 브레이크오웃 타이밍을 판단합니다. exitLong 및 exitShort는 엔트리 가격과 목표 비율을 기반으로 스톱 로스를 계산하고 수익 가격을 취합니다.

장점

이 전략은 평균과 추진력에 대한 회귀를 결합하여 주요 트렌드를 일찍 파악 할 수 있습니다. 단순히 이동 평균을 추적하는 것과 비교하면 볼링거 밴드 폭에 기반한 추가 추진량 판단은 일부 잘못된 브레이크를 필터링 할 수 있습니다. 손수 개입없이 엔트리 가격에 따라 직접 중지 손실 및 수익을 설정합니다.

위험성

  • 볼링거 대역에 따라 가격이 뒤떨어지고, 몇 가지 움직임을 놓칠 수 있습니다.
  • 너무 넓은 스톱 로스 설정은 손실 위험을 증가시킬 수 있습니다.
  • 황소 시장에서 짧은 신호는 잘 될 수 없습니다.

기간, 대역 너비 및 스톱 손실 범위와 같은 매개 변수는 전략을 다른 시장 조건에 적응 할 수 있도록 최적화 할 수 있습니다.

강화

  • 거래 부피 또는 변동성을 추가하여 저용량 가짜 브레이크를 피합니다.
  • 기간, 너비 계수 및 중지 손실 비율을 최적화하기 위해 패람 그리드 검색
  • 시장 체제에 따라 단축 또는 단축
  • 추세 방향을 결정하기 위해 기계 학습 모델을 추가

결론

이 전략은 볼링거 밴드 역전과 추진력의 장점을 결합하여 초기부터 일부 트렌드를 파악할 수 있습니다. 매개 변수 조정을 통해 다른 시장 단계에 적응 할 수 있습니다. 직접적인 스톱 로스 / 토프 노프프 계산은 수동 개입을 줄여줍니다. 더 많은 보조 지표를 통합하여 개선 할 여지가 있습니다. 추가 연구 및 최적화에서 점차 향상 될 것입니다.


/*backtest
start: 2023-11-13 00:00:00
end: 2023-11-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("BURATINO", overlay=true)

// Входные параметры
length = input(20, minval=1, title="Length")
mult = input(2.0, minval=0.1, maxval=5, title="Multiplier")
target_percent = input(0.5, minval=0.1, title="Target Percent")
stop_loss_percent = input(95, minval=0.1, title="Stop Loss Percent")

// Расчет полос Боллинджера
basis = sma(close, length)
dev = mult * stdev(close, length)
upper = basis + dev
lower = basis - dev

// Переворот снизу вверх через среднюю линию Боллинджера для открытия лонга
enterLong = cross(close, basis) and close[1] < basis[1]

// Переворот сверху вниз через среднюю линию Боллинджера для открытия шорта
enterShort = cross(basis, close) and close[1] > basis[1]

// Закрытие лонга после роста цены на указанный процент или падения на указанный процент
exitLong = close >= strategy.position_avg_price * (1 + (target_percent / 100)) or close <= strategy.position_avg_price * (1 - (stop_loss_percent / 100))

// Закрытие шорта после падения цены на указанный процент или роста на указанный процент
exitShort = close <= strategy.position_avg_price * (1 - (target_percent / 100)) or close >= strategy.position_avg_price * (1 + (stop_loss_percent / 100))

// Управление позициями и ограничениями на открытие противоположных позиций
strategy.entry("Long", strategy.long, when = enterLong and strategy.position_size == 0)
strategy.entry("Short", strategy.short, when = enterShort and strategy.position_size == 0)

strategy.close("Long", when = exitLong)
strategy.close("Short", when = exitShort)

// Визуализация полос Боллинджера
plot(basis, color=color.blue, title="Basis")
plot(upper, color=color.red, title="Upper")
plot(lower, color=color.green, title="Lower")

더 많은