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.
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.
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.
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.
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.
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.
Ư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.
Độ 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.
Sự đảo ngược xu hướng có xác suất thắng lớn hơn.
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.
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.
Ngoài ra còn có một số rủi ro với chiến lược này:
Phân tích không chính xác về điểm thời gian đảo ngược.
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.
Số lượng giao dịch có thể tương đối cao.
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.
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
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.
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.
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.
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.
Đưa ra cơ chế dừng lỗ thích nghi dựa trên biến động thị trường.
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)