Chiến lược giao dịch định lượng đa yếu tố kết hợp RSI và CCI năng động

Tác giả:ChaoZhang, Ngày: 2023-11-27
Tags:

img

Tổng quan

Chiến lược này kết hợp RSI năng động, CCI và nhiều đường trung bình động MA để thực hiện một chiến lược giao dịch định lượng dựa trên nhiều yếu tố. Chiến lược này tính đến nhiều khía cạnh như xu hướng, mua quá mức và bán quá mức để đưa ra phán đoán và tạo ra tín hiệu giao dịch.

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

Chỉ số kỹ thuật

  • MA: Tính toán giá đóng cửa trung bình trong một khoảng thời gian để xác định xu hướng giá
  • RSI: Các thẩm phán mua quá mức và bán quá mức
  • CCI: Các thẩm phán mua quá mức và bán quá mức
  • Stoch KDJ: Phán xét độ lệch của stochastic so với xu hướng chính

Các tín hiệu giao dịch

Tín hiệu mua: MA12 vượt qua MA26, CCI dưới 100 (đã bán quá mức), Stoch KDJ dưới 80 (đã bán quá mức)

Tín hiệu bán: RSI vượt dưới ngưỡng năng động, Stoch KDJ trên 80 (đã mua quá mức)

Ưu điểm

  1. Nhiều yếu tố dẫn dắt, phán đoán toàn diện, tín hiệu sai thấp hơn
  2. Mức ngưỡng động cho việc phát hiện quá mua và quá bán trong thời gian thực
  3. Kết hợp các chỉ số kỹ thuật xu hướng, stochastic, chính thống
  4. Sử dụng nhiều tham số điều chỉnh, linh hoạt cao

Rủi ro

  1. Sự kết hợp đa yếu tố quá phức tạp, điều chỉnh tham số khó khăn
  2. Hiệu suất liên quan chặt chẽ đến lựa chọn tham số
  3. Yêu cầu quy trình định lượng nghiêm ngặt cho tối ưu hóa tham số
  4. Rủi ro phù hợp với đường cong cao

Tối ưu hóa

  1. Thử nghiệm bộ dữ liệu nhiều hơn cho sự vững chắc của chiến lược
  2. Kiểm tra kết hợp nhiều tham số để tìm ra tối ưu
  3. Thêm stop loss để giảm mức rút tối đa
  4. Thêm kích thước vị trí để tránh đuổi theo và giết người
  5. Kiểm tra khả năng thích nghi giữa các sản phẩm khác nhau

Kết luận

Chiến lược này kết hợp nhiều chỉ số kỹ thuật và nhiều yếu tố dẫn dắt phán đoán với điều chỉnh tham số và xác thực thống kê để đạt được kết quả tốt. Nhưng sự phức tạp cao hơn, cần phải ngăn ngừa quá mức, và kiểm soát kích thước vị trí và dừng lỗ để giảm lượng rút tối đa. Có thể mở rộng thêm chiến lược trên các sản phẩm và khung thời gian.


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

//@version=4
strategy(title="ATOM2.0", shorttitle="ATOM V2.0", overlay=false, default_qty_type=strategy.cash, currency=currency.USD, initial_capital=200, default_qty_type=strategy.cash, default_qty_value=100, pyramiding=10)

// Set Parameter MA12
len12 = input(12, minval=1, title="Length")
src12 = input(close, title="Source")
ma12 = sma(src12, len12)
//plot(ma12, color=color.blue, title="MA12")

// Set Parameter MA26
len26 = input(26, minval=1, title="Length")
src26 = input(close, title="Source")
ma26 = sma(src26, len26)
//plot(ma26, color=color.orange, title="MA12")

//Stochastic RSI 14,3,3
smoothK_1 = input(3, minval=1)
smoothD_1 = input(3, minval=1)
lengthRSI = input(14, minval=1)
lengthStoch = input(14, minval=1)
src_1 = input(close, title="RSI Source_1")

rsi1 = rsi(src_1, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK_1)
d = sma(k, smoothD_1)
//plot(k, color=color.red)
//plot(d, color=color.yellow)

//Stochastic RSI 5,4,3
smoothK_2 = input(4, minval=1)
smoothD_2 = input(3, minval=1)
lengthRSI_2 = input(5, minval=1)
lengthStoch_2 = input(5, minval=1)
src_2 = input(close, title="RSI Source_2")

rsi2 = rsi(src_2, lengthRSI_2)
k_2 = sma(stoch(rsi2, rsi2, rsi2, lengthStoch_2), smoothK_2)
d_2 = sma(k_2, smoothD_2)
//plot(k_2, color=color.white)
//plot(d_2, color=color.green)

// CCI
cci = cci(close,26)
//plot(cci,color=color.blue)

// Dynamic RSI
DZbuy = 0.1
DZsell = 0.1
Period = 14
Lb = 60

RSILine = rsi(close,Period)
jh = highest(RSILine, Lb)
jl = lowest(RSILine, Lb)
jc = (wma((jh-jl)*0.5,Period) + wma(jl,Period))
Hiline = jh - jc * DZbuy
Loline = jl + jc * DZsell
R = (4 * RSILine + 3 * RSILine[1] + 2 * RSILine[2] + RSILine[3] ) / 10

plot(R, title='R', color=color.white, linewidth=1, transp=0)
plot(Hiline, title='Hiline', color=color.yellow,  linewidth=1, transp=0)
plot(Loline, title='Loline', color=color.yellow, linewidth=1, transp=0)
plot(jc, title='Jc', color=color.purple,  linewidth=1, transp=50)

col_1 = R > Hiline ? color.red:na
col_2 = R < Loline ? color.green:na

fill(plot(R, title='R', color=color.white, linewidth=1, transp=0), plot(Hiline, title='Hiline', color=color.yellow,  linewidth=1, transp=0), color=col_1,transp=0)
fill(plot(R, title='R', color=color.white, linewidth=1, transp=0), plot(Loline, title='Loline', color=color.yellow, linewidth=1, transp=0), color=col_2,transp=0)
//------------------------------------------------------------------------------
// Calculate qty
// Parameter
fund = 10           // Fund per Contract in USD
leverage = 100     // Leverage
// Buy Condition
buyCondition = (ma12>ma26 and cci<100 and k<80 and d<80 and k_2<80 and d_2<80 and crossover(k_2, d_2))
buy = (buyCondition == input(1))
alertcondition(buy, title='time to Long', message='Long!!!')
//closeBuy = (cci>100 and cci<cci[1] and cci<cci[2])
closeBuy = (crossunder(R, Hiline) and k>80)
alertcondition(closeBuy, title='Time to Close', message='Close Long')

// Submit Orders
strategy.entry(id="Long", qty=(fund*leverage)/close, long=true, when=buyCondition)
strategy.close(id="Long", when=closeBuy)

Thêm nữa