
Esta estrategia es una estrategia de trading en cuadrícula que aumenta las posiciones en función del grado de caída del precio y cierra las posiciones cuando se alcanza un objetivo de beneficio fijo. La lógica central de la estrategia es comprar cuando el mercado cae a un rango preestablecido y cerrar toda la posición cuando el precio rebota para alcanzar la ganancia objetivo y obtener ganancias repitiendo este proceso constantemente. Esta estrategia es particularmente adecuada para capturar oportunidades de rebote a corto plazo en mercados volátiles.
La estrategia utiliza un mecanismo compuesto de negociación en red y toma de ganancias direccional:
Esta es una estrategia de trading en cuadrícula simple pero práctica, que crea posiciones en lotes de acuerdo con el rango de caída preestablecido y cierra todas las posiciones cuando se alcanza la ganancia objetivo. La principal ventaja de la estrategia radica en la certeza de su ejecución y la diversificación del riesgo, pero al utilizarla hay que prestar atención a la selección del entorno de mercado y a la optimización de los parámetros. Todavía hay mucho margen para optimizar la estrategia añadiendo stop loss dinámico, mejorando la gestión de posiciones, etc. Al usarlo en operaciones reales, se recomienda realizar primero pruebas retrospectivas suficientes y ajustar los parámetros en función de las condiciones reales del mercado.
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Buy Down 5%, Sell at 5% Profit", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)
// Inputs
initial_date = input(timestamp("2024-01-01 00:00:00"), title="Initial Purchase Date")
profit_target = input.float(5.0, title="Profit Target (%)", minval=0.1) // Target profit percentage
rebuy_drop = input.float(5.0, title="Rebuy Drop (%)", minval=0.1) // Drop percentage to rebuy
// Variables
var float initial_price = na // Initial purchase price
var int entries = 0 // Count of entries
var float total_profit = 0 // Cumulative profit
var bool active_trade = false // Whether an active trade exists
// Entry Condition: Buy on or after the initial date
if not active_trade
initial_price := close
strategy.entry("Buy", strategy.long)
entries += 1
active_trade := true
// Rebuy Condition: Buy if price drops 5% or more from the initial price
rebuy_price = initial_price * (1 - rebuy_drop / 100)
if active_trade and close <= rebuy_price
strategy.entry("Rebuy", strategy.long)
entries += 1
// Exit Condition: Sell if the price gives a 5% profit on the initial investment
target_price = initial_price * (1 + profit_target / 100)
if active_trade and close >= target_price
strategy.close_all(comment="Profit Target Hit")
active_trade := false
total_profit += profit_target
// Display information on the chart
plotshape(series=close >= target_price, title="Target Hit", style=shape.labelup, location=location.absolute, color=color.green, text="Sell")
plotshape(series=close <= rebuy_price, title="Rebuy", style=shape.labeldown, location=location.absolute, color=color.red, text="Rebuy")
// Draw statistics on the chart
var label stats_label = na
if (na(stats_label))
stats_label := label.new(x=bar_index, y=close, text="", style=label.style_none, size=size.small)
label.set_xy(stats_label, bar_index, close)
label.set_text(stats_label, "Entries: " + str.tostring(entries) + "\nTotal Profit: " + str.tostring(total_profit, "#.##") + "%")