Mục đích của chiến lược này là xác định các điểm đảo ngược của xu hướng giảm ngắn hạn của tài sản và đầu tư một số tiền cố định tại các điểm đó. Điều này cho phép trung bình chi phí đô la cố định (DCA) ở mức giá tương đối thấp sau khi bắt đầu xu hướng tăng.
Chiến lược này hoạt động theo khung thời gian hàng tháng. Có 240 thanh 1 giờ trong mỗi tháng, được sử dụng để xác định thời gian đảo ngược xu hướng.
Cụ thể, chiến lược tính toán sự khác biệt giữa EMA nhanh và EMA chậm (EMA_CD), cũng như đường tín hiệu của EMA_CD. Khi đường nhanh vượt trên đường tín hiệu, nó xác định kết thúc xu hướng giảm ngắn hạn và kích hoạt tín hiệu mua.
Sau khi tín hiệu mua, chiến lược sẽ đóng tất cả các vị trí vào cuối tháng. Sau đó quá trình lặp lại vào tháng tiếp theo, với việc mua và giữ định kỳ trong một tháng.
Điều này cho phép chúng ta đánh giá dưới cùng ở cuối các đợt giảm ngắn hạn, và giá trung bình đồng đô la ở các khoảng thời gian cố định.
Ưu điểm lớn nhất của chiến lược này là nó có thể lọc ra các thị trường giới hạn phạm vi và chỉ mua tại các điểm đảo ngược xu hướng, do đó chi phí đô la trung bình ở mức giá tương đối tốt hơn.
Ngoài ra, sử dụng EMA để xác định điểm đảo ngược có thể ổn định và chính xác hơn so với chỉ nhìn vào sự đảo ngược nến. EMA có thể làm mịn tiếng ồn thị trường ngắn hạn ảnh hưởng đến thời gian nhập cảnh.
Cuối cùng, lệnh dừng lỗ hàng tháng khóa hiệu suất cho mỗi khoản đầu tư hàng tháng, giới hạn mức lỗ tối đa mỗi tháng.
Rủi ro lớn nhất của chiến lược này là giá tiếp tục giảm sau khi mua, dẫn đến dừng lỗ vào cuối tháng.
Chúng ta có thể tối ưu hóa các thông số của EMA để cải thiện nhận dạng, hoặc kết hợp các chỉ số khác như RSI để xác nhận tín hiệu đảo ngược.
Một rủi ro khác là mức dừng lỗ. Một mức dừng lỗ quá chặt có thể bị dừng bởi biến động ngắn hạn dễ dàng. Một mức dừng lỗ quá rộng không thể hạn chế lỗ. Các thông số tối ưu cần phải được tìm thấy bằng cách thử nghiệm các mức dừng lỗ khác nhau.
Chiến lược có thể được cải thiện trong các lĩnh vực sau:
Tối ưu hóa các khoảng thời gian EMA để tìm ra sự kết hợp các tham số tối ưu để xác định sự đảo ngược.
Thêm các bộ lọc khác như RSI để xác nhận tín hiệu đảo ngược.
Kiểm tra các mức dừng lỗ khác nhau để tìm điểm tối ưu tối đa hóa việc ngăn ngừa mất mát mà không bị chọc.
Xem xét thêm dừng lại sau trên stop loss để điều chỉnh mức dừng lại năng động dựa trên giá.
Kiểm tra các khung thời gian khác nhau như hàng ngày hoặc hàng tuần để xem hoạt động tốt nhất cho chiến lược này.
Ý tưởng tổng thể của chiến lược này rất đơn giản và rõ ràng - sử dụng EMA để xác định sự đảo ngược xu hướng ngắn hạn và giá trị trung bình đô la tại các điểm đảo ngược hàng tháng. Nó có thể lọc hiệu quả các thị trường hỗn loạn và đầu tư với giá tương đối thấp. Không gian tối ưu hóa chủ yếu nằm trong các kỹ thuật điều chỉnh tham số và dừng lỗ. Nhìn chung đây là một khái niệm chiến lược tuyệt vời cho việc phân bổ tài sản cố định, đáng để thử nghiệm và nâng cao hơn nữa.
/*backtest start: 2023-09-07 00:00:00 end: 2023-10-07 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © BHD_Trade_Bot // @version=5 // strategy( // shorttitle = 'DCA After Downtrend', // title = 'DCA After Downtrend (by BHD_Trade_Bot)', // overlay = true, // calc_on_every_tick = true, // calc_on_order_fills = true, // use_bar_magnifier = true, // pyramiding = 100, // initial_capital = 0, // default_qty_type = strategy.cash, // default_qty_value = 1000, // commission_type = strategy.commission.percent, // commission_value = 0.1) // Backtest Time Period start_year = input(title='Start year' ,defval=2017) start_month = input(title='Start month' ,defval=1) start_day = input(title='Start day' ,defval=1) start_time = timestamp(start_year, start_month, start_day, 00, 00) end_year = input(title='end year' ,defval=2050) end_month = input(title='end month' ,defval=1) end_day = input(title='end day' ,defval=1) end_time = timestamp(end_year, end_month, end_day, 23, 59) window() => true // EMA ema50 = ta.ema(close, 50) ema200 = ta.ema(close, 200) // EMA_CD emacd = ema50 - ema200 emacd_signal = ta.ema(emacd, 20) hist = emacd - emacd_signal // Count n candles after x long entries var int nPastCandles = 0 var int entryNumber = 0 nPastCandles := nPastCandles + 1 // ENTRY CONDITIONS // 8 hours per day => 240 hours per month entry_condition1 = nPastCandles > entryNumber * 240 // End of downtrend entry_condition2 = ta.crossover(emacd, emacd_signal) ENTRY_CONDITIONS = entry_condition1 and entry_condition2 if ENTRY_CONDITIONS and window() entryNumber := entryNumber + 1 entryId = 'Long ' + str.tostring(entryNumber) strategy.entry(entryId, strategy.long) // CLOSE CONDITIONS // Last bar CLOSE_CONDITIONS = barstate.islast if CLOSE_CONDITIONS strategy.close_all() // Draw plot(ema50, color=color.orange, linewidth=3) plot(ema200, color=entry_condition1 ? color.green : color.red, linewidth=3)