역대 평균 돌파구 전략

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

img

전반적인 설명

리버스 미인 브레이크로우 전략 (Reverse Mean Breakthrough Strategy) 은 다중 요인 트렌드 역전 전략이다. 이 전략은 이동 평균, 볼링거 밴드, CCI, RSI 및 기타 기술 지표를 결합하여 과잉 구매 및 과잉 판매 영역에서 가격 역전 기회를 포착한다. 이 전략은 또한 현재와 이전 트렌드 사이의 불일치를 탐지하기 위해 정기적 분산 분석을 통합하여 거짓 브레이크오웃을 피한다.

전략 원칙

이 전략의 핵심 논리는 과잉 구매 또는 과잉 판매 구역에서 가격이 반전될 때 적절한 단위 또는 긴 포지션을 취하는 것입니다. 구체적으로 전략은 4 가지 측면에서 반전 기회를 판단합니다.

  1. CCI 지표 또는 동력 지표는 골든 크로스 데드 크로스 신호를 발산하여 과잉 구매 또는 과잉 판매 상태를 결정합니다.

  2. RSI 지표는 과잉 구매 또는 과잉 판매 구역에 있는지 판단합니다. 65 이상 과잉 구매 및 35 이하 과잉 판매.

  3. 볼링거 밴드 상부 및 하부 레일을 사용하여 가격이 정상적인 범위에서 벗어나지 않는지 결정합니다. 가격은 정상 범위로 돌아온 후에 역전될 수 있습니다.

  4. 거짓 파장을 피하기 위해 RSI 지표의 규칙적인 오차를 감지합니다.

위의 조건이 충족되면 전략은 역방향으로 들어가고 위험을 제어하기 위해 손해를 멈추게 됩니다.

이점 분석

이 전략의 가장 큰 장점은 상대적으로 높은 승률을 가진 역전 기회를 결정하기 위해 여러 지표를 결합한다는 것입니다. 구체적으로:

  1. 여러 가지 요인을 사용함으로써 신뢰도가 높습니다. 단 하나의 지표에만 의존하는 것을 피하여 잘못된 판단을 줄이십시오.

  2. 트렌드 반전 (trend reversal) 은 승률이 더 높습니다.

  3. 분리를 감지하면 거짓 유출을 피하고 체계적 위험을 줄일 수 있습니다.

  4. 스톱 손실 메커니즘은 위험을 통제합니다. 가능한 한 단일 티켓 손실을 최소화 할 수 있습니다.

위험 분석

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

  1. 역전 시점에서의 판단 부정확성. 스톱 손실이 유발될 수 있습니다. 적절하게 스톱 손실 범위를 확장하십시오.

  2. 부적절하게 설정된 볼링거 밴드 매개 변수는 정상적인 가격 동작을 비정상적인 것으로 간주합니다. 매개 변수는 시장 변동성을 고려해야 합니다.

  3. 거래의 수는 상대적으로 높을 수 있습니다. 거래의 빈도를 줄이기 위해 CCI 등을 판단 범위를 적절히 확장하십시오.

  4. 길고 짧은 불균형입니다.

최적화

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. 기계 학습 알고리즘을 사용하여 자동으로 매개 변수를 최적화합니다. 인공적인 경험적 오류를 피하십시오.

  2. 셰일 인덱스, 진폭 인덱스 등을 높여서 과잉 구매 및 과잉 판매 강도를 결정합니다.

  3. 거래량 지표를 추가하여 반전 신뢰성을 결정합니다. 예를 들어, 거래량, 오픈 인테리스 등

  4. 시장의 분위기를 측정하기 위해 블록체인 데이터를 통합하고 전략 적응력을 향상시킵니다.

  5. 시장 변동성에 기반한 적응식 스톱 로스 메커니즘을 도입해야 합니다.

요약

역평균 돌파구 전략은 반전 거래를 결정하기 위해 여러 지표를 통합합니다. 적절한 위험 통제와 함께 상대적으로 높은 승률을 가지고 있습니다. 전략은 추가 최적화에 대한 여지가있는 실용적입니다. 적절한 매개 변수 조정으로 상당히 이상적인 결과를 가져야합니다.


