이동평균선 교차 및 볼린저 밴드 돌파 전략


생성 날짜: 2024-02-19 14:18:00 마지막으로 수정됨: 2024-02-19 14:18:00
복사: 0 클릭수: 636
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

이동평균선 교차 및 볼린저 밴드 돌파 전략

개요

이 전략은 RSI 지표를 사용하여 과매매 신호를 식별하고, 불린 띠가 가격 돌파구를 판단하여 작동하며, 동선의 금 포크 사다리 형태를 사용하여 트렌드의 다양한 단계에서 시장을 판단하여 수익을 창출합니다.

전략 원칙

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

  1. RSI 지표: RSI 지표 라인 상에서 설정된 오버 바이 라인을 넘어서거나 아래에서 설정된 오버 세일 라인을 넘어서면, 상응하는 상장 또는 하락 작업을 수행한다.

  2. 부린 띠: 가격이 부린 띠를 뚫고 궤도에 오르면 하위 동작을 수행합니다. 가격이 부린 띠를 내려가면 더 많은 동작을 수행합니다.

  3. 평균선: 일정 주기 (예: 5주기) 내의 최고 가격과 최저 가격을 계산하고, 가격이 최근 5주기의 최고점보다 높을 때, 더 많이; 가격이 최근 5주기의 최저점보다 낮을 때, 공백을 다.

  4. MACD: 계산 빠른 라인, 느린 라인 및 MACD 라인의 황금 포크 사형 포크, 보조 판단 지표로.

이 지표들은 서로 결합되어, 트렌드 상황에서는, 불린 띠를 사용하여 가격의 돌파구와 회귀 중축의 시점을 판단한다. 평형 상황에서는, 동선 판단 돌파구를 사용하여 트렌드 전환점을 포착한다. 오버 바이 오버 판매 상황에서는, RSI 지표의 극한 값 영역 판단을 사용하여 역행한다.

우위 분석

이 전략에는 다음과 같은 장점이 있습니다.

  1. 다중 지표 조합, 정확한 판단. RSI, 브린 밴드, 평평선 등 지표가 상호 검증되어 거래 신호가 더 신뢰할 수 있습니다.

  2. 다양한 상황에 적합하다. 부린 대역을 이용한 트렌드 트렌드, 평균선을 이용한 평형 트렌드, RSI를 이용한 오버 바이 오버 소드 트렌드 등 다양한 상황에 대응할 수 있다.

  3. 운영 주파수는 적당하다. 지표의 매개 변수는 신중하게 설정되어 너무 자주 거래되는 것을 피한다.

  4. 프로그램 구조가 명확하다. 코드 작성 규격, 읽기 쉽고 2차 개발.

위험 분석

이 전략에는 몇 가지 위험도 있습니다.

  1. 매개 변수 설정 위험. 지표 매개 변수 설정이 잘못되면 거래 신호 오류가 발생할 수 있다. 매개 변수를 반복적으로 테스트하고 최적화해야 한다.

  2. 다중 공백 전환 위험. 시장 전환점에서 다중 공백 전환이 더 자주 발생할 수 있으며 거래 비용이 증가합니다. 지분 시간을 적절하게 조정할 수 있습니다.

  3. 프로그래밍 구현 위험. 코드에 발견하기 어려운 논리적 오류가 있을 수 있으며, 이는 비정상적인 거래로 이어집니다.

최적화 방향

이 전략은 다음과 같은 방향으로 최적화될 수 있습니다.

  1. 수익을 고정하고 손실을 줄이기 위한 H&M 전략의 추가.

  2. 거래량 지표와 결합하여 가짜 신호를 피하십시오. 예를 들어, 브린 대역을 뚫을 때 거래량을 검사하십시오.

  3. 기계 학습 알고리즘을 추가하고, 역사 데이터 훈련을 활용하고, 자동으로 파라미터를 최적화한다.

  4. 그래픽을 추가하여 전략의 성과를 직관적으로 보여줄 수 있습니다.

  5. 피드백을 최적화하여 최적의 변수 조합을 선택하십시오.

요약하다

이 전략은 평균선, 브린밴드, RSI 등 여러 지표를 종합적으로 사용하여 지표 조합을 통해 판단하여 거래 신호를 형성한다. 전략의 장점은 적응성이 강하고 판단이 정확하다. 위험은 주로 매개 변수 설정 및 프로그램 구현에 있으며 지속적인 최적화 테스트가 필요합니다.

전략 소스 코드
/*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)