볼링거 밴드 모멘텀 브레이크아웃 거래 전략

저자:차오장, 날짜: 2024-02-05 10:53:46
태그:

img

전반적인 설명

이 전략은 거래 부피가 높을 때 볼링거 밴드 지표와 볼륨 지표를 결합하여 볼링거 상단 지대 이상의 강력한 추진력 브레이크업 기회를 식별하고 긴 포지션을 입력합니다. 또한 트렌드 방향을 결정하고 죽은 포지션을 보유하는 위험을 줄이기 위해 이동 평균 지표를 사용합니다.

전략 논리

  1. 볼링거 밴드 인디케이터를 사용하여 가격이 상단 범위를 넘어서는지 여부를 결정합니다.
  2. 거래량 지표를 사용하여 현재 거래량이 지난 기간 평균보다 현저하게 높는지 여부를 결정합니다.
  3. 거래 부피가 높고 가격이 볼링거 상단보다 높을 때 긴 포지션을 입력합니다.
  4. 이동 평균 지표를 사용하여 단기 및 중장기 트렌드를 결정하여 시간적 손실을 줄입니다.

이 전략은 주로 세 가지 요소를 고려합니다: 가격 수준, 추진력 및 트렌드. 가격이 볼링거 상단 밴드를 파기하여 구매 구역으로 들어가면 거래 부피의 급증은 강력한 추진력과 자본 유입을 나타냅니다. 이것은 긴 지점에 진입하는 올바른 시점입니다. 그 다음 시중 트렌드를 결정하기 위해 움직이는 평균을 사용하여 죽은 지위를 피합니다. 가격 액션, 추진력 및 위험 통제를 결합하여 강력한 트렌드에서 이익을 얻는 것을 목표로합니다.

장점

  1. 정확한 신호, 거짓 파업을 피합니다. 부피 필터를 결합하여, 그것은 단지 진짜 강한 추진력을 구입하고, 위험을 줄입니다.

  2. 이동평균 추세 결정을 통해 시간적으로 손실을 줄일 수 있고, 보유 손실을 줄일 수 있습니다.

  3. 결정 수행을 위해 여러 지표를 결합하는 수량 전략 구현. 다양한 제품 및 시간 프레임에 대한 유연한 매개 변수 조정.

  4. 명확한 코드 구조, 읽기 쉽고 유지 관리하기 쉽습니다. 지표 계산, 신호 생성 및 위치 관리의 모듈 디자인.

위험성

  1. 볼링거 밴드는 극심한 가격 변동, 신호가 누락되거나 잘못된 신호를 생성하는 동안 실패 할 수 있습니다.

  2. 전체 거래 부피가 낮을 때 수익이 없습니다. 충분한 거래 부피가 없으면 구매 신호가 수익성이 없을 수 있습니다.

  3. 이동 평균 트렌드 결정 또한 실패 할 수 있습니다. 효과적인 스톱 손실을 완전히 보장 할 수 없습니다.

  4. 잘못된 매개 변수 조정 또한 전략 수익성에 영향을 미칩니다. 예를 들어, 너무 짧은 거래 시간 창이 트렌드 반전을 놓칠 수 있습니다.

최적화 방향

  1. 더 나은 트렌드 및 지원/저항 분석을 위해 더 많은 기술적 인 지표를 추가하여 스톱 로스를 개선합니다. 예를 들어 촛불 패턴, 채널, 주요 지원 수준.

  2. 기계 학습 모델을 추가하여 실제 탈출 가능성을 판단하여 잘못된 신호를 줄이십시오. 예를 들어 LSTM 딥 러닝 모델.

  3. 동적인 포지션 사이즈, 트래일링 스톱 로스 같은 자본 관리 전략을 최적화하여 단일 거래 손실 영향을 줄이십시오.

  4. 더 많은 제품과 시간 프레임을 테스트하고 볼린저 밴드, 볼륨 창과 같은 매개 변수를 조정하여 전략의 안정성을 향상시킵니다.