/*backtest
start: 2023-12-12 00:00:00
end: 2023-12-19 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='BroTheJo Strategy', shorttitle='BTJ INV', overlay=true)

// Input settings
stopLossInPips = input.int(10, minval=0, title='Stop Loss (in Pips)')
ccimomCross = input.string('CCI', 'Entry Signal Source', options=['CCI', 'Momentum'])
ccimomLength = input.int(10, minval=1, title='CCI/Momentum Length')
useDivergence = input.bool(false, title='Find Regular Bullish/Bearish Divergence')
rsiOverbought = input.int(65, minval=1, title='RSI Overbought Level')
rsiOversold = input.int(35, minval=1, title='RSI Oversold Level')
rsiLength = input.int(14, minval=1, title='RSI Length')
plotMeanReversion = input.bool(true, 'Plot Mean Reversion Bands on the chart')
emaPeriod = input(200, title='Lookback Period (EMA)')
bandMultiplier = input.float(1.6, title='Outer Bands Multiplier')

// CCI and Momentum calculation
momLength = ccimomCross == 'Momentum' ? ccimomLength : 10
mom = close - close[momLength]
cci = ta.cci(close, ccimomLength)
ccimomCrossUp = ccimomCross == 'Momentum' ? ta.cross(mom, 0) : ta.cross(cci, 0)
ccimomCrossDown = ccimomCross == 'Momentum' ? ta.cross(0, mom) : ta.cross(0, cci)

// RSI calculation
src = close
up = ta.rma(math.max(ta.change(src), 0), rsiLength)
down = ta.rma(-math.min(ta.change(src), 0), rsiLength)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down)
oversoldAgo = rsi[0] <= rsiOversold or rsi[1] <= rsiOversold or rsi[2] <= rsiOversold or rsi[3] <= rsiOversold
overboughtAgo = rsi[0] >= rsiOverbought or rsi[1] >= rsiOverbought or rsi[2] >= rsiOverbought or rsi[3] >= rsiOverbought

// Regular Divergence Conditions
bullishDivergenceCondition = rsi[0] > rsi[1] and rsi[1] < rsi[2]
bearishDivergenceCondition = rsi[0] < rsi[1] and rsi[1] > rsi[2]

// Mean Reversion Indicator
meanReversion = plotMeanReversion ? ta.ema(close, emaPeriod) : na
stdDev = plotMeanReversion ? ta.stdev(close, emaPeriod) : na
upperBand = plotMeanReversion ? meanReversion + stdDev * bandMultiplier : na
lowerBand = plotMeanReversion ? meanReversion - stdDev * bandMultiplier : na

// Entry Conditions
prevHigh = ta.highest(high, 1)
prevLow = ta.lowest(low, 1)
shortEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition) and (prevHigh >= meanReversion) and (prevLow >= meanReversion)
longEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition) and (prevHigh <= meanReversion) and (prevLow <= meanReversion)

// Plotting
oldShortEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition)
oldLongEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition)
plotshape(oldLongEntryCondition, title='BUY', style=shape.triangleup, text='B', location=location.belowbar, color=color.new(color.lime, 0), textcolor=color.new(color.white, 0), size=size.tiny)
plotshape(oldShortEntryCondition, title='SELL', style=shape.triangledown, text='S', location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)

// Strategy logic
if (longEntryCondition)
    stopLoss = close - stopLossInPips
    strategy.entry("Buy", strategy.long)
    strategy.exit("exit", "Buy", stop=stopLoss)
if (shortEntryCondition)
    stopLoss = close + stopLossInPips
    strategy.entry("Sell", strategy.short)
    strategy.exit("exit", "Sell", stop=stopLoss)

// Close all open positions when outside of bands
closeAll = (high >= upperBand) or (low <= lowerBand)

if (closeAll)
    strategy.close_all("Take Profit/Cut Loss")

// Plotting
plot(upperBand, title='Upper Band', color=color.fuchsia, linewidth=1)
plot(meanReversion, title='Mean', color=color.gray, linewidth=1)
plot(lowerBand, title='Lower Band', color=color.blue, linewidth=1)


더 많은