
Chiến lược này chủ yếu sử dụng đường trung bình di chuyển kép làm tín hiệu mua và bán, và thu lợi nhuận khi xu hướng đảo ngược. Khi đường trung bình di chuyển ngắn hạn đi qua đường trung bình di chuyển dài hạn, và khi đường trung bình di chuyển ngắn hạn đi ngang qua đường trung bình di chuyển dài hạn, là một chiến lược dừng chân theo dõi phổ biến.
Chiến lược này đặt ra hai đường trung bình di chuyển, một đường trung bình 20 ngày ngắn hơn và một đường trung bình 60 ngày dài hơn. Sau đó, xem xét sự giao thoa giữa đường trung bình ngắn hạn và đường trung bình dài hạn để quyết định tham gia.
Cụ thể, khi đường trung bình ngắn hạn trên đường trung bình dài hạn, cho thấy hiện đang trong xu hướng tăng, thì làm nhiều; khi đường trung bình ngắn hạn dưới đường trung bình dài hạn, cho thấy hiện đang trong xu hướng giảm, thì làm trống.
Phương pháp dừng lỗ sau khi thực hiện nhiều lệnh tháo lỗ là theo dõi lệnh dừng, theo giá cao nhất và giá thấp nhất để dừng lại, có thể khóa lợi nhuận tối đa.
Lập luận chính của mã là:
Chiến lược này có những ưu điểm sau:
Chiến lược này cũng có một số rủi ro:
Bạn có thể tối ưu hóa rủi ro bằng cách:
Chiến lược này có thể được tối ưu hóa hơn nữa ở những khía cạnh sau:
Thêm bộ lọc các chỉ số khác, tạo ra cơ chế nhập cảnh đa điều kiện, tránh phá vỡ giả. Ví dụ: có thể kết hợp RSI.
Tối ưu hóa các tham số chu kỳ của đường trung bình di chuyển, tìm ra sự kết hợp tham số tốt nhất. Các tham số chu kỳ khác nhau có thể được thử nghiệm bằng cách đi qua từng bước.
Tối ưu hóa phạm vi dừng. Bạn có thể tính toán phạm vi dừng tối ưu bằng dữ liệu đo đạc. Bạn cũng có thể thiết lập phạm vi dừng động.
Thiết lập cơ chế nhập lại. Sau khi dừng lỗ, bạn có thể thiết lập logic nhập lại hợp lý, giảm số lần giao dịch.
Kết hợp các chỉ số định xu hướng, tạm dừng giao dịch khi xu hướng không rõ ràng, tránh giao dịch vô hiệu.
Tham gia cơ chế quản lý vị trí, điều chỉnh vị trí và phạm vi dừng lỗ theo tình hình thị trường.
Chiến lược đảo ngược hai đường trung bình di chuyển này là một phương pháp phổ biến và hiệu quả. Tuy nhiên, có một số rủi ro cần thiết để kiểm tra tối ưu hóa các tham số đặt và phạm vi dừng, và kết hợp với các chỉ số lọc khác để sử dụng chiến lược hiệu quả nhất. Nếu được tối ưu hóa kỹ lưỡng và quản lý rủi ro nghiêm ngặt, chiến lược này có thể trở thành chiến lược giao dịch băng tần có lợi nhuận ổn định.
/*backtest
start: 2023-09-23 00:00:00
end: 2023-10-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("Noro's Bands Scalper Strategy v1.4", shorttitle = "Scalper str 1.4", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %")
needbe = input(true, defval = true, title = "Bands Entry")
needct = input(false, defval = false, title = "Counter-trend entry")
needdb = input(true, defval = true, title = "Double Body")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
needbb = input(true, defval = true, title = "Show Bands")
needbg = input(true, defval = true, title = "Show Background")
src = close
//PriceChannel 1
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2
//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd2 = center + distsma * 2
ld2 = center - distsma * 2
//Trend
trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1]
//Lines
colo = needbb == false ? na : black
plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2")
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band 1")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band 1")
plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2")
//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)
//Body
body = abs(close - open)
smabody = needdb == false ? ema(body, 30) : ema(body, 30) * 2
candle = high - low
//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and bar == -1)) ? 1 : 0
dn7 = trend == 1 and ((bar == 1 and bar[1] == 1) or (close > hd and needbe == true)) and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0
up8 = trend == -1 and ((bar == -1 and bar[1] == -1) or (close < ld2 and needbe == true)) and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0
dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and bar == 1)) ? 1 : 0
if up7 == 1 or up8 == 1
strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na)
if dn7 == 1 or dn8 == 1
strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na)