볼링거 밴드 브레이크업 거래 전략

저자:차오장, 날짜: 2023-12-19 14:08:45
태그:

img

전반적인 설명

이 전략은 볼링거 밴드의 상부 및 하부 레일을 기반으로 언제 가격이 볼링거 밴드의 상부 레일을 뚫고 장전하고 하부 레일을 뚫고 단위로 갈 수 있는지 결정합니다. 트렌드 추적 유형의 전략에 속합니다.

전략 논리

이 전략은 극한 가격 범위를 결정하기 위해 볼링거 밴드의 중부 / 상부 / 하부 레일을 사용합니다. 중부 레일은 지난 25 기간 동안의 폐쇄 가격의 간단한 이동 평균입니다. 상부 및 하부 레일은 중부 레일 위에 및 아래에 하나의 표준 편차입니다. 가격이 상부 또는 하부 레일을 뚫을 때, 그것은 브레이크와 비정상적인 가격 행동이 있음을 나타냅니다. 이는 거래 결정을 내리는 데 사용할 수 있습니다.

만약 가격이 하부 레일 아래에 있다면, 장거리. 만약 가격이 상부 레일 위에 있다면, 단위로 가십시오. 장거리 할 때, 스톱 로스를 엔트리 가격에 스톱 로스 인수와 곱하여 엔트리 가격에 스톱 로스 인수와 곱하여 수익을 취하십시오.

이 전략은 또한 불필요한 거래를 피하기 위해 24 시간 동안 하나의 신호만 허용하는 것과 같은 몇 가지 보조 규칙을 포함합니다.

전략 의 장점

  1. 비정상적인 가격 범위를 결정하기 위해 볼링거 밴드를 사용하는 것은 가격 추세를 파악할 수 있는 트렌드 추적 전략에 속합니다.
  2. 스톱 로즈와 취득 매개 변수는 단일 손실을 통제하는 원칙에 따라 설정됩니다.
  3. 이중 신호와 불필요한 거래를 피하기 위해 몇 가지 보조 규칙이 추가됩니다.

전략 의 위험

  1. 볼링거 밴드는 가격 트렌드를 완전히 표현할 수 없으며 잘못된 신호가 있을 수 있습니다.
  2. 부적절한 타이밍의 신호는 손실로 이어질 수 있습니다.
  3. 트렌드 또는 트렌드 없는 시장의 기간과 동력은 예측하기 어렵고, 불필요한 긴 포지션으로 이어질 수 있습니다.

위험 관리:

  1. 브레이킹 신호 타이밍을 최적화하기 위해 볼링거 밴드 매개 변수를 조정합니다.
  2. 주요 추세를 결정하기 위해 다른 지표를 포함합니다.
  3. 다른 제품과 시장 조건에 따라 Stop Loss 및 Take Profit 범위를 설정합니다.

최적화 방향

  1. 현재 시장 조건에 더 잘 맞게 만들기 위해 볼링거 밴드 매개 변수를 적응적으로 최적화하는 것을 고려하십시오.
  2. 트렌드 신호의 신뢰성을 판단하고 잘못된 신호를 피하기 위해 다른 지표를 포함합니다.
  3. 기계 학습 모델을 통합하여 최적의 긴 시간 및 짧은 시간을 자동으로 식별합니다.

결론

요약하면, 이것은 비정상적인 가격을 결정하고 트렌드를 추적하기 위해 볼링거 밴드를 사용하는 간단한 트렌드 추적 전략입니다. 매개 변수 최적화, 위험 통제 및 신호 필터링에 개선할 여지가 있지만 핵심 아이디어는 간단하고 명확하여 학습을위한 초보자 전략으로 적합합니다.


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

//@version=5
strategy("I11L OIL Bot",overlay=true, initial_capital=1000000,default_qty_value=1000000,default_qty_type=strategy.cash,commission_type=strategy.commission.percent,commission_value=0.00)

leverage = input.float(1,"Leverage (x)",step=1)
SL_Factor = 1 - input.float(1,"Risk Capital per Trade (%)", minval=0.1, maxval=100, step=0.05) / 100 / leverage
TP_Factor = input.float(2, step=0.1)
invertBuyLogic = input.bool(false)
 
lookbackDistance = input.int(25)
devMult = input.float(2,step=0.1)

var lastSellHour = 0
var disableAdditionalBuysThisDay = false


if(time > lastSellHour + 1000 * 60 * 60 * 6)
    disableAdditionalBuysThisDay := false
if(strategy.position_size != strategy.position_size[1])
    disableAdditionalBuysThisDay := true
    lastSellHour := time

source = close

//Trade Logic
basis = ta.sma(source, lookbackDistance)
dev = devMult * ta.stdev(source, lookbackDistance)
upper = basis + dev
lower = basis - dev
isBuy = ta.crossunder(source, upper)
isBuyInverted = ta.crossover(source, lower)

plot(upper, color=color.white)
plot(lower, color=color.white)

strategy.initial_capital = 50000

if((invertBuyLogic ? isBuyInverted : isBuy) and not(disableAdditionalBuysThisDay))
    strategy.entry("Long", strategy.long, (strategy.initial_capital / close) * leverage)

if(strategy.position_size > 0)
    strategy.exit("SL Long", "Long", stop=strategy.position_avg_price * SL_Factor)
    strategy.close("Long",  when=close > strategy.position_avg_price * (1 + (1 - SL_Factor) * TP_Factor), comment="TP Long")





더 많은