
A estratégia de negociação quantitativa Z-Score é um sistema de negociação integrado baseado no princípio da pontuação Z estatística e no sinal de cruzamento da média móvel. A estratégia calcula o desvio padronizado do preço (Z-Score) e combina o cruzamento da média móvel de curto e longo prazo para formar um sinal de compra e venda. O método considera não apenas as mudanças absolutas dos preços, mas também a posição relativa dos preços na distribuição estatística, fornecendo um mecanismo de entrada e saída do mercado baseado em probabilidades e princípios estatísticos.
O núcleo da estratégia é a tomada de decisões de negociação com base no indicador estatístico Z-Score. O Z-Score é uma medida de quantos desvios padrão de um ponto de dados do valor médio, com a fórmula: Z = (X - μ) / σ, onde X é o preço atual, μ é a média e σ é o desvio padrão.
A implementação da estratégia inclui principalmente os seguintes passos:
Ao mesmo tempo, a estratégia também fornece a média móvel tradicional (MA) como referência auxiliar, incluindo três médias de curto prazo (ciclo 5), médio prazo (ciclo 21) e longo prazo (ciclo 60). Estas médias podem ajudar os comerciantes a observar as mudanças na tendência dos preços de forma mais intuitiva.
Estatística BásicaO indicador Z-Score é baseado em princípios estatísticos e é capaz de padronizar as flutuações de preços, facilitando a identificação de mudanças de preços anormais. Quando o Z-Score é muito alto ou muito baixo, indica que o preço se desvia muito do valor médio e pode haver uma oportunidade de retornar ao valor médio.
Mecanismo de filtragem duplaA estratégia usa simultaneamente o indicador Z-Score e a média móvel, formando um mecanismo de dupla confirmação. O cruzamento de Z-Score fornece o sinal principal, enquanto o sistema de média móvel pode ser usado como uma ferramenta auxiliar para a confirmação de tendências.
Configuração de parâmetros flexívelO usuário pode ajustar o ciclo de cálculo do Z-Score, os parâmetros de suavização e o intervalo de sinais de acordo com as características de diferentes mercados e variedades de negociação, permitindo a personalização da estratégia.
Comentários em tempo realA estratégia mostra os sinais de compra e venda de forma intuitiva através de uma interface gráfica e fornece feedback em tempo real sobre o estado da posição e os ganhos e perdas, facilitando a avaliação rápida do desempenho da estratégia.
Função de alerta prévioO sistema de alerta integrado pode emitir alertas em tempo real quando um sinal de compra ou venda é acionado, ajudando os comerciantes a capturar oportunidades de negociação em tempo hábil.
Sensibilidade do parâmetroO Z-Score é calculado e os parâmetros de suavização têm um impacto significativo no desempenho da estratégia. A configuração inadequada dos parâmetros pode levar a excessos de negociação ou a perda de sinais importantes. É recomendado encontrar a combinação de parâmetros mais adequada para um determinado mercado por meio do histórico.
Deficiência de um mercado em choque: Em mercados de choque horizontal, o Z-Score pode atravessar a média com frequência, gerando excesso de sinais de negociação, aumentando os custos de negociação e podendo causar perdas contínuas. Considere adicionar condições de filtragem de tendência na estratégia ou suspender a negociação quando um mercado de choque é identificado.
Risco de hipóteses estatísticasO Z-Score supõe que as flutuações de preços correspondem à distribuição normal, mas as flutuações de preços no mercado real podem apresentar riscos de cauda e flutuações anormais. Em condições de mercado extremas, a estratégia pode falhar.
Problemas de atrasoA utilização de uma média móvel suavizada, o sinal pode ter um certo atraso, o que pode levar a um momento de entrada e saída não ideal em mercados com forte volatilidade.
Falta de mecanismos de contençãoA versão atual da estratégia não contém um mecanismo de parada de perda definido, podendo enfrentar grandes perdas em caso de grande volatilidade no mercado. Recomenda-se a adição de condições de parada de perda na aplicação prática para controlar o risco.
Adicionar filtro de tendência: Pode ser introduzido um indicador de tendência adicional (como o ADX ou a largura de banda de Brin) para identificar o estado do mercado, com diferentes parâmetros de estratégia ou lógica de negociação em mercados de forte tendência e mercados de turbulência.
Adicionar parâmetros de adaptaçãoAdaptação do ciclo de cálculo do Z-Score e do intervalo de sinalização com base na dinâmica da volatilidade do mercado, para que a estratégia possa se adaptar melhor a diferentes condições de mercado.
Melhorar a gestão de riscosIntrodução de um mecanismo de stop loss baseado em ATR ou porcentagem fixa e criação de regras razoáveis de gerenciamento de posições para controlar o risco de uma única transação.
Análise de múltiplos períodosO Z-Score leva em consideração os sinais de diferentes períodos de tempo e executa transações somente quando os sinais de vários períodos de tempo coincidem, aumentando a confiabilidade do sinal.
Combinação com outros indicadoresPode-se considerar a combinação do Z-Score com outros indicadores técnicos, como volume de transação, índice de força relativa (RSI) ou faixa de Bryn para criar condições de negociação mais abrangentes.
Otimização do quadro de feedbackA expansão dos critérios de avaliação da estratégia, não se concentra apenas na receita total, mas também deve considerar indicadores complexos, como a máxima retirada, a taxa de Sharpe, a taxa de ganho e perda, para avaliar o desempenho da estratégia.
A estratégia de negociação de Z-Score, uma estratégia de negociação dinâmica de cruzamento de equilíbrio, padroniza o tratamento dos preços por meio de métodos estatísticos e, em combinação com o sinal de cruzamento de médias móveis, fornece um conjunto de métodos sistematizados para a tomada de decisões de negociação. A estratégia é especialmente adequada para encontrar oportunidades de negociação que retornam ao valor médio após o desvio de preços, com uma base teórica sólida e um sinal claro.
No entanto, os comerciantes devem ter em conta a otimização de parâmetros e o controle de riscos ao aplicar a estratégia, especialmente porque o desempenho da estratégia pode variar em diferentes ambientes de mercado. A estabilidade e adaptabilidade da estratégia podem ser ainda mais aumentadas com o aumento do filtro de tendências, a melhoria da gestão de riscos e a combinação de vários indicadores.
Finalmente, qualquer estratégia de negociação precisa ser rigorosamente verificada e continuamente otimizada em um ambiente de mercado real. A estratégia Z-Score, como uma ferramenta de negociação quantitativa, fornece aos comerciantes uma estrutura para análise e decisão de mercado baseada em princípios estatísticos, que vale a pena explorar e aprofundar na prática.
/*backtest
start: 2024-07-13 18:40:00
end: 2025-06-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":50000000}]
*/
//@version=6
strategy("Z Score 主图策略 — v1.02", overlay=true)
// 参数
enableZScore = input.bool(true, title="启用Z分数策略")
zBaseLength = input.int(3, minval=1, title="Z分数基础周期")
shortSmooth = input.int(3, title="短期平滑")
longSmooth = input.int(5, title="长期平滑")
gapBars = input.int(5, minval=1, title="相同信号间隔K线数")
// Z 分数
f_zscore(src, len) =>
mean = ta.sma(src, len)
std = ta.stdev(src, len)
(src - mean) / std
zRaw = f_zscore(close, zBaseLength)
zShort = ta.sma(zRaw, shortSmooth)
zLong = ta.sma(zRaw, longSmooth)
baseLongCond = zShort > zLong
baseExitCond = zShort < zLong
// 信号间隔
var int lastEntryBar = na
var int lastExitBar = na
// 策略逻辑
if enableZScore
if baseLongCond and (na(lastEntryBar) or bar_index - lastEntryBar > gapBars)
strategy.entry("Z Score", strategy.long)
lastEntryBar := bar_index
alert("Z分数策略触发买入信号,建议开多仓", alert.freq_once_per_bar)
if baseExitCond and (na(lastExitBar) or bar_index - lastExitBar > gapBars)
strategy.close("Z Score", comment="Z Score")
lastExitBar := bar_index
alert("Z分数策略触发卖出信号,建议平仓离场", alert.freq_once_per_bar)
// 买卖图标
plotshape(baseLongCond and (na(lastEntryBar) or bar_index - lastEntryBar > gapBars),
title="买入信号", location=location.belowbar, color=color.green, style=shape.labelup, text="买")
plotshape(baseExitCond and (na(lastExitBar) or bar_index - lastExitBar > gapBars),
title="卖出信号", location=location.abovebar, color=color.red, style=shape.labeldown, text="卖")
// 盈亏表格
var table positionTable = table.new(position.bottom_right, 2, 2, border_width=1)
table.cell(positionTable, 0, 0, "开仓价", text_color=color.white, bgcolor=color.gray)
table.cell(positionTable, 1, 0, "未实现盈亏 (%)", text_color=color.white, bgcolor=color.gray)
isLong = strategy.position_size > 0
entryPrice = strategy.position_avg_price
unrealizedPnL = isLong ? (close - entryPrice) / entryPrice * 100 : na
pnlColor = unrealizedPnL > 0 ? color.green : unrealizedPnL < 0 ? color.red : color.gray
if isLong
table.cell(positionTable, 0, 1, str.tostring(entryPrice, "#.####"), text_color=color.gray, bgcolor=color.new(color.gray, 90))
table.cell(positionTable, 1, 1, str.tostring(unrealizedPnL, "#.##") + " %", text_color=pnlColor, bgcolor=color.new(pnlColor, 90))
else
table.cell(positionTable, 0, 1, "—", text_color=color.gray, bgcolor=color.new(color.gray, 90))
table.cell(positionTable, 1, 1, "—", text_color=color.gray, bgcolor=color.new(color.gray, 90))
// === 显示 MA 均线 ===
showMA = input.bool(true, title="显示 MA 均线")
maShortPeriod = input.int(5, title="短期 MA 周期")
maMidPeriod = input.int(21, title="中期 MA 周期")
maLongPeriod = input.int(60, title="长期 MA 周期")
maShort = ta.sma(close, maShortPeriod)
maMid = ta.sma(close, maMidPeriod)
maLong = ta.sma(close, maLongPeriod)
plot(showMA ? maShort : na, title="MA 短期", color=color.rgb(0, 9, 11, 1), linewidth=1)
plot(showMA ? maMid : na, title="MA 中期", color=color.orange, linewidth=1)
plot(showMA ? maLong : na, title="MA 长期", color=color.blue, linewidth=1)