
Chiến lược phá vỡ xu hướng hai MA là một chiến lược giao dịch định lượng sử dụng trung bình di chuyển của hai chu kỳ khác nhau để xác định xu hướng và nhập vào. Chiến lược chủ yếu sử dụng MA chậm để xác định hướng xu hướng tổng thể và lọc vào bằng MA nhanh. Khi hướng xu hướng phù hợp với mức độ lớn, chọn đường K đảo ngược để vào để theo đuổi tỷ lệ thắng và lợi nhuận cao hơn.
Chiến lược này bao gồm:
Xu hướng:Bằng cách tính toán MA 21 chu kỳ, được định nghĩa là MA chậm, vị trí của nó khá ổn định, có thể được sử dụng để xác định hướng xu hướng tổng thể. Khi giá tăng gần giá MA là xu hướng tăng, khi giá giảm gần giá MA là xu hướng giảm.
Bộ lọc truy cập:Tính toán MA 5 chu kỳ, được định nghĩa là MA nhanh. Chỉ khi giá phá vỡ MA chậm, đồng thời phá vỡ MA nhanh, tín hiệu giao dịch sẽ được tạo ra. Thiết kế này chủ yếu là để lọc thêm khả năng phá vỡ giả.
Bộ lọc K:Chiến lược chỉ làm nhiều khi đường K của chu kỳ này là đường dương hoặc đường K của chu kỳ này là đường dương. Điều này được xem xét khi sử dụng đường K đảo ngược để có được tỷ lệ thành công cao hơn. Đồng thời kết hợp với chỉ số RSI nhanh để tránh mua quá nhiều hoặc bán quá nhiều.
Bộ lọc kho:Đối với thị trường tiền điện tử, chiến lược này thêm vào điều kiện đặt cược tăng gấp ba lần để phá vỡ sự biến động, lọc các cơ hội vượt trội trong quá trình giảm ở cấp độ lớn.
Thiết kế chống hư hỏng:Chiến lược hỗ trợ dừng di động. Khi mở vị trí, dừng sẽ được cập nhật theo tỷ lệ phần trăm dừng được thiết lập.
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:
Những rủi ro này có thể được tối ưu hóa bằng cách:
Chiến lược này có thể được tối ưu hóa từ các khía cạnh sau:
Tối ưu hóa tham số: Tối ưu hóa các tham số chu kỳ của MA nhanh chậm thông qua phản hồi có hệ thống hơn, nâng cao tỷ lệ rủi ro lợi nhuận tổng thể.
Nhận dạng mô hình: Tăng các chỉ số khác như KDJ, MACD để nhận ra tín hiệu đảo ngược đáng tin cậy hơn.
Tối ưu hóa Stop LossTiêu chí: Phát triển các thuật toán như dừng nổi, theo dõi dừng để giảm khả năng dừng bị kích hoạt.
Học máy: thu thập và đánh dấu nhiều dữ liệu lịch sử hơn, tự động tạo các quy tắc giao dịch bằng cách sử dụng các phương pháp học máy.
Định lượng chuyển giao: Tự động điều chỉnh chiến lược quản lý vị trí theo tình trạng thị trường.
Chiến lược đột phá MA song song nói chung là một chiến lược theo dõi xu hướng đơn giản và thực tế. Chiến lược này dễ giải thích và nắm bắt hơn so với các thuật toán học máy phức tạp, và có độ tin cậy cao hơn. Với việc tối ưu hóa tham số, mở rộng chức năng và giới thiệu học máy, chiến lược này có tiềm năng cải tiến rất lớn và là một điểm khởi đầu tốt cho giao dịch định lượng.
/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-07 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy(title = "Noro's Trend MAs Strategy v2.0 +CB", shorttitle = "Trend MAs str 2.0", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)
//Settings
needlong = input(true, "long")
needshort = input(true, "short")
needstops = input(false, "stops")
stoppercent = input(5, defval = 5, minval = 1, maxval = 50, title = "Stop, %")
useohlc4 = input(false, defval = false, title = "Use OHLC4")
usefastsma = input(true, "Use fast MA Filter")
fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period")
slowlen = input(21, defval = 20, minval = 2, maxval = 200, title = "slow MA Period")
bars = input(2, defval = 2, minval = 0, maxval = 3, title = "Bars Q")
needbg = input(false, defval = false, title = "Need trend Background?")
needarr = input(false, defval = false, title = "Need entry arrows?")
needex = input(true, defval = true, title = "Need extreme? (crypto/fiat only!!!)")
src = useohlc4 == true ? ohlc4 : close
//PriceChannel 1
lasthigh = highest(src, slowlen)
lastlow = lowest(src, slowlen)
center = (lasthigh + lastlow) / 2
//PriceChannel 2
lasthigh2 = highest(src, fastlen)
lastlow2 = lowest(src, fastlen)
center2 = (lasthigh2 + lastlow2) / 2
//Trend
trend = low > center and low[1] > center[1] ? 1 : high < center and high[1] < center[1] ? -1 : trend[1]
//Bars
bar = close > open ? 1 : close < open ? -1 : 0
redbars = bars == 0 ? 1 : bars == 1 and bar == -1 ? 1 : bars == 2 and bar == -1 and bar[1] == -1 ? 1 : bars == 3 and bar == -1 and bar[1] == -1 and bar[2] == -1 ? 1 : 0
greenbars = bars == 0 ? 1 : bars == 1 and bar == 1 ? 1 : bars == 2 and bar == 1 and bar[1] == 1 ? 1 : bars == 3 and bar == 1 and bar[1] == 1 and bar[2] == 1 ? 1 : 0
//Fast RSI
fastup = rma(max(change(close), 0), 2)
fastdown = rma(-min(change(close), 0), 2)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))
//CryptoBottom
mac = sma(close, 10)
len = abs(close - mac)
sma = sma(len, 100)
max = max(open, close)
min = min(open, close)
up3 = close < open and len > sma * 3 and min < min[1] and fastrsi < 10 ? 1 : 0
//Signals
up = trend == 1 and (low < center2 or usefastsma == false) and (redbars == 1) ? 1 : 0
dn = trend == -1 and (high > center2 or usefastsma == false) and (greenbars == 1) ? 1 : 0
up2 = high < center and high < center2 and bar == -1 ? 1 : 0
dn2 = low > center and low > center2 and bar == 1 ? 0 : 0
//Lines
plot(center, color = blue, linewidth = 3, transp = 0, title = "Slow MA")
plot(center2, color = red, linewidth = 3, transp = 0, title = "PriceChannel 2")
//Arrows
plotarrow(up == 1 and needarr == true ? 1 : 0, colorup = black, colordown = black, transp = 0)
plotarrow(dn == 1 and needarr == true ? -1 : 0, colorup = black, colordown = black, transp = 0)
//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 90)
//Alerts
alertcondition(up == 1, title='buy', message='Uptrend')
alertcondition(dn == 1, title='sell', message='Downtrend')
//Trading
stoplong = up == 1 and needstops == true ? close - (close / 100 * stoppercent) : stoplong[1]
stopshort = dn == 1 and needstops == true ? close + (close / 100 * stoppercent) : stopshort[1]
longCondition = up == 1 or (up2 == 1 and needex == true) or up3 == 1
if (longCondition)
strategy.entry("Long", strategy.long, needlong == false ? 0 : na)
strategy.exit("Stop Long", "Long", stop = stoplong)
shortCondition = dn == 1
if (shortCondition)
strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
strategy.exit("Stop Short", "Short", stop = stopshort)