
La estrategia es un sistema de comercio cuantitativo basado en el indicador RSI y el principio de la regresión a la media. Capta las oportunidades de reversión del mercado mediante la identificación de estados de sobreventa y sobreventa en el mercado, combinados con el rango de fluctuación de los precios y la posición de cierre. La idea central de la estrategia es buscar oportunidades de reversión después de que se produzcan estados extremos del mercado y administrar el riesgo mediante el establecimiento de condiciones de entrada estrictas y un stop loss dinámico.
La estrategia utiliza un mecanismo de filtración múltiple para determinar las señales de negociación: primero, se requiere que los precios creen 10 ciclos de nuevos bajos, lo que indica que el mercado está en una situación de sobreventa; segundo, se requiere que el rango de fluctuación de los precios sea máximo en casi 10 días de negociación, lo que indica que la volatilidad del mercado se ha intensificado; y finalmente, se confirma la reversión potencial al determinar si el precio de cierre se encuentra en el cuarto superior del rango de precios del día.
Esta es una estrategia de retorno a la media de un valor estructurado y lógicamente claro. A través de filtración de múltiples condiciones y gestión dinámica de la pérdida, la estrategia puede capturar de manera efectiva las oportunidades de rebote de los mercados al tiempo que controla el riesgo. Aunque existen algunas limitaciones, el rendimiento general de la estrategia aún puede mejorarse con una optimización y perfección razonables.
/*backtest
start: 2024-11-04 00:00:00
end: 2024-12-04 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Larry Conners SMTP Strategy", overlay=true, margin_long=100, margin_short=100)
// --- Inputs ---
// Corrected the input type declaration by removing 'type='
tickSize = input.float(0.01, title="Tick Size (e.g., 1/8 for stocks)")
// --- Calculate conditions ---
// 1. Today the market must make a 10-period low
low10 = ta.lowest(low, 10)
is10PeriodLow = low == low10
// 2. Today's range must be the largest of the past 10 bars
rangeToday = high - low
maxRange10 = ta.highest(high - low, 10)
isLargestRange = rangeToday == maxRange10
// 3. Today's close must be in the top 25 percent of today's range
rangePercent = (close - low) / rangeToday
isCloseInTop25 = rangePercent >= 0.75
// Combine all buy conditions
buyCondition = is10PeriodLow and isLargestRange and isCloseInTop25
// --- Buy Entry (on the next day) ---
var float buyPrice = na
var bool orderPending = false
var float stopLoss = na // Initialize stopLoss at the top level to avoid 'Undeclared identifier' errors
if (buyCondition and strategy.position_size == 0)
buyPrice := high + tickSize
stopLoss := low
orderPending := true
// Condition to place buy order the next day or the day after
if orderPending and ta.barssince(buyCondition) <= 2
strategy.entry("Buy", strategy.long, stop=buyPrice)
orderPending := false
// --- Stop-Loss and Trailing Stop ---
if (strategy.position_size > 0)
stopLoss := math.max(stopLoss, low) // Move stop to higher lows (manual trailing)
strategy.exit("Exit", from_entry="Buy", stop=stopLoss)
// --- Plotting ---
// Highlight buy conditions
bgcolor(buyCondition ? color.new(color.green, 50) : na)
//plotshape(series=buyCondition, location=location.belowbar, color=color.green, style=shape.labelup, text="Buy Setup")
// Plot Stop-Loss level for visualization
//plot(strategy.position_size > 0 ? stopLoss : na, color=color.red, linewidth=2, title="Stop-Loss Level")