Chiến lược đột phá ngược

Tác giả:ChaoZhang, Ngày: 2023-12-20 14:48:57
Tags:

img

Tổng quan

Chiến lược đột phá trung bình ngược là một chiến lược đảo ngược xu hướng đa yếu tố. Nó kết hợp trung bình động, Bollinger Bands, CCI, RSI và các chỉ số kỹ thuật khác để nắm bắt các cơ hội đảo ngược giá từ các khu vực mua quá mức và bán quá mức. Chiến lược cũng kết hợp phân tích chênh lệch thường xuyên để phát hiện sự không nhất quán giữa xu hướng hiện tại và trước đây, do đó tránh đột phá sai.

Nguyên tắc chiến lược

Lý thuyết cốt lõi của chiến lược này là nắm giữ các vị trí ngắn hoặc dài thích hợp khi giá đảo ngược từ các khu vực mua quá nhiều hoặc bán quá nhiều.

  1. Chỉ số CCI hoặc chỉ số động lực phát ra tín hiệu chéo vàng chết để xác định tình trạng mua quá mức hoặc bán quá mức.

  2. Chỉ số RSI đánh giá liệu nó ở trong vùng mua quá mức hay bán quá mức. Mua quá mức trên 65 và bán quá mức dưới 35.

  3. Sử dụng đường ray trên và dưới của Bollinger Bands để xác định giá có sai lệch so với phạm vi bình thường không. Giá có thể đảo ngược khi trở lại phạm vi bình thường.

  4. Khám phá sự khác biệt thường xuyên của chỉ số RSI để tránh theo đuổi sự đột phá sai.

Khi các điều kiện trên được đáp ứng, chiến lược sẽ lấy hướng ngược vào và đặt dừng lỗ để kiểm soát rủi ro.

Phân tích lợi thế

Ưu điểm lớn nhất của chiến lược này là nó kết hợp nhiều chỉ số để xác định cơ hội đảo ngược với tỷ lệ thắng tương đối cao.

  1. Độ tin cậy cao hơn bằng cách sử dụng nhiều yếu tố. Tránh chỉ dựa vào chỉ số duy nhất để giảm đánh giá sai.

  2. Sự đảo ngược xu hướng có xác suất thắng lớn hơn.

  3. Khám phá sự khác biệt tránh theo đuổi sự đột phá sai và giảm rủi ro hệ thống.

  4. Cơ chế dừng lỗ kiểm soát rủi ro. Có thể giảm thiểu tổn thất vé đơn càng nhiều càng tốt.

Phân tích rủi ro

Ngoài ra còn có một số rủi ro với chiến lược này:

  1. Phân tích không chính xác về điểm thời gian đảo ngược.

  2. Các thông số Bollinger Bands được thiết lập không phù hợp, coi hành động giá bình thường là bất thường.

  3. Số lượng giao dịch có thể tương đối cao.

  4. Sự mất cân bằng ngắn dài, đánh giá xem các thông số có phù hợp với dữ liệu lịch sử không.

Tối ưu hóa

Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:

  1. Sử dụng các thuật toán học máy để tự động tối ưu hóa các tham số. Tránh các lỗi thực nghiệm nhân tạo.

  2. Tăng chỉ số đá phiến, chỉ số chiều rộng vv để xác định sức mạnh mua quá mức và bán quá mức.

  3. Thêm các chỉ số khối lượng giao dịch để xác định độ tin cậy đảo ngược, ví dụ: khối lượng, lợi nhuận mở v.v.

  4. Kết hợp dữ liệu blockchain để đánh giá tâm lý thị trường. Cải thiện khả năng thích ứng chiến lược.

  5. Đưa ra cơ chế dừng lỗ thích nghi dựa trên biến động thị trường.

Tóm lại

Chiến lược đột phá trung bình ngược tích hợp nhiều chỉ số để xác định các giao dịch đảo ngược. Với kiểm soát rủi ro thích hợp, nó có tỷ lệ thắng tương đối lớn. Chiến lược này thực tế với không gian tối ưu hóa hơn nữa. Với điều chỉnh tham số thích hợp, nó nên mang lại kết quả khá lý tưởng.


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


Thêm nữa