더블 이동 평균 볼린저 밴드 추세 추종 전략


생성 날짜: 2023-12-22 14:54:20 마지막으로 수정됨: 2023-12-22 14:54:20
복사: 1 클릭수: 619
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

더블 이동 평균 볼린저 밴드 추세 추종 전략

개요

이 전략은 부린띠와 평선 조합을 사용하여 트렌드를 판단하고 입장을 취하는 양적 거래 전략이다. 부린띠의 트렌드 인식 능력과 이동 평균의 파동 효과를 결합하여 시장의 트렌드 방향을 효과적으로 식별하여 트렌드 방향의 상황에서 입장을 취한다.

전략 원칙

  1. 부린 벨트 통로를 이용한 최고 가격과 최저 가격을 계산하여 시장의 추세를 판단하는 방법

    • 최고값 (highest) 과 최저값 (lowest) 의 계산 채널의 경로
    • 통로 중축은 최고 가격과 최저 가격의 평균 가격입니다.
    • 통로의 가격 위치를 판단하여 트렌드 방향을 결정합니다.
  2. 태양열 개체 크기를 계산하여 정지 및 역 신호를 판단한다.

    • 양선 엔터티는 종결 가격과 개시 가격의 절대값을 나타냅니다.
    • N주기의 일선 개체 평균값을 계산하고, 현재 일선 개체 크기와 비교하여, 정지 및 반전을 판단한다
  3. 트렌드 방향을 확인한 후 통로 방향으로 입구

    • 트렌드가 올라갈 때 하위 레일 근처에 침투합니다.
    • 추세가 하향할 때 상반기 근처에서 공허
  4. 이동 평균을 사용하여 필터링하여 잘못된 신호를 피하십시오.

    • N 사이클의 클로징 가격 이동 평균을 계산한다
    • 거래 신호는 가격이 평균을 넘으면만 발송됩니다.

전략적 이점

  1. 브린 벨트 채널과 이동 평균을 결합하여 판단 경향, 체계성이 강하다

브린 띠는 가격 채널과 트렌드 방향을 명확하게 판단하고, 이동 평균은 파동을 가합니다. 두 가지 결합으로 트렌드를 효과적으로 식별하고, 시장의 갑작스러운 사건의 영향을 피하고, 시스템의 안정성을 보장합니다.

  1. 태양열의 크기를 사용하여 손실을 멈추고 위험을 효과적으로 제어합니다.

일선 주체의 크기의 평균값을 계산하여 현재 주기의 주체 크기와 비교하면 트렌드 반전을 명확하게 판단하고, 손해 줄이는 포지션을 수행하여 전략 위험을 효과적으로 제어 할 수 있습니다.

  1. 양적 입금 및 중지 규칙이 명확합니다.

전략은 이동 평균과 통로 방향이 조화를 이루는 조건에서 입금하고, 일선 실체 크기 규칙을 사용하여 중지하여 전체 시스템 입금 및 중지 규칙을 매우 명확하게 체계화한다.

위험 분석

  1. 위기 상황에서의 잠재적 손실 위험

위기상황에서 가격이 여러 번 하락을 경험할 수 있어 반복적으로 소액 손실이 발생할 수 있다. 이 시점에서는 포지션 규모를 줄여서 단편 손실을 줄여야 한다.

  1. 스톱포인트에서 너무 가까이 오르는 것은 너무 큰 파동으로 인해 충돌할 위험이 있습니다.

강세를 보인 경우, 단기간의 가격 회전은 스톱로스 규칙을 수 있습니다. 이 경우 스톱로스가 적절하게 완화되어 트렌드에 따라 움직일 수 있습니다.

  1. 잘못된 변수가 잘못된 신호를 유발할 수 있습니다.

이동 평균과 브린 밴드의 파라미터 설정이 잘못되어 신호를 잘못 인식하는 경우가 발생할 수 있다. 신호가 안정적이고 신뢰할 수 있도록 파라미터를 적절히 최적화해야 한다.

전략 최적화 방향

  1. 이동 평균 주기 변수를 최적화

이동 평균의 변수를 조정하여 부드러움을 줄이고 추세 변화를 더 빨리 발견 할 수 있습니다.

  1. 다른 상쇄 규칙의 효과를 테스트합니다.

추적 중지, ATR 중지 등과 같은 다른 중지 규칙을 시도하여 최적의 중지 방법을 선택하십시오.

  1. 기계 학습 모델 보조를 추가합니다

트렌드를 판단하고 거래 신호를 내보내는 데 도움을 주는 많은 역사 데이터에 기반한 훈련 모델

요약하다

이 전략은 종합적으로 트렌드 판단과 위험 통제를 고려하고, 브린 밴드 통로와 이동 평균을 사용하여 트렌드 식별을 하고, 반사선 엔터티 크기를 사용하여 상실을 저지한다. 전략은 체계성이 강하며, 양적 규칙이 명확하여 과잉 수익을 얻기 위해 위험을 효과적으로 제어 할 수 있다. 이후 변수 최적화 및 기계 학습과 같은 방법으로 계속 개선하여 전략을 더 안정적으로 신뢰할 수 있다.

전략 소스 코드
/*backtest
start: 2023-12-14 00:00:00
end: 2023-12-21 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=2
strategy("Noro's Bands Scalper Strategy v1.3", shorttitle = "Scalper str 1.3", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %")
needct = input(false, defval = false, title = "Counter-trend entry")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
needbb = input(true, defval = true, title = "Show Bands")
needbg = input(true, defval = true, title = "Show Background")
src = close

//PriceChannel 1
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd1 = center + distsma / 2
ld1 = center - distsma / 2

//Trend
trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Body
body = abs(close - open)
smabody = ema(body, 30)
candle = high - low

//Engulfing
min = min(open, close)
max = max(open, close)
bar = close > open ? 1 : close < open ? -1 : 0
upeng = bar == 1 and bar[1] == -1 and min >= min[1] and max <= max[1] ? 1 : 0
dneng = bar == -1 and bar[1] == 1 and min >= min[1] and max <= max[1] ? 1 : 0

//Signals
up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and close < open)) ? 1 : 0
dn7 = trend == 1 and bar == 1 and bar[1] == 1 and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0
up8 = trend == -1 and bar == -1 and bar[1] == -1 and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0
dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and close > open)) ? 1 : 0

if up7 == 1 or up8 == 1 
    strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na)

if dn7 == 1 or dn8 == 1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na)