이동 평균 브레이크업 및 볼링거 밴드 브레이크업 전략

저자:차오장, 날짜: 2024-02-19 14:18:00
태그:

img

전반적인 설명

이 전략은 RSI 지표를 사용하여 과잉 구매 및 과잉 판매 신호, 볼링거 밴드 (Bollinger Band) 를 사용하여 가격 브레이크오버 (price breakout) 를 결정하고, 이동 평균 크로스오버 (crossover) 를 사용하여 시장을 다른 트렌드 단계에서 판단하여 수익을 창출합니다.

전략 논리

이 전략은 다음과 같은 주요 지표로 구성됩니다.

  1. RSI 인디케이터: RSI 라인이 과잉 매수 문턱을 넘거나 과잉 매매 문턱을 넘을 때, 그에 따라 긴 또는 짧은 거래가 이루어집니다.

  2. 볼링거 밴드: 가격이 볼링거 상단역을 넘을 때, 짧은 거래가 이루어집니다. 가격이 볼링거 하단역을 넘을 때, 긴 거래가 이루어집니다.

  3. 이동 평균: 특정 기간 (예: 5 기간) 의 가장 높고 가장 낮은 가격을 계산합니다. 가격이 지난 5 기간 동안 가장 높은 지점보다 높을 때, 긴 거래가 이루어집니다. 가격이 지난 5 기간 동안 가장 낮은 지점보다 낮을 때, 짧은 거래가 이루어집니다.

  4. MACD: 빠른 라인, 느린 라인 및 MACD 라인의 크로스오버와 죽음의 크로스오버가 보조 판단 지표로 사용됩니다.

이 지표들은 트렌딩 및 통합 단계의 시장을 판단하기 위해 함께 작동한다. 볼링거 밴드는 브레이크업과 평균으로 회귀를 식별한다. 이동 평균은 통합 중에 트렌드 역전 지점을 결정한다. RSI 극단적 은 역 트렌드 거래에 대한 과잉 구매 / 과잉 판매 시장 조건을 탐지한다.

이점 분석

이 전략의 장점은 다음과 같습니다.

  1. 여러 지표의 조합은 정확성을 향상시킵니다. RSI, 볼링거 밴드, 이동 평균 등이 상호 작용하여 신뢰할 수있는 거래 신호를 생성합니다.

  2. 다른 시장 조건에 적용됩니다. 경향을위한 볼링거 밴드, 통합을위한 이동 평균, 극단적 인 RSI. 유연성이 보장됩니다.

  3. 합리적인 거래 빈도. 과도한 거래를 피하기 위해 지표 매개 변수를 보수적으로 설정합니다.

  4. 깔끔한 코드 구조, 이해하기 쉽고 편집하고 구축하기 쉽습니다.

위험 분석

몇 가지 위험은 주의가 필요합니다.

  1. 매개 변수 위험. 부적절한 지표 매개 변수는 잘못된 거래 신호를 생성 할 수 있습니다. 매개 변수는 지속적인 테스트와 최적화가 필요합니다.

  2. 장기/단기 전환 위험. 트렌드 반전 시 빈번한 장기/단기 포지션 변화로 거래 비용이 증가합니다. 보유 기간을 조정할 수 있습니다.

  3. 코딩 위험. 코드에 숨겨진 논리적 결함이 비정상적인 거래로 이어질 수 있습니다. 예외 처리 및 로깅이 개선되어야합니다.

최적화

이 전략은 다음과 같은 측면에서 업그레이드 될 수 있습니다.

  1. 스톱 로스를 추가해서 이윤을 확보하고 손실을 줄이세요.

  2. 잘못된 신호를 피하기 위해 거래 부피를 포함합니다. 예를 들어 볼링거 브레이크에 대한 점검 부피.

  3. 기계 학습을 도입하여 역사적 데이터에 기반한 최적의 매개 변수를 찾습니다.

  4. 직관적인 성능 표시를 위해 그래픽 인터페이스를 구축합니다.

  5. 가장 좋은 매개 변수 조합을 찾기 위해 백테스팅을 수행합니다.

결론

이 전략은 이동 평균, 볼링거 밴드, RSI 등을 결합하여 거래 신호를 생성합니다. 그것의 다재다능성과 정확성은 명확한 강점이며, 매개 변수 설정 및 코딩 리스크는 관리되어야합니다. 다음 단계는 중지, 매개 변수 최적화, 모니터링을위한 GUI 및 예외 처리 개선을 추가하는 것입니다.


/*backtest
start: 2024-01-19 00:00:00
end: 2024-02-15 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("MD strategy", overlay=true)
lengthrsi = input( 14 )
overSold = input( 30 )
overBought = input( 70 )
price = close
source = close
lengthbb = input(20, minval=1)
mult = input(2.0, minval=0.001, maxval=50)
direction = input(0, title = "Strategy Direction",minval=-1, maxval=1)
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
consecutiveBarsUp = input(3)
consecutiveBarsDown = input(3)
lengthch = input( minval=1, maxval=1000, defval=5)
upBound = highest(high, lengthch)
downBound = lowest(low, lengthch)



ups = price > price[1] ? nz(ups[1]) + 1 : 0
dns = price < price[1] ? nz(dns[1]) + 1 : 0
MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD

strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

basis = sma(source, lengthbb)
dev = mult * stdev(source, lengthbb)

upper = basis + dev
lower = basis - dev

vrsi = rsi(price, lengthrsi)

if (not na(vrsi))
    if (crossover(vrsi, overSold))
        strategy.entry("RsiLE", strategy.long, comment="RsiLE")
    if (crossunder(vrsi, overBought))
        strategy.entry("RsiSE", strategy.short, comment="RsiSE")

if (crossover(source, lower))
    strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands",  comment="BBandLE")
else
    strategy.cancel(id="BBandLE")

if (crossunder(source, upper))
    strategy.entry("BBandSE", strategy.short, stop=upper, oca_name="BollingerBands",  comment="BBandSE")
else
    strategy.cancel(id="BBandSE")
    
    
if (not na(close[lengthch]))
    strategy.entry("ChBrkLE", strategy.long, stop=upBound + syminfo.mintick, comment="ChBrkLE")
    strategy.entry("ChBrkSE", strategy.short, stop=downBound - syminfo.mintick, comment="ChBrkSE")
    
    
//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)

더 많은