Khoảng cách giá và xu hướng sau chiến lược giao dịch

Tác giả:ChaoZhang, Ngày: 2023-10-25 18:02:11
Tags:

img

Tổng quan

Chiến lược này sử dụng chỉ số CCI và chỉ số động lực kết hợp với chỉ số RSI để xác định xu hướng thị trường và nhập khi khoảng cách xuất hiện trong khu vực mua quá mức / bán quá mức. Nó cũng sử dụng Bollinger Bands để nhận ra xu hướng và phạm vi đảo ngược trung bình. Chiến lược có thể xác định hiệu quả sự đột phá và rút lui, vào sớm trong sự khởi đầu của xu hướng và thích nghi với các sản phẩm khác nhau bằng cách điều chỉnh các tham số.

Chiến lược logic

Đầu tiên, chiến lược xác định các tín hiệu dài và ngắn bằng chỉ số CCI hoặc chỉ số động lực vượt qua trên/dưới đường 0, cũng yêu cầu RSI ở vùng mua quá mức / bán quá mức, tức trên 65 cho mua quá mức và dưới 35 cho bán quá mức, để tránh các tín hiệu sai.

Ngoài ra, chiến lược có thể chọn xác định các chênh lệch tăng/giảm RSI để đảm bảo các tín hiệu đáng tin cậy hơn.

Khi CCI hoặc động lực kích hoạt tín hiệu dài, và RSI nằm trong vùng bán quá mức, chiến lược sẽ kiểm tra xem mức cao và thấp trước đó đều nằm trên đường trung bình của Bollinger Band. Nếu có, một tín hiệu dài được tạo ra. Ngược lại, khi tín hiệu ngắn kích hoạt và mức thấp trước đó nằm dưới đường trung bình, một tín hiệu ngắn được tạo ra.

Do đó, chiến lược sử dụng cả các chỉ số xu hướng và dao động, để có được xu hướng sớm và tránh đột phá sai với phạm vi đảo ngược trung bình. Khi giá vượt ra khỏi Bollinger Bands, chiến lược sẽ đóng tất cả các vị trí để khóa lợi nhuận và ngăn chặn sự rút thêm.

Phân tích lợi thế

  1. Kết hợp các chỉ số xu hướng và dao động có thể đi vào xu hướng sớm và tránh các vị trí không cần thiết trong thị trường phạm vi.

  2. Sử dụng Bollinger Band trung bình với khoảng cách giá lọc breakout giả hiệu quả.

  3. Kiểm tra RSI lịch sử tránh tạo ra các tín hiệu giao dịch sai.

  4. Giao dịch tự động hoàn toàn mà không có sự can thiệp bằng tay, phù hợp với giao dịch thuật toán.

  5. Điều chỉnh tham số linh hoạt thích nghi với các sản phẩm giao dịch khác nhau.

  6. Dừng lỗ và kiểm soát lợi nhuận rủi ro hiệu quả.

Phân tích rủi ro

  1. Các thông số Bollinger Band không chính xác có thể gây ra việc xác định sự đảo ngược trung bình không hợp lệ.

  2. Các thông số chỉ báo sai có thể tạo ra quá nhiều tín hiệu sai.

  3. Việc phá vỡ thất bại cần dừng lỗ kịp thời khi giá rút trở lại mức trung bình.

  4. Tiền thanh khoản kém có thể gây ra giao dịch thoát không hiệu quả.

  5. Đảm bảo có đủ dữ liệu lịch sử để tránh sự phù hợp kém đường cong.

  6. Hãy chú ý đến các phiên giao dịch để tránh phá vỡ sai.

Hướng dẫn cải thiện

  1. Tối ưu hóa các tham số Bollinger Bands để có phạm vi đảo ngược trung bình ổn định hơn.

  2. Kiểm tra các thông số trên các sản phẩm khác nhau để tối ưu hóa tốt hơn.

  3. Thêm kích thước vị trí để tránh kích thước quá lớn vị trí duy nhất.

  4. Thêm bộ lọc phiên giao dịch để giao dịch chủ yếu trong giờ hoạt động.

  5. Kết hợp các mô hình học máy để tạo ra các tín hiệu thông minh hơn.

  6. Tích hợp nhiều nguồn dữ liệu hơn để xác định xu hướng thị trường tổng thể.

  7. Thêm thêm các chỉ số để tạo thành một tập hợp chỉ số mạnh mẽ.

Kết luận

Chiến lược này tích hợp các chỉ số xu hướng và dao động để nắm bắt xu hướng sớm. Với Bollinger Band trung bình và khoảng cách giá, nó tránh sự đột phá sai một cách hiệu quả. Các thông số linh hoạt thích nghi với các sản phẩm khác nhau với kết quả backtest tuyệt vời.


/*backtest
start: 2022-10-18 00:00:00
end: 2023-10-24 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

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

// Input settings
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)
longEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition) and (prevHigh >= meanReversion) and (prevLow >= meanReversion)
shortEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition) and (prevHigh <= meanReversion) and (prevLow <= meanReversion)

// Plotting
oldLongEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition)
oldShortEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition)
plotshape(oldLongEntryCondition, title='BUY', style=shape.triangleup, 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, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)

// Strategy logic
if (longEntryCondition)
    strategy.entry("Buy", strategy.long)
if (shortEntryCondition)
    strategy.entry("Sell", strategy.short)

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