Chiến lược đảo ngược DCA hàng tháng

Tác giả:ChaoZhang, Ngày: 2023-10-08 16:12:29
Tags:

Tổng quan

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.

Nguyên tắc

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

Ư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

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.

Cơ hội gia tăng

Chiến lược có thể được cải thiện trong các lĩnh vực sau:

  1. 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.

  2. Thêm các bộ lọc khác như RSI để xác nhận tín hiệu đảo ngược.

  3. 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.

  4. 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á.

  5. 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.

Kết luận

Ý 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)


Thêm nữa