Chiến lược giao dịch định lượng dựa trên chỉ số sức mạnh tương đối


Ngày tạo: 2024-01-22 10:13:23 sửa đổi lần cuối: 2024-01-22 10:13:23
sao chép: 7 Số nhấp chuột: 831
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch định lượng dựa trên chỉ số sức mạnh tương đối

Tổng quan

Chiến lược dao động động là một chiến lược giao dịch định lượng kết hợp các chỉ số động cơ ngẫu nhiên và các chỉ số tương đối mạnh. Chiến lược này sử dụng các chỉ số động cơ ngẫu nhiên để xác định khu vực quá mua quá bán của thị trường, kết hợp với các tín hiệu lọc RSI nhanh, sau đó chọn tín hiệu giao dịch đáng tin cậy hơn bằng cách lọc thực thể.

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

Chỉ số động lực ngẫu nhiên

Chỉ số động lực ngẫu nhiên (SMI) là một chỉ số kỹ thuật thường được sử dụng trong giao dịch định lượng, nó kết hợp các ưu điểm của chỉ số động lực và chỉ số dao động.

Cụ thể, công thức tính toán của SMI là:

SMI = (Close - (HH + LL)/2)/(0.5*(HH - LL)) * 100

Trong đó, HH là giá cao nhất trong vòng N ngày và LL là giá thấp nhất trong vòng N ngày.

Bằng cách này, SMI kết hợp sự phán đoán xu hướng động lực và sự phán đoán đảo ngược của chấn động. Khi SMI cao hơn 80 là mua quá mức và thấp hơn 20 là bán quá mức. Chiến lược sẽ phát ra tín hiệu giao dịch trong khu vực mua quá mức.

RSI nhanh

Chỉ số tương đối mạnh (RSI) là một chỉ số bán tháo thường được sử dụng. Chiến lược này sử dụng RSI nhanh với chu kỳ 7 để đánh giá tình trạng mua tháo trong thời gian ngắn.

Khi RSI nhanh thấp hơn 20 là bán quá mức, cao hơn 80 là mua quá mức. Chiến lược sẽ phát ra tín hiệu giao dịch ở khu vực mua quá mức.

Bộ lọc thực thể

Chiến lược này cũng thêm vào bộ lọc thực thể, để lọc một phần tín hiệu bằng cách tính toán kích thước của thực thể K-line. Chỉ khi thực thể K-line vượt quá một ngưỡng nhất định, tín hiệu giao dịch sẽ được phát ra.

Điều này có thể lọc ra một số tín hiệu giả và tăng độ tin cậy của tín hiệu.

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

Gói đa chỉ số

Chiến lược này kết hợp ba phần: chỉ số động cơ ngẫu nhiên, chỉ số RSI nhanh và bộ lọc thực thể. Bằng cách kết hợp nhiều chỉ số, bạn có thể cải thiện độ chính xác của tín hiệu và tăng cường sự ổn định của chiến lược.

Quyết định mua bán quá mức

Các chỉ số động cơ ngẫu nhiên và chỉ số RSI nhanh có thể xác định chính xác tình trạng quá mua quá bán của thị trường, chiến lược mở vị trí trong khu vực quá mua quá bán, tuân theo nguyên tắc giao dịch mua thấp, bán cao.

Giao dịch hai chiều

Chiến lược này cho phép giao dịch hai chiều với nhiều đầu và đầu trống, để nắm bắt tối đa các cơ hội giao dịch trên thị trường.

Kiểm soát rủi ro

Thêm bộ lọc vật lý, có thể lọc ra hầu hết tiếng ồn, tránh bị mắc kẹt trong các trường hợp rung động.

Rủi ro chiến lược

Rủi ro của việc chuyển đổi nhiều không gian

Chiến lược giao dịch hai chiều, chuyển đổi nhiều đầu trống thường xuyên là một điểm rủi ro tiềm ẩn. Lập luận mở vị trí tối ưu hóa thích hợp có thể làm giảm rủi ro này.

