
La estrategia de retorno dinámico de Santa Claus es una estrategia de negociación cuantitativa que identifica puntos de entrada y salida potenciales en función de la relación de retorno dinámico entre el precio y el índice de la columna. La estrategia utiliza una línea media dinámica de parámetros ajustables a la longitud para trazar la línea de tendencia de retorno de los precios.
El núcleo de esta estrategia es calcular la relación de regresión lineal entre el precio y el índice de la columna. Primero se calculan las medias móviles simples y la diferencia estándar de longitud N. Luego, se obtiene la inclinación k y la intersección b de la línea de regresión basándose en los coeficientes relevantes de la muestra y el valor de la diferencia estándar.
y = kx + b
donde x es el índice de la columna y y es el precio.
La dirección de la tendencia se determina en función de la relación entre el tamaño de la línea de regresión en el momento actual y el de la hora anterior. Si la línea de regresión sube y el precio de cierre es superior al precio de apertura y al precio máximo de la hora anterior, se genera una señal de compra; si la línea de regresión baja y el precio de cierre es inferior al precio de apertura y al precio mínimo de la hora anterior, se genera una señal de venta.
La estrategia de regresión dinámica de Santa Claus utiliza la relación de regresión dinámica entre el precio y el tiempo para lograr un sistema de comercio cuantitativo flexible, intuitivo y ajustable a los parámetros. La lógica de la estrategia es clara y fácil de entender, y se puede aplicar a diferentes productos y períodos de negociación mediante la optimización de los parámetros. La innovación de esta estrategia consiste en la introducción de un factor de tiempo para crear un modelo dinámico que hace que los juicios sean más tendenciales. En general, la estrategia ofrece un ejemplo de referencia para el comercio cuantitativo.
/*backtest
start: 2023-01-05 00:00:00
end: 2024-01-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
// Creator - TradeAI
strategy('Moving Santa Claus Strategy | TradeAI', overlay=true)
// Set the length of the moving average
length = input(64)
// Calculate the moving averages and standard deviations
x = bar_index
y = close
x_ = ta.sma(x, length)
y_ = ta.sma(y, length)
mx = ta.stdev(x, length)
my = ta.stdev(y, length)
c = ta.correlation(x, y, length)
slope = c * (my / mx)
// Calculate the parameters of the regression line
inter = y_ - slope * x_
reg = x * slope + inter
// Set the line color based on whether EMA is moving up or down
var color lineColor = na
if (reg > reg[1] and (close > open and close > high[1]))
lineColor := color.new(#d8f7ff, 0)
if (reg < reg[1] and (close < open and close < low[1]))
lineColor := color.new(#ff383b, 0)
// Plot the EMA line with different thicknesses
plot(reg, color=lineColor, title="EMA")
var color lineColorrr = na
if (reg > reg[1] and (close > open and close > high[1]))
lineColorrr := color.new(#d8f7ff, 77)
if (reg < reg[1] and (close < open and close < low[1]))
lineColorrr := color.new(#ff383b, 77)
plot(reg, color=lineColorrr, title="EMA", linewidth=5)
var color lineColorr = na
if (reg > reg[1] and (close > open and close > high[1]))
lineColorr := color.new(#d8f7ff, 93)
if (reg < reg[1] and (close < open and close < low[1]))
lineColorr := color.new(#ff383b, 93)
plot(reg, color=lineColorr, title="EMA", linewidth=10)
var color lineColorrrr = na
if (reg > reg[1] and (close > open and close > high[1]))
lineColorrrr := color.new(#d8f7ff, 97)
if (reg < reg[1] and (close < open and close < low[1]))
lineColorrrr := color.new(#ff383b, 97)
plot(reg, color=lineColorr, title="EMA", linewidth=15)
var color lineColorrrrr = na
if (reg > reg[1] and (close > open and close > high[1]))
lineColorrrrr := color.new(#d8f7ff, 99)
if (reg < reg[1] and (close < open and close < low[1]))
lineColorrrrr := color.new(#ff383b, 99)
plot(reg, color=lineColorr, title="EMA", linewidth=20)
// Implement trading strategy based on EMA direction
if reg > reg[1] and (close > open and close > high[1])
strategy.entry('buy', strategy.long)
if reg < reg[1] and (close < open and close < low[1])
strategy.close('buy')