
Chiến lược này là một chiến lược giao dịch sử dụng chỉ số chỉ số khối lượng đảo ngược hai chiều. Chiến lược này xây dựng một chỉ số khối lượng đảo ngược bằng cách tính toán giá cao nhất, giá thấp nhất, giá đóng cửa trong một khoảng thời gian nhất định, và tính toán trung bình di chuyển của nó để tạo ra tín hiệu giao dịch.
Chỉ số trung tâm của chiến lược này là chỉ số động lượng đảo ngược (Stochastic Momentum Index, SMI). Công thức tính toán SMI như sau:
\[SMI = \frac{Close-(HH+LL)/2}{AVGDIFF/2}*100\]
Trong đó, HH là giá cao nhất trong N ngày qua, LL là giá thấp nhất trong N ngày qua, N được xác định bởi tham số a; AVGDIFF là trung bình di chuyển M ngày của HH-LL, M được xác định bởi tham số b.
Chỉ số SMI thể hiện tính năng đảo ngược giá. Khi giá cổ phiếu gần mức cao nhất trong N ngày gần nhất, SMI gần 100 cho thấy cổ phiếu đã mua quá mức; Khi gần mức thấp nhất trong N ngày gần nhất, SMI gần 100 cho thấy cổ phiếu đã bán quá mức.
Chiến lược này sử dụng đường tín hiệu giao dịch là đường tín hiệu SMA của SMA. Sản xuất tín hiệu mua khi SMA đảo ngược xuống từ vùng mua quá mức và phá vỡ SMA; Sản xuất tín hiệu bán khi SMA đảo ngược lên từ vùng bán quá mức và phá vỡ SMA.
Trong khi đó, chiến lược đánh giá thực thể K-line phá vỡ để thiết lập dừng lỗ.
Chiến lược này có những ưu điểm sau:
Sử dụng nguyên tắc đảo ngược giá, nó có thể tạo ra tín hiệu giao dịch tại các điểm đảo ngược xu hướng và nắm bắt cơ hội đảo ngược.
Chỉ số SMI kết hợp giá cao nhất, giá thấp nhất và giá đóng cửa với nhau, tổng hợp đánh giá quá mua quá bán, tín hiệu đáng tin cậy hơn.
Kết hợp với K-line thực thể phá vỡ để thiết lập dừng lỗ, có thể dừng lỗ kịp thời Exiting the position, kiểm soát rủi ro hiệu quả.
Các tham số chiến lược ít hơn, dễ thực hiện và tối ưu hóa.
Chiến lược này cũng có một số rủi ro:
Giao dịch đảo ngược rất khó để đánh giá thời điểm đảo ngược thành công, có thể chỉ bắt được xu hướng đảo ngược sau khi tạo ra nhiều lần thua lỗ.
Lỗi đánh giá thời điểm quay ngược có thể làm tăng thiệt hại.
Thiệt hại đột phá của thực thể có thể quá nhạy cảm và có nhiều khả năng bị nhốt.
Giải pháp tương ứng:
Tối ưu hóa tham số SMI, điều chỉnh tần số giao dịch đảo ngược.
Kết hợp với các chỉ số khác để đánh giá thời điểm đảo ngược.
Điều chỉnh các tham số dừng kích thước thực thể để tránh quá nhạy cảm.
Chiến lược này có thể được tối ưu hóa theo các hướng sau:
Tối ưu hóa các tham số a và b của SMI, điều chỉnh độ nhạy của quay ngược.
Thêm các chỉ số khác để tránh bỏ lỡ xu hướng chính. Ví dụ: kết hợp đường trung bình, chỉ số biến động.
Thêm phương thức dừng để ngăn chặn dừng quá nhạy cảm hoặc chậm. Bạn có thể xem xét theo dõi dừng, dừng đường cong, v.v.
Kết hợp các mô hình học máy để đánh giá xác suất thành công của việc đảo ngược, tránh các giao dịch thất bại.
Chiến lược này nói chung là một chiến lược sử dụng chỉ số đảo ngược SMI để giao dịch hai chiều. Lợi thế là sử dụng tính năng đảo ngược giá, tạo tín hiệu giao dịch tại điểm đảo ngược, có thể bắt được nhiều cơ hội giao dịch ngắn hơn. Nhưng cũng có một số rủi ro giao dịch đảo ngược điển hình, cần tối ưu hóa các tham số và dừng để ngăn chặn tổn thất lớn hơn.
/*backtest
start: 2023-11-01 00:00:00
end: 2023-11-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=2
strategy(title = "Noro's Stochastic Strategy v1.0", shorttitle = "Stochastic str 1.0", 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")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
a = input(5, "Percent K Length")
b = input(3, "Percent D Length")
limit = input(50, defval = 50, minval = 1, maxval = 100, title = "SMI Limit")
fromyear = input(2018, defval = 2018, 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")
//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
body = abs(close - open)
abody = sma(body, 10)
//Signals
up = SMIsignal < -1 * limit and close < open
dn = SMIsignal > limit and close > open
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2
//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if up
if strategy.position_size < 0
strategy.close_all()
strategy.entry("Bottom", strategy.long, needlong == false ? 0 : lot)
if dn
if strategy.position_size > 0
strategy.close_all()
strategy.entry("Top", strategy.short, needshort == false ? 0 : lot)
if exit
strategy.close_all()