
Chiến lược này là một hệ thống giao dịch chi phí cân bằng động đa cấp kết hợp chỉ số tương đối mạnh (RSI) và sóng thực trung bình (ATR). Nó chủ yếu bằng cách xác định các điều kiện bán quá mức trên thị trường để xây dựng kho hàng loạt và sử dụng ATR để điều chỉnh các vị trí dừng động để tạo ra lợi nhuận từ hoạt động băng tần. Chiến lược này có các đặc điểm như phân tán rủi ro, tối ưu hóa chi phí và ổn định lợi nhuận.
Chiến lược hoạt động ở cấp độ 4 giờ hoặc ngày, logic cốt lõi bao gồm các khía cạnh sau:
Chiến lược này, kết hợp các chỉ số RSI và ATR, tạo ra một hệ thống giao dịch có khả năng kiểm soát rủi ro và ổn định lợi nhuận. Cơ chế xây dựng kho hàng loạt cung cấp khả năng tối ưu hóa chi phí, trong khi thiết kế dừng động đảm bảo lợi nhuận hợp lý. Mặc dù có một số rủi ro tiềm ẩn, hiệu suất tổng thể của chiến lược sẽ được nâng cao hơn nữa bằng cách đặt các tham số hợp lý và thực hiện theo hướng tối ưu hóa.
/*backtest
start: 2024-02-21 00:00:00
end: 2025-02-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"DOGE_USDT"}]
*/
//@version=6
strategy("DCA-Based Swing Strategy (Risk $200) with Signals", overlay=true)
// === Main Indicators ===
// RSI for identifying oversold conditions
rsi = ta.rsi(close, 14)
// ATR for volatility estimation
atr = ta.atr(14)
// === Strategy Parameters ===
// Risk management
riskPerTrade = 200 // Total risk ($200)
atrRisk = 2 * atr // Risk in dollars per buy (2 ATR)
positionSize = riskPerTrade / atrRisk // Position size (shares)
// DCA Parameters
maxEntries = 4 // Maximum of 4 buys
takeProfitATR = 3 // Take profit: 3 ATR
// === Position Management ===
var float avgEntryPrice = na // Average entry price
var int entryCount = 0 // Number of buys
var line takeProfitLine = na // Take profit line
var line avgPriceLine = na // Average entry price line
// === Buy and Sell Conditions ===
buyCondition = rsi < 30 and entryCount < maxEntries // Buy when oversold
if (buyCondition)
strategy.entry("DCA Buy", strategy.long, qty=positionSize)
// Update the average entry price
avgEntryPrice := na(avgEntryPrice) ? close : (avgEntryPrice * entryCount + close) / (entryCount + 1)
entryCount += 1
// Display "BUY" signal on the chart
label.new(bar_index, low, "BUY", style=label.style_label_up, color=color.green, textcolor=color.white, size=size.normal)
// Update lines for average entry price and take profit
if (not na(takeProfitLine))
line.delete(takeProfitLine)
if (not na(avgPriceLine))
line.delete(avgPriceLine)
takeProfitPrice = avgEntryPrice + takeProfitATR * atr
// Sell condition: Take profit = 3 ATR from average entry price
takeProfitPrice = avgEntryPrice + takeProfitATR * atr
if (close >= takeProfitPrice and entryCount > 0)
strategy.close("DCA Buy")
// Reset parameters after closing
avgEntryPrice := na
entryCount := 0
// Remove lines after selling
if (not na(takeProfitLine))
line.delete(takeProfitLine)
if (not na(avgPriceLine))
line.delete(avgPriceLine)