Rủi ro

Khi chỉ số đưa ra tín hiệu, có thể tập hợp một lượng lớn các nhà giao dịch theo dõi trong một thời gian ngắn, dẫn đến rủi ro đảo ngược thị trường. Bạn có thể giảm rủi ro này bằng cách tối ưu hóa các tham số chỉ số.

Rủi ro hệ thống của thị trường

Trong trường hợp cực đoan, tất cả các mô hình có thể bị hỏng. Điều này cần phải kiểm soát rủi ro này bằng cách thiết lập lỗ hổng hợp lý.

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

Tối ưu hóa tham số

Bạn có thể thử nghiệm các kết hợp các tham số khác nhau, chẳng hạn như chu kỳ SMI, chu kỳ RSI, ngưỡng lọc thực thể, để tìm các tham số tối ưu để tăng tỷ lệ lợi nhuận của chiến lược.

Động lực dừng

Thiết lập cơ chế dừng động dựa trên ATR hoặc biến động có thể kiểm soát tốt hơn rủi ro cá nhân và tổng thể.

Học máy

Tiếp theo, đưa ra thuật toán học máy để dự đoán xu hướng tương lai của giá trị chỉ số thông qua mô hình. Điều này có thể xác định trước điểm biến đổi của chỉ số, tăng cường tính tiên tiến của chiến lược.

Tóm tắt

Nói chung, chiến lược này kết hợp các chỉ số động cơ ngẫu nhiên, các chỉ số RSI nhanh và bộ lọc thực thể, để thực hiện một hệ thống phán đoán mua quá mức và bán quá mức. Sự kết hợp nhiều chỉ số làm tăng độ chính xác của tín hiệu, giao dịch hai chiều và cơ chế kiểm soát rủi ro cũng làm cho chiến lược cân bằng hơn. Bằng cách tiếp tục tối ưu hóa các tham số và mô hình, chiến lược này có khả năng thu được tỷ lệ lợi nhuận tốt hơn.

Mã nguồn chiến lược
/*backtest
start: 2023-12-22 00:00:00
end: 2024-01-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Stochastic Strategy v1.1", shorttitle = "Stochastic str 1.1", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings 
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
usesmi = input(true, defval = true, title = "Use SMI Strategy")
usersi = input(true, defval = true, title = "Use RSI Strategy")
usebod = input(true, defval = true, title = "Use Body-Filter")
a = input(5, "SMI Percent K Length")
b = input(3, "SMI Percent D Length")
limit = input(50, defval = 50, minval = 1, maxval = 100, title = "SMI Limit")
fromyear = input(2017, defval = 2017, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Fast RSI
fastup = rma(max(change(close), 0), 7)
fastdown = rma(-min(change(close), 0), 7)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Stochastic Momentum Index
ll = lowest (low, a)
hh = highest (high, a)
diff = hh - ll
rdiff = close - (hh+ll)/2
avgrel = ema(ema(rdiff,b),b)
avgdiff = ema(ema(diff,b),b)
SMI = avgdiff != 0 ? (avgrel/(avgdiff/2)*100) : 0
SMIsignal = ema(SMI,b)

//Lines
plot(SMI, color = blue, linewidth = 3, title = "Stochastic Momentum Index")
plot(SMIsignal, color = red, linewidth = 3, title = "SMI Signal Line")
plot(limit, color = black, title = "Over Bought")
plot(-1 * limit, color = black, title = "Over Sold")
plot(0, color = blue, title = "Zero Line")

//Body Filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 3 or usebod == false

//Signals
up1 = SMIsignal < -1 * limit and close < open and body and usesmi
dn1 = SMIsignal > limit and close > open and body and usesmi
up2 = fastrsi < 20 and close < open and body and usersi
dn2 = fastrsi > 80 and close > open and body and usersi
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

if up1 or up2
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1 or dn2
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()