볼린저 밴드 스팬 트레이딩 전략


생성 날짜: 2023-12-19 14:08:45 마지막으로 수정됨: 2023-12-19 14:08:45
복사: 0 클릭수: 639
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

볼린저 밴드 스팬 트레이딩 전략

개요

이 전략은 부린 띠의 상하 궤도에 기초하여, 가격이 부린 띠를 돌파할 때 더 많이 하고, 궤도를 돌파할 때 공백을 하는 경향이 있다.

전략 원칙

이 전략은 브린 대역의 중간 궤도, 상단 궤도, 하단 궤도를 사용하여 극한 가격 범위를 판단한다. 중간 궤도는 지난 25 주기의 종결 가격의 간단한 이동 평균이며, 상단 궤도선은 각각 중간 궤도선에서 다음 표준 차이의 거리이다. 가격이 상단 궤도선 아래에서 또는 하단 궤도선에서 통과 할 때, 가격이 돌파가 발생하여 비정상적인 가격 행동에 속하며, 거래 결정을 내릴 수 있습니다.

가격이 하향선보다 낮으면 더 많이 사; 가격이 상향선보다 높으면 더 많이 팔라. 더 많이 할 때, 스톱 손실 라인을 입시 가격 곱하기 스톱 손실 인자로 설정하고, 스톱 손실 라인을 입시 가격 곱하기 스톱 인자로 설정한다.

이 전략에는 24시간 동안 한 번만 신호를 보낼 수 있는 보조 규칙도 추가되어 불필요한 거래가 없도록 하고 있다.

전략적 이점

  1. 브린 띠를 사용하여 비정상적인 가격 범위를 판단하는 것은 트렌드 추적 전략으로 가격 추세를 포착할 수 있습니다.
  2. 단편적 손실을 제어하기 위해 Stop Loss Hinder 원칙에 따라 관련 매개 변수를 설정합니다.
  3. 반복되는 신호와 무의미한 거래를 방지하기 위한 보조 규칙이 추가되었습니다.

전략적 위험

  1. 브린의 범위는 가격의 흐름을 완전히 나타내지 않으며 잘못된 신호가 발생할 수 있습니다.
  2. 해킹 신호 타이밍을 잘못 선택하면 손실이 발생할 수 있습니다.
  3. 트렌드 시장은 트렌드가 없는 기간이 길고 변동이 예측하기 어렵기 때문에 불필요한 구매가 발생할 수 있습니다.

위험 관리 조치:

  1. 브린 대역 변수를 조정하여 브레이크 신호 타이밍을 최적화
  2. 다른 지표와 함께 큰 추세를 판단하는 방법
  3. 다양한 품종과 시장 상황에 따라 스톱로스 스톱 상승률을 설정합니다.

전략 최적화 방향

  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")