
Đây là một chiến lược giao dịch cá nhân kết hợp các chỉ số động lực và lọc thực thể K-line. Nó sử dụng tổng hợp các chỉ số kỹ thuật của chỉ số động lực ngẫu nhiên, RSI nhanh và lọc thực thể K-line, để thực hiện một bước đột phá động lực chủ yếu, đồng thời xem xét chiến lược mua quá mức.
Chiến lược này sử dụng ba chỉ số sau để đánh giá tín hiệu giao dịch:
Chỉ số động lực ngẫu nhiên (SMI): Nó kết hợp khoảng cách thực thể K-line và vị trí tương đối của giá đóng cửa, để xác định động lực giá mạnh hoặc yếu. Khi vượt qua đường giới trên SMI, nó tạo ra tín hiệu mua, và khi vượt qua đường giới dưới đó, nó tạo ra tín hiệu bán.
RSI nhanh (đường 7): Nó đánh giá tình trạng mua bán quá mức của giá. RSI thấp hơn 20 tạo ra tín hiệu mua cho bán quá mức và cao hơn 80 tạo ra tín hiệu bán cho mua quá mức.
Bộ lọc thực thể K-line: tính kích thước thực thể K-line trung bình trong 10 ngày, có hiệu lực khi thực thể K-line ngày hôm nay vượt quá một phần ba giá trị trung bình, tránh tín hiệu không hiệu lực.
Chiến lược này sẽ đánh giá tín hiệu của SMI và RSI, và nếu đáp ứng yêu cầu tín hiệu của một trong các chỉ số, sẽ kết hợp với bộ lọc thực thể K-line để xác định liệu tín hiệu đó có hiệu quả hay không, và nếu có hiệu quả sẽ tạo ra tín hiệu giao dịch.
Chiến lược này có những ưu điểm sau:
Một số chỉ số kết hợp với nhau để đánh giá chính xác hơn và đáng tin cậy hơn.
Thêm bộ lọc thực thể K-line để tránh tín hiệu vô hiệu.
Kết hợp với phán đoán mua quá mức, sẽ dễ dàng hơn để nắm bắt tín hiệu khi xu hướng đảo ngược.
Nhiều giao dịch hai chiều, cơ hội kiếm tiền tăng lên.
Sử dụng một số vị trí giao dịch để tránh tổn thất quá mức trong một giao dịch.
Chiến lược này cũng có một số rủi ro:
Các chỉ số có thể tạo ra các tín hiệu sai dẫn đến tổn thất. Các tham số có thể được tối ưu hóa để giảm tín hiệu sai.
Một số giao dịch vị trí không thể tận dụng đầy đủ các cơ hội xu hướng ở mỗi hướng. Bạn có thể nhận được lợi nhuận cao hơn bằng cách tăng vị trí giao dịch.
SMI là chỉ số chính, nhạy cảm với cài đặt tham số, cài đặt không đúng có thể bỏ lỡ cơ hội giao dịch hoặc tăng tín hiệu sai.
Nhiều giao dịch hai chiều, hoạt động thường xuyên, chi phí giao dịch tăng lên.
Chiến lược này có thể được tối ưu hóa theo một số hướng sau:
Tối ưu hóa các tham số của SMI và RSI để tìm ra sự kết hợp tham số tốt nhất.
Tăng cường vị trí và cơ chế quản lý vị trí để có được lợi nhuận cao hơn trong xu hướng.
Tăng chiến lược dừng lỗ và giảm rủi ro thua lỗ một lần.
Kết hợp với nhiều chỉ số hơn để đánh giá độ tin cậy của tín hiệu, giảm tín hiệu sai.
Sử dụng hợp đồng hiệu quả để giảm chi phí giao dịch.
Chiến lược này sử dụng tổng hợp các chỉ số kỹ thuật SMI, RSI nhanh và K-line entity filter, để thực hiện một chiến lược giao dịch cá nhân chủ yếu về động lực, đồng thời tính đến việc mua bán quá mức. Nó có các lợi thế như phán đoán chính xác, nhận ra tín hiệu hiệu quả, kết hợp với giao dịch mua bán quá mức và giao dịch quá mức, cũng có một số yếu tố nhạy cảm, không tận dụng đầy đủ xu hướng, hoạt động thường xuyên. Bằng cách liên tục tối ưu hóa các thiết lập tham số, tăng vị trí và quản lý dừng lỗ, giảm tín hiệu sai, các phương pháp này có thể đạt được hiệu quả giao dịch tốt hơn.
/*backtest
start: 2023-10-23 00:00:00
end: 2023-11-22 00:00:00
period: 6h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=2
strategy(title = "Noro's Stochastic Strategy v1.2", shorttitle = "Stochastic str 1.2", 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 = SMI < -1 * limit and close < open and body and usesmi
dn1 = SMI > 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()