
Chiến lược này thuộc về chiến lược theo dõi xu hướng bằng cách tính toán EMA đường nhanh và EMA đường chậm, và so sánh mối quan hệ giữa kích thước của cả hai, để thực hiện tín hiệu giao dịch vàng và chết của hai EMA. Khi tạo tín hiệu mua khi đi qua đường chậm trên đường nhanh và tạo tín hiệu bán khi đi qua đường chậm dưới đường nhanh, thực hiện một chiến lược theo dõi xu hướng đơn giản.
Lập luận cốt lõi của chiến lược bao gồm:
Tính toán EMA dòng nhanh và EMA dòng chậm: Tính toán EMA dòng nhanh với độ dài fastInput và EMA dòng chậm với độ dài slowInput qua hàm ta.ema (().
Thiết lập phạm vi thời gian quay trở lại: Thiết lập thời gian quay trở lại có được lọc hay không, backtestStartDate và backtestEndDate thiết lập thời gian bắt đầu và kết thúc quay trở lại bằng useDateFilter.
Tạo tín hiệu giao dịch: Bằng cách sử dụng hàm ta.crossover () và ta.crossunder () so sánh mối quan hệ kích thước của đường nhanh EMA và đường chậm EMA, tạo tín hiệu mua khi đường nhanh đi qua đường chậm và tạo tín hiệu bán khi đường nhanh đi qua đường chậm.
Xử lý lệnh ngoài phạm vi thời gian: Xử lý lệnh ngoài phạm vi thời gian phản hồi sẽ hủy bỏ các lệnh chưa được giao dịch và thanh toán tất cả các vị trí.
Vẽ đường trung bình di chuyển: Vẽ đường trung bình di chuyển của đường EMA nhanh và đường EMA chậm trên biểu đồ.
Đây là một chiến lược theo dõi xu hướng rất đơn giản với một số ưu điểm:
Lập luận của chiến lược rất đơn giản, dễ hiểu và dễ thực hiện.
EMA đã làm cho dữ liệu giá trở nên trơn tru, giúp giảm tiếng ồn giao dịch.
Các tham số chu kỳ EMA có thể được tùy chỉnh để phù hợp với môi trường thị trường khác nhau.
Có thể thiết lập một khoảng thời gian phản hồi linh hoạt để kiểm tra trong một khoảng thời gian cụ thể.
Có thể tối ưu hóa điều kiện vào và ra sân, kết hợp với các chỉ số khác.
Chiến lược này cũng có một số rủi ro cần lưu ý:
Chiến lược EMA đôi là quá thô lỗ và không linh hoạt để đối phó với sự thay đổi của thị trường.
Có nguy cơ giao dịch thường xuyên và lặp lại.
Thiết lập tham số EMA không đúng có thể dẫn đến lỗi tín hiệu giao dịch.
Phạm vi thời gian phản hồi không hợp lý có thể dẫn đến quá phù hợp.
Có nguy cơ rút tiền và mất mát.
Có thể kiểm soát rủi ro bằng cách tối ưu hóa các tham số, lọc thích hợp các biến động và thiết lập dừng lỗ.
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Tối ưu hóa tham số chu kỳ EMA, chọn kết hợp tham số tốt nhất.
Thêm bộ lọc cho các chỉ số khác để tránh giao dịch không cần thiết.
Tăng chiến lược dừng lỗ, kiểm soát tổn thất đơn lẻ
Kết hợp các bộ lọc như xu hướng, biến động, giảm tần suất giao dịch.
Kiểm tra các hợp đồng khác nhau để tìm đối tượng phù hợp với chiến lược tốt nhất.
Sử dụng các điểm trượt, chi phí và các chi phí khác để kiểm soát để thực tế hơn.
Chiến lược này nói chung là một chiến lược giao dịch rất đơn giản, logic rõ ràng và dễ hiểu, tạo ra tín hiệu giao dịch thông qua so sánh EMA nhanh và chậm. Ưu điểm của chiến lược này là thực hiện đơn giản, nhưng cũng có một số vấn đề như giao dịch thường xuyên, dễ gây ra quá tối ưu hóa. Bước tiếp theo có thể được cải thiện từ các khía cạnh tối ưu hóa tham số, kiểm soát rủi ro, để làm cho chiến lược mạnh mẽ hơn và thực tế.
/*backtest
start: 2022-11-06 00:00:00
end: 2023-11-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("MollyETF_EMA_Crossover", overlay = true, initial_capital = 100000, default_qty_value=100, default_qty_type=strategy.percent_of_equity)
fastInput = input( 10, "Fast EMA")
slowInput = input( 21, "Slow EMA")
// Calculate two moving averages with different lengths.
float fastMA = ta.ema(close, fastInput)
float slowMA = ta.ema(close, slowInput)
// STEP 1. Create inputs that configure the backtest's date range
useDateFilter = input.bool(true, title="Filter Date Range of Backtest",
group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2018"),
title="Start Date", group="Backtest Time Period",
tooltip="This start date is in the time zone of the exchange " +
"where the chart's instrument trades. It doesn't use the time " +
"zone of the chart or of your computer.")
backtestEndDate = input(timestamp("7 Sep 2023"),
title="End Date", group="Backtest Time Period",
tooltip="This end date is in the time zone of the exchange " +
"where the chart's instrument trades. It doesn't use the time " +
"zone of the chart or of your computer.")
// STEP 2. See if current bar falls inside the date range
inTradeWindow = true
// STEP 3. Include the date filter with the entry order conditions
// Enter a long position when `fastMA` crosses over `slowMA`.
if inTradeWindow and ta.crossover(fastMA, slowMA)
strategy.entry("buy", strategy.long)
// Enter a short position when `fastMA` crosses under `slowMA`.
if inTradeWindow and ta.crossunder(fastMA, slowMA)
strategy.close_all(comment="sell")
// STEP 4. With the backtest date range over, exit all open
// trades and cancel all unfilled pending orders
if not inTradeWindow and inTradeWindow[1]
strategy.cancel_all()
strategy.close_all(comment="Date Range Exit")
// Plot the moving averages.
plot(fastMA, "Fast MA", color.aqua)
plot(slowMA, "Slow MA", color.orange)