결론

이 전략은 볼링거 밴드 및 거래량 지표를 통합하여 강력한 추진력 구매 기회를 식별하며, 움직이는 평균은 효과적인 스톱 로스를 보장합니다. 단일 지표 전략에 비해 더 높은 정확성과 위험 제어 기능을 가지고 있습니다. 모듈형 디자인, 트렌드 필터 및 스톱 로스 메커니즘으로, 그것은 추진력 브레이크아웃 거래 전략을 쉽게 최적화합니다.


/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 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/
// © KAIST291

//@version=4
initial_capital=1000
strategy("prototype", overlay=true)
length1=input(1)
length3=input(3)
length7=input(7)
length9=input(9)
length14=input(14)
length20=input(20)
length60=input(60)
length120=input(120)
ma1= sma(close,length1)
ma3= sma(close,length3)
ma7= sma(close,length7)
ma9= sma(close,length9)
ma14=sma(close,length14)
ma20=sma(close,length20)
ma60=sma(close,length60)
ma120=sma(close,length120)
rsi=rsi(close,14)
// BUYING VOLUME AND SELLING VOLUME //
BV = iff( (high==low), 0, volume*(close-low)/(high-low))
SV = iff( (high==low), 0, volume*(high-close)/(high-low))
vol = iff(volume > 0, volume, 1)
dailyLength = input(title = "Daily MA length", type = input.integer, defval = 50, minval = 1, maxval = 100)
weeklyLength = input(title = "Weekly MA length", type = input.integer, defval = 10, minval = 1, maxval = 100)
//-----------------------------------------------------------
Davgvol = sma(volume, dailyLength)
Wavgvol = sma(volume, weeklyLength)
//-----------------------------------------------------------
length = input(20, minval=1)
src = input(close, title="Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
mult2= input(1.5, minval=0.001, maxval=50, title="exp")
mult3= input(1.0, minval=0.001, maxval=50, title="exp1")
mult4= input(2.5, minval=0.001, maxval=50, title="exp2")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
dev2= mult2 * stdev(src, length)
Supper= basis + dev2
Slower= basis - dev2
dev3= mult3 * stdev(src, length)
upper1= basis + dev3
lower1= basis - dev3
dev4= mult4 * stdev(src, length)
upper2=basis + dev4
lower2=basis - dev4
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))
//----------------------------------------------------
exit=(close-strategy.position_avg_price / strategy.position_avg_price*100)
bull=( BV>SV and BV>Davgvol)
bull2=(BV>SV and BV>Davgvol)
bux =(close>Supper and close>Slower and volume<Davgvol)
bear=(SV>BV and SV>Davgvol)
con=(BV>Wavgvol and rsi>80)
imInATrade = strategy.position_size != 0
highestPriceAfterEntry = valuewhen(imInATrade, high, 0)
// STRATEGY LONG //
if (bull and close>upper1 and close>Supper and high>upper and rsi<80)
    strategy.entry("Long",strategy.long)

if (strategy.position_avg_price*1.02<close)
    strategy.close("Long")
else if (low<ma9 and strategy.position_avg_price<close)
    strategy.close("Long")
else if (ma20>close and strategy.position_avg_price<close )
    strategy.close("Long")
else if (rsi>80 and strategy.position_avg_price<close)
    strategy.close("Long")
else if (strategy.openprofit < strategy.position_avg_price*0.9-close)
    strategy.close("Long")
else if (high<upper and strategy.position_avg_price<close)
    strategy.close("Long")
//////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////
strategy.entry("Short",strategy.short,when=low<ma20 and low<lower1 and close<Slower and crossunder(ma60,ma120))

if (close<strategy.position_avg_price*0.98)
    strategy.close("Short")

else if (rsi<20)
    strategy.close("Short")



더 많은