该策略是一个结合了相对强弱指数(RSI)和平均真实波幅(ATR)的多层次动态成本均摊(DCA)交易系统。它主要通过识别市场超卖条件进行分批建仓,并利用ATR动态调整止盈位置,实现波段操作获利。策略具有风险分散、成本优化和收益稳定等特点。
策略运行在4小时或日线级别,核心逻辑包括以下几个方面: 1. 入场信号基于RSI低于30的超卖判断,最多允许4次分批建仓 2. 每次建仓金额基于200美元总风险额度,根据2倍ATR动态计算持仓规模 3. 持仓管理采用动态平均成本跟踪,实时计算多次建仓后的均价 4. 止盈设置为均价上方3倍ATR,随市场波动性自适应调整 5. 通过标记线实时显示均价和止盈位置,便于视觉跟踪
该策略通过RSI和ATR指标的结合,实现了一个兼具风险控制和收益稳定的交易系统。分批建仓机制提供了成本优化的可能,而动态止盈的设计则确保了收益的合理兑现。虽然存在一些潜在风险,但通过合理的参数设置和优化方向的实施,策略的整体表现将得到进一步提升。
/*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)