이중 이동 평균 볼링거 밴드 트렌드 추적 전략

저자:차오장, 날짜: 2023-12-22 14:54:20
태그:

img

전반적인 설명

이 전략은 경향 식별 및 진입을 위해 볼링거 밴드 및 이동 평균의 조합을 사용합니다. 트렌드 시장 진입을 위해 시장 트렌드 방향을 효과적으로 식별하기 위해 볼링거 밴드의 트렌드 인식 기능과 이동 평균의 필터링 효과를 활용합니다.

전략 논리

  1. 시장 트렌드 방향을 결정하기 위해 볼링거 채널을 계산합니다.

    • 채널 대역을 계산하기 위해 가장 높은 높고 가장 낮은 낮은 사용
    • 채널 중단역은 높고 낮은 평균입니다
    • 채널 내의 가격 위치에 기초하여 트렌드 방향을 결정
  2. 스톱 로스 및 역전 신호를 위한 상승 촛불 몸 크기를 계산합니다.

    • 올리는 촛불 몸체는 닫는 마이너스 개방의 절대 값입니다
    • 촛불 몸의 N-period 평균을 계산하고, 현재 몸과 비교하여 스톱 손실 및 역전을 계산합니다.
  3. 트렌드 확인 후 채널 방향으로 거래를 입력합니다

    • 상승 추세에서 하위 대역 근처의 긴 진입
    • 하락 추세에서 상위 지대 근처의 짧은 엔트리
  4. 거짓 신호를 피하기 위해 필터링을 위해 이동 평균을 사용

    • 종료 가격의 N 기간 이동 평균을 계산합니다.
    • 이동 평균 돌파구에서만 신호를 생성합니다.

장점

  1. 계단과 이동 평균을 결합한 체계적인 트렌드 식별

    밴드는 가격 채널과 트렌드 방향을 명확하게 식별합니다. 이동 평균은 소음을 필터합니다. 조합은 간헐적인 시장 충격에 면역 된 강력한 트렌드 검출을 가능하게합니다.

  2. 촛불 몸체 스톱 손실을 통한 효과적인 위험 통제

    현재의 촛불 몸체를 역사적인 평균과 비교하면 스톱 로스 및 포지션 감축에 대한 트렌드 반전을 감지합니다. 전략 위험을 효과적으로 제어합니다.

  3. 명확한 수량 입수 및 스톱 로스 규칙

    입력에 대한 엄격한 이동 평균 및 채널 방향 요구 사항 촛불 몸집 크기 중지 손실 규칙 전체 시스템 입력 및 출구를 명확하고 체계적으로 만듭니다.

위험 분석

  1. 범주형 시장에서의 잠재적 손실

    빗톱 가격 변동은 반복적인 작은 손실을 일으킬 수 있습니다. 지점 크기는 손실 영향을 제한 할 수 있도록 줄여야합니다.

  2. 강한 트렌드에서 너무 이른 스톱 로스

    단기 리트레이싱은 강한 상승/하락 추세에서 스톱을 유발할 수 있습니다. 스톱 손실 폭은 트렌드를 타고 느려져야 합니다.

  3. 잘못된 매개 변수 조정으로 인한 오류 신호

    최저 이동 평균 및 대역 매개 변수는 거짓 신호를 일으킬 수 있습니다. 매개 변수는 신호 신뢰성을 위해 최적화되어야합니다.

더 나은 기회

  1. 이동 평균 검색 기간을 최적화

    트렌드 변화 탐지를 더 빠르게 하기 위해 평평화를 줄이기 위해 기간을 조정합니다.

  2. 다른 스톱 로스 메커니즘을 테스트

    후속 정지, ATR 정지 등을 평가하여 최적의 시스템을 찾습니다.

  3. 머신러닝 모델을 도입

    트렌드 및 신호 예측을 증강하기 위해 광범위한 역사적 데이터에 대한 모형을 훈련하십시오.

결론

이 전략은 볼린저 밴드 및 이동 평균을 사용하여 트렌드 식별 및 위험 통제를 균형 잡습니다. 명확한 입출입 규칙과 체계적인 양적 접근은 통제 된 위험과 함께 효과적인 보상 포착을 가능하게합니다. 매개 변수 조정 및 기계 학습 통합을 통해 추가 개선은 안정성을 향상시킬 것입니다.


/*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)

더 많은