
Chiến lược này được thiết kế đơn giản, dễ hiểu và dễ thực hiện, đặc biệt phù hợp với các nhà giao dịch muốn nắm bắt các nguyên tắc cơ bản của giao dịch trung bình di chuyển. Ý tưởng cốt lõi của chiến lược là hệ thống tạo ra nhiều tín hiệu khi đường trung bình ngắn từ dưới lên đi qua đường trung bình dài; hệ thống tạo ra tín hiệu trống khi đường trung bình ngắn từ trên xuống đi qua đường trung bình dài.
Cốt lõi của chiến lược này dựa trên sự tương tác của hai đường trung bình di chuyển đơn giản (SMA):
Logic tạo tín hiệu giao dịch:
Quá trình thực hiện giao dịch:
Chiến lược cũng cho phép người dùng tùy chỉnh nguồn giá (giá mở mặc định) và độ dài chu kỳ đường trung bình để phù hợp với môi trường thị trường hoặc phong cách giao dịch khác nhau.
Bằng cách phân tích sâu hơn về mã chiến lược, chúng tôi có thể tóm tắt một số ưu điểm rõ ràng:
Mặc dù chiến lược này được thiết kế đơn giản và hiệu quả, nhưng vẫn có những rủi ro tiềm ẩn:
Giao dịch thường xuyên trong thị trường chấn động: Trong thị trường chấn động hoặc chấn động, đường trung bình ngắn hạn và dài hạn có thể giao nhau thường xuyên, dẫn đến quá nhiều tín hiệu giao dịch và chi phí giao dịch không cần thiết
Vấn đề về sự chậm trễ: Moving Average là một chỉ số chậm trễ, tín hiệu có thể được tạo ra khi xu hướng đã phát triển hoặc sắp kết thúc
Rủi ro phá vỡ giả: Giá có thể vượt qua đường trung bình một thời gian ngắn và quay trở lại xu hướng ban đầu, dẫn đến tín hiệu sai
Thiếu cơ chế dừng lỗ: Chiến lược hiện tại không có thiết lập dừng lỗ rõ ràng, có thể dẫn đến tổn thất lớn trong trường hợp đảo ngược mạnh mẽ
Tính nhạy cảm của tham số: hiệu suất của chiến lược nhạy cảm với lựa chọn độ dài chu kỳ trung bình, các tham số không phù hợp có thể dẫn đến thay đổi lớn hiệu quả của chiến lược
Dựa trên những phân tích sâu sắc về mã, tôi đề xuất một số hướng tối ưu hóa:
Thêm bộ lọc xu hướng: giới thiệu ADX, chỉ số cường độ xu hướng hoặc định vị so với đường trung bình của giá, chỉ tạo tín hiệu trong môi trường xu hướng được xác nhận, tránh giao dịch thường xuyên trong thị trường xung đột
Thực hiện cơ chế dừng động: thiết lập mức dừng động dựa trên ATR hoặc các chỉ số biến động khác để bảo vệ lợi nhuận và hạn chế rủi ro tối đa cho một giao dịch
Tối ưu hóa thời gian nhập: Xem xét sử dụng xác nhận chu kỳ nhỏ sau khi tạo tín hiệu hoặc chờ gọi lại để nhập lại để có được giá thực hiện tốt hơn
Tăng bộ lọc khối lượng giao dịch: tăng xác nhận khối lượng giao dịch dựa trên tín hiệu chéo, chỉ thực hiện giao dịch khi khối lượng giao dịch cũng hỗ trợ thay đổi hướng
Thực hiện chu kỳ trung bình tự điều chỉnh: tự động điều chỉnh độ dài chu kỳ trung bình theo biến động của thị trường, sử dụng chu kỳ dài trong môi trường biến động cao và chu kỳ ngắn trong môi trường biến động thấp
Thêm cơ chế mở kho hàng loạt: thay vì xây dựng tất cả các kho một lần, xây dựng kho hàng loạt theo từng bước để giảm nguy cơ lựa chọn thời điểm
Chiến lược theo dõi xu hướng chéo đường hai chiều là một hệ thống giao dịch định lượng đơn giản và mạnh mẽ, tạo ra tín hiệu giao dịch rõ ràng bằng cách chéo đường trung bình di chuyển ngắn hạn và dài hạn. Ưu điểm chính của nó là hoạt động đơn giản, trực quan trực quan và cơ chế đảo ngược tự động, cho phép các nhà giao dịch theo dõi xu hướng thị trường một cách khách quan. Tuy nhiên, chiến lược này cũng có rủi ro tiềm ẩn như giao dịch thường xuyên và tín hiệu chậm trễ trong thị trường sốc.
Chiến lược cơ bản này có thể được tăng cường đáng kể bằng cách thêm bộ lọc xu hướng, thực hiện cơ chế dừng lỗ động, tối ưu hóa thời gian vào và tăng xác nhận khối lượng giao dịch. Đặc biệt, kết hợp với các chỉ số kỹ thuật khác để lọc tín hiệu và tối ưu hóa quản lý rủi ro sẽ giúp cải thiện hiệu suất của chiến lược trong nhiều môi trường thị trường.
Đây là một điểm khởi đầu lý tưởng cho người mới muốn bắt đầu định lượng giao dịch; đối với các nhà giao dịch có kinh nghiệm, nó cung cấp một nền tảng vững chắc để có thể tùy chỉnh và tối ưu hóa hơn nữa. Điều quan trọng là bất kỳ cải tiến nào được áp dụng nên được đánh giá thông qua kiểm tra lại nghiêm ngặt và xác minh về phía trước để đảm bảo rằng cải tiến chiến lược thực sự tăng giá trị lâu dài.
/*backtest
start: 2025-01-01 00:00:00
end: 2025-03-24 00:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//@version=6
//
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// @author = Da_mENIZ
// © denis_zvegelj
// last change 20.Mar.2025
//
// Simple MA Crossover strategy that shows on the chart with Long/Short indicators. Feel free to use it to suit
// your needs
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
strategy("DZ Simple MA Crossover Strategy", shorttitle="DZ_MACross", overlay=true, calc_on_every_tick=true)
// Define the moving average lengths
i_src_price = input.source (open, "Price source", group="Main Settings")
i_shMA_len = input.int (9, "Short MA Length", minval=1, group="Main Settings")
i_loMA_len = input.int (21, "Long MA Length", minval=6, group="Main Settings")
// Calculate the moving averages
short_MA = ta.sma(i_src_price, i_shMA_len)
long_MA = ta.sma(i_src_price, i_loMA_len)
// Plot the moving averages on the chart
plot(short_MA, color=color.red, linewidth=2, title="Short MA")
plot(long_MA, color=color.blue, linewidth=2, title="Long MA")
// Generate the buy and sell signals
long_Cond = ta.crossover(short_MA, long_MA)
short_Cond = ta.crossunder(short_MA, long_MA)
// Place the orders based on conditions
if (long_Cond)
strategy.close("Short", immediately = true, comment = "Close")
strategy.entry("Long", strategy.long, comment = "Enter")
label.new(bar_index+1, open, "Long\n" + str.tostring(open), style=label.style_label_down, color=color.blue, textcolor=color.white, yloc=yloc.abovebar)
if (short_Cond)
strategy.close("Long", immediately = true, comment = "Close")
// strategy.entry("Short", strategy.short, comment = "Short\n" + str.tostring(open))
strategy.entry("Short", strategy.short, comment = "Enter")
label.new(bar_index+1, open, "Short\n" + str.tostring(open), style=label.style_label_up, color=color.red, textcolor=color.white, yloc=yloc.belowbar)