
La estrategia es un sistema de comercio de costos dinámicos de equilibrio (DCA) de varios niveles que combina un índice relativamente débil (RSI) y una amplitud real promedio (ATR). Se trata principalmente de la identificación de condiciones de sobreventa en el mercado para la construcción de un almacén por lotes y el uso de ATR para ajustar dinámicamente las posiciones de parada para obtener ganancias de la operación de la banda. La estrategia tiene características como dispersión de riesgos, optimización de costos y estabilidad de ganancias.
Las estrategias se ejecutan a nivel de 4 horas o líneas diarias, y la lógica central incluye los siguientes aspectos:
La estrategia, a través de la combinación de los indicadores RSI y ATR, logra un sistema de negociación que combina control de riesgo y estabilidad de ganancias. El mecanismo de construcción de la bolsa por lotes ofrece la posibilidad de optimización de los costos, mientras que el diseño de la parada dinámica asegura un rendimiento razonable de los beneficios. Aunque existen algunos riesgos potenciales, el rendimiento general de la estrategia se mejorará aún más mediante la configuración de parámetros razonables y la implementación de la dirección de optimización.
/*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)