
La estrategia utiliza un método mixto de análisis cuantitativo, combinando dos modelos de distribución y análisis de regresión, para identificar diferentes estados de mercado. La estrategia calcula primero las medias móviles simples (SMA) y las bandas de Brin (BB), y luego calcula una puntuación Z basada en el promedio y la diferencia estándar de los rendimientos históricos. La estrategia abre una posición cuando la puntuación Z está por debajo de la baja y el precio está por debajo de la baja.
El principio central de la estrategia es el uso de la puntuación Z para medir la posición de los rendimientos actuales con respecto a la distribución de los rendimientos históricos. La fórmula de cálculo de la puntuación Z es: ((Rendimientos actuales - promedio de rendimientos históricos) / diferencia estándar de rendimientos históricos. La puntuación Z más alta, significa que los rendimientos actuales son más extremos y la probabilidad de sobreventa es mayor; la puntuación Z más baja, significa que los rendimientos actuales son más extremos y la probabilidad de sobreventa es mayor.
La estrategia de cuantificación de la puntuación Z binaria mixta es una estrategia de comercio cuantitativa basada en principios estadísticos, que identifica oportunidades potenciales de sobreventa y sobreventa mediante la comparación de la distribución de los retornos actuales con los retornos históricos. Al mismo tiempo, la estrategia utiliza el indicador de las bandas de Bryn para una segunda confirmación, lo que mejora la fiabilidad de la señal. Las reglas de la estrategia son claras, fáciles de implementar y optimizar, pero también se enfrentan a desafíos como la sensibilidad a los parámetros, el riesgo de tendencia, el riesgo de sobreajuste.
/*backtest
start: 2023-05-22 00:00:00
end: 2024-05-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Estratégia Híbrida Quantitativa", overlay=true)
// Definição de parâmetros
sma_length = input.int(20, title="Período da SMA")
threshold_high = input.float(1.5, title="Threshold Alto")
threshold_low = input.float(-1.5, title="Threshold Baixo")
lookback_period = input.int(252, title="Período de Retorno Histórico (dias)")
// Funções auxiliares
f_sma(source, length) =>
ta.sma(source, length)
f_bollinger_band(source, length, mult) =>
basis = ta.sma(source, length)
dev = mult * ta.stdev(source, length)
[basis + dev, basis - dev]
// Cálculo dos indicadores
sma = f_sma(close, sma_length)
[upper_band, lower_band] = f_bollinger_band(close, sma_length, 2)
// Regime de Mercado: Binomial
retornos = ta.change(close, 1)
media_retornos = ta.sma(retornos, lookback_period)
desvio_padrao_retornos = ta.stdev(retornos, lookback_period)
// Indicador de Regime: Z-Score
z_score = (retornos - media_retornos) / desvio_padrao_retornos
// Sinal de Compra e Venda
sinal_compra = z_score < threshold_low and close < lower_band
sinal_venda = z_score > threshold_high and close > upper_band
// Execução de Ordem
if (sinal_compra)
strategy.entry("Long", strategy.long)
if (sinal_venda)
strategy.close("Long")
// Plotagem dos Indicadores
plot(sma, title="SMA", color=color.blue)
plot(upper_band, title="Upper Bollinger Band", color=color.red)
plot(lower_band, title="Lower Bollinger Band", color=color.green)
hline(threshold_high, "Threshold Alto", color=color.red, linestyle=hline.style_dashed)
hline(threshold_low, "Threshold Baixo", color=color.green, linestyle=hline.style_dashed)
plot(z_score, title="Z-Score", color=color.purple)