Chiến lược này kết hợp tỷ lệ trung bình chi phí đô la (DCA) với tính năng lấy lợi nhuận cuối cùng có sẵn trên các nền tảng trao đổi. Nó thiết lập độ lệch giá 1% cho mua hàng và nhắm mục tiêu lợi nhuận 0,5% trên mỗi lần bán hàng. Lý do cho việc nhắm mục tiêu lợi nhuận nhỏ là để đảm bảo hoạt động trơn tru cho bot giao dịch, tránh bị mắc kẹt trong thời kỳ thị trường chậm chạp. Dựa trên kiểm tra ngược, bot này đã được chứng minh là đủ thích nghi để chịu được biến động và thao túng thị trường. Mặc dù tỷ lệ phần trăm hàng năm (APR) có thể không cao đặc biệt, nhưng nó cung cấp một lựa chọn thỏa đáng và an toàn cho đầu tư dài hạn, thường vượt qua chiến lược mua và giữ truyền thống (HODL).
Chiến lược đầu tiên thiết lập các tham số có thể cấu hình như tỷ lệ dừng cuối cùng, lệnh DCA tối đa, tỷ lệ lệ lệ lệch giá, v.v. Sau đó nó theo dõi các biến như giá mua cuối cùng, số lượng mua, giá mua ban đầu, giá dừng cuối cùng, v.v. Trên logic mua, nếu giá hiện tại thấp hơn giá mua cuối cùng * (1 - tỷ lệ lệ lệ lệch giá) và số lượng mua chưa đạt đến lệnh DCA tối đa, nó sẽ phát ra tín hiệu mua và ghi lại giá mua. Trên logic bán, nếu giá hiện tại cao hơn giá mua cuối cùng * (1 + tỷ lệ lợi nhuận), nó sẽ thiết lập giá dừng cuối cùng. Nếu giá tiếp tục tăng trên mức giá dừng cuối cùng, giá dừng cuối cùng sẽ được cập nhật xuống mức hiện tại * (1 - tỷ lệ phần trăm). Nếu giá giảm xuống dưới mức giá dừng cuối cùng, một tín hiệu được phát ra trong khi giá bán phù hợp, sẵn sàng cho vòng mua tiếp theo của DCA.
Kết hợp DCA và dừng lỗ để đảm bảo chi phí trung bình trong khi khóa lợi nhuận một phần để tránh rút tiền.
Cơ chế dừng kéo dài linh hoạt với tỷ lệ lợi nhuận và tỷ lệ kéo dài điều chỉnh để giảm thiểu rủi ro.
Các kết quả được kiểm tra lại vượt trội hơn việc mua và giữ, với lợi nhuận hàng năm ổn định phù hợp với các khoản đầu tư dài hạn.
Dễ dàng thực hiện với các tham số có thể điều chỉnh để dễ dàng áp dụng trên các nền tảng trao đổi lớn.
Số lượng mua DCA hạn chế có nghĩa là tổn thất có thể tăng lên nếu thị trường giảm trong thời gian dài.
Các thiết lập dừng lỗ chậm kém có thể dẫn đến việc lấy lợi nhuận sớm hoặc mất mát.
Chi phí giao dịch có thể ăn vào lợi nhuận.
Cần đủ vốn để hỗ trợ mua DCA thường xuyên.
Thực hiện các điểm dừng thích nghi, giảm tỷ lệ giảm khi đạt được các mốc lợi nhuận nhất định.
Bao gồm các đường trung bình động, tăng số tiền mua xung quanh các khu vực hỗ trợ chính.
Thêm cơ chế tái cân bằng để điều chỉnh số tiền DCA dựa trên tổng tài sản.
Tối ưu hóa các thiết lập tham số và kiểm tra lợi nhuận trong các giai đoạn giữ khác nhau.
Chiến lược này kết hợp DCA và trailing stops để có lợi nhuận giao dịch thuật toán ổn định trong thời gian dài. Kết quả được kiểm tra lại là mạnh mẽ và phù hợp với các nhà đầu tư tập trung vào tăng trưởng ổn định. Mã đơn giản và sạch sẽ làm cho nó dễ hiểu và thực hiện.
/*backtest start: 2023-02-16 00:00:00 end: 2024-02-22 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Stavolt //@version=5 strategy("DCA Strategy with Trailing Take Profit", overlay=true, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=10) // Correctly using input to define user-configurable parameters takeProfitPercent = input.float(0.6, title="Take Profit (%)", minval=0.1, maxval=5) trailingPercent = input.float(0.1, title="Trailing Stop (%)", minval=0.05, maxval=1) maxDCAOrders = input.int(10, title="Max DCA Orders", minval=1, maxval=20) priceDeviationPercent = input.float(1.0, title="Price Deviation (%)", minval=0.5, maxval=5) var float lastBuyPrice = na var int buyCount = 0 var float initialBuyPrice = na var float trailingStopPrice = na // Strategy logic here... // Note: The detailed logic for buying and selling based on the DCA strategy // needs to be tailored to your specific requirements and tested for correctness. if (buyCount < maxDCAOrders) if (na(lastBuyPrice) or close < lastBuyPrice * (1 - priceDeviationPercent / 100)) strategy.entry("Buy", strategy.long) lastBuyPrice := close buyCount += 1 if (na(initialBuyPrice)) initialBuyPrice := close if (not na(lastBuyPrice) and close > lastBuyPrice * (1 + takeProfitPercent / 100)) if (na(trailingStopPrice) or close > trailingStopPrice) trailingStopPrice := close * (1 - trailingPercent / 100) if (close < trailingStopPrice) strategy.close("Buy") lastBuyPrice := na trailingStopPrice := na buyCount := 0 initialBuyPrice := na