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


Ngày tạo: 2023-11-27 18:54:34 sửa đổi lần cuối: 2023-11-27 18:54:34
sao chép: 0 Số nhấp chuột: 732
1
tập trung vào
1617
Người theo dõi

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

Tổng quan

Chiến lược này thực hiện chiến lược giao dịch định lượng được điều khiển bởi nhiều yếu tố bằng cách kết hợp các chỉ số RSI động, chỉ số CCI và đường trung bình MA đa. Chiến lược này xem xét tổng hợp nhiều chiều như xu hướng, mua quá mức, bán quá mức, đưa ra phán đoán và tạo tín hiệu giao dịch.

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

Chỉ số kỹ thuật

  • Đường trung bình MA: tính trung bình giá đóng cửa trong một khoảng thời gian nhất định để xác định xu hướng giá
  • Chỉ số RSI tương đối mạnh: đánh giá khu vực quá mua quá bán
  • Chỉ số CCI: Xác định tình trạng quá mua quá bán
  • Chỉ số Stoch KDJ: Xác định sự lệch của chỉ số ngẫu nhiên với xu hướng chính

Tín hiệu giao dịch

Tín hiệu mua: MA12 trên MA26, CCI thấp hơn 100 (được bán tháo), Stoch KDJ thấp hơn 80 (được bán tháo)

Tín hiệu bán: RSI phá giá động, Stoch KDJ cao hơn 80 (thay quá giá)

Lợi thế chiến lược

  1. Động cơ đa yếu tố, đánh giá tổng hợp, giảm tín hiệu giả
  2. Động thái giảm giá sellable, phát hiện thời gian thực quá mua quá bán
  3. Kết hợp xu hướng, ngẫu nhiên và nhiều chỉ số kỹ thuật chính thống
  4. Khả năng điều chỉnh đa tham số, linh hoạt

Rủi ro chiến lược

  1. Phối hợp đa yếu tố quá phức tạp, điều chỉnh tham số rất khó
  2. Hiệu suất chiến lược có liên quan cao đến lựa chọn tham số
  3. Cần tối ưu hóa tham số theo quy trình định lượng nghiêm ngặt
  4. Có nguy cơ phù hợp với đường cong cao hơn

Tối ưu hóa chiến lược

  1. Tham gia thử nghiệm sức mạnh chiến lược của nhiều bộ dữ liệu
  2. Thử nghiệm kết hợp nhiều tham số tìm tham số tối ưu
  3. Tăng cơ chế ngăn chặn thiệt hại để giảm rút tối đa
  4. Tăng khả năng kiểm soát vị trí để tránh thua lỗ
  5. Kiểm tra sự phù hợp của các hợp đồng khác nhau

Tóm tắt

Chiến lược này sử dụng nhiều chỉ số kỹ thuật và phán đoán dựa trên nhiều yếu tố để tìm các tham số tối ưu thông qua điều chỉnh tham số và xác minh thống kê nghiêm ngặt, có thể đạt được hiệu quả tốt hơn. Tuy nhiên, mức độ phức tạp cao, cần ngăn ngừa rủi ro quá phù hợp, đồng thời kiểm soát vị trí và dừng lỗ để giảm tối đa rút lui. Chiến lược này có thể mở rộng hơn nữa đến các giống khác và thời gian thử nghiệm tối ưu hóa.

Mã nguồn chiến lược
/*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)