Chiến lược giao dịch Momentum Dual Moving Average là một chiến lược giao dịch ngắn hạn sử dụng cả động lực giá và các chỉ số xu hướng. Chiến lược sử dụng giá đóng, giá mở, kênh giá, RSI nhanh và các chỉ số khác để tạo ra tín hiệu giao dịch. Nó sẽ thiết lập các vị trí dài hoặc ngắn khi giá đột phá hoặc tín hiệu chỉ số xuất hiện. Nó cũng thiết lập các điều kiện dừng lỗ để buộc thanh lý khi lỗ đạt đến một mức độ nhất định.
Chiến lược đưa ra quyết định giao dịch chủ yếu dựa trên các chỉ số đánh giá sau:
Kênh giá: Tính toán giá cao nhất và thấp nhất của 30 ngọn nến gần đây nhất để xác định phạm vi kênh. Giá đóng trên điểm giữa kênh được coi là tăng. Giá đóng dưới điểm giữa kênh được coi là giảm.
RSI nhanh: Tính toán giá trị RSI của 2 ngọn nến mới nhất. RSI dưới 25 được coi là quá bán và RSI trên 75 được coi là quá mua.
Đường Yin Yang: Tính toán kích thước thực thể của 2 ngọn nến mới nhất. Hai ngọn nến màu đỏ cho thấy tín hiệu giảm trong khi hai ngọn nến màu xanh lá cây cho thấy tín hiệu tăng.
Điều kiện dừng lỗ: buộc thanh lý khi lỗ đạt một tỷ lệ phần trăm nhất định để hạn chế lỗ.
Với các tín hiệu kết hợp từ các chỉ số xu hướng, động lực và mua quá mức / bán quá mức, chiến lược ngắn hạn này có thể xác định hiệu quả sự đảo ngược và tạo ra các tín hiệu giao dịch kịp thời.
Những lợi thế của chiến lược này bao gồm:
Cải thiện độ chính xác tín hiệu bằng cách kết hợp nhiều chỉ số, giúp lọc các tín hiệu sai.
Phản ứng nhanh hơn đối với các điểm biến đổi do sử dụng RSI nhanh, nhạy hơn RSI thông thường.
Độ tin cậy cao trên các sản phẩm và khung thời gian khác nhau, nhờ tối ưu hóa tham số nghiêm ngặt trong các thử nghiệm ngược.
Cơ chế dừng lỗ tự động để kiểm soát tổn thất tiềm năng vượt quá mong đợi.
Một số rủi ro của chiến lược này:
Thiết lập tham số kênh giá không chính xác có thể gây sốc. Các kênh quá hẹp có thể gây ra sự đột phá sai.
Thời gian giữ vị trí đơn phương có thể quá dài trong các xu hướng mạnh, vượt quá dự báo.
Thiết lập điểm dừng lỗ không chính xác có thể làm tăng tổn thất.
Chúng ta có thể giảm thiểu và giảm thiểu những rủi ro này bằng cách điều chỉnh các thông số kênh, tối ưu hóa thời gian nhập cảnh, điều chỉnh động các điểm dừng lỗ vv.
Một số hướng mà chiến lược có thể được tối ưu hóa thêm:
Kết hợp các thuật toán học máy để đạt được tối ưu hóa tham số tự động, tăng khả năng thích nghi.
Kết hợp nhiều nguồn dữ liệu hơn như tin tức để cải thiện quyết định giao dịch và độ chính xác tín hiệu.
Phát triển các cơ chế định hình vị trí năng động dựa trên điều kiện thị trường để kiểm soát tốt hơn rủi ro.
Mở rộng khả năng áp dụng cho giao dịch tùy chọn nhị phân tương lai để tăng thêm lợi nhuận tuyệt đối.
Chiến lược này kết hợp các kỹ thuật khác nhau bao gồm đột phá giá, tín hiệu chỉ báo, dừng lỗ vv. Nó đã chứng minh sự ổn định và hiệu suất tốt trong các thử nghiệm ngược và giao dịch trực tiếp. Khi các công nghệ thuật toán và dữ liệu tiến bộ, vẫn còn lợi nhuận đáng kể cho chiến lược này. Có thể mong đợi cải tiến liên tục.
/*backtest start: 2023-11-23 00:00:00 end: 2023-11-30 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Price Channel Strategy v1.2", shorttitle = "Price Channel str 1.2", overlay=true, 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 = 100000, title = "capital, %") uset = input(true, defval = true, title = "Use trend entry") usect = input(true, defval = true, title = "Use counter-trend entry") usersi = input(true, defval = true, title = "Use RSI strategy") pch = input(30, defval = 30, minval = 2, maxval = 200, title = "Price Channel Period") showcl = input(true, defval = true, title = "Price Channel") 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") src = close //Price channel lasthigh = highest(src, pch) lastlow = lowest(src, pch) center = (lasthigh + lastlow) / 2 trend = low > center ? 1 : high < center ? -1 : trend[1] col = showcl ? blue : na col2 = showcl ? black : na plot(lasthigh, color = col2, linewidth = 2) plot(lastlow, color = col2, linewidth = 2) plot(center, color = col, linewidth = 2) //Bars bar = close > open ? 1 : close < open ? -1 : 0 rbars = sma(bar, 2) == -1 gbars = sma(bar, 2) == 1 //Fast RSI fastup = rma(max(change(src), 0), 2) fastdown = rma(-min(change(src), 0), 2) fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown)) //Signals body = abs(close - open) abody = sma(body, 10) up1 = rbars and close > center and uset dn1 = gbars and close < center and uset up2 = close <= lastlow and close < open and usect dn2 = close >= lasthigh and close > open and usect up3 = fastrsi < 25 and close > center and usersi dn3 = fastrsi > 75 and close < center and usersi exit = (((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2) lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1] //Trading if up1 or up2 or up3 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 or dn3 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()