
A estratégia de parada dinâmica de retorno ao valor médio do preço paralelo é uma estratégia de negociação quantitativa baseada em princípios estatísticos, que utiliza principalmente as características do preço em torno de sua flutuação no valor médio. A estratégia converte o preço em forma de parêntese e, em seguida, calcula o seu Z-score (o múltiplo da diferença padrão) para medir o grau de desvio do preço do valor médio. Quando o Z-score atinge um determinado limiar, a estratégia considera que o mercado está sendo sobrecomprado ou sobrevendido, e negocia com base na expectativa de retorno ao valor médio do preço.
Os princípios centrais da estratégia são baseados na teoria da regressão do valor médio e nas características estatísticas do preço dos pares. Os passos concretos para a implementação são os seguintes:
Em primeiro lugar, a estratégia transforma o preço de fechamento em uma forma aritmética (log_price = math.log(close)Isso ajuda a transformar as mudanças de multiplicação em mudanças de adição, fazendo com que as mudanças de preço estejam mais alinhadas com a distribuição normal.
Em seguida, com base na janela de rolagem definida (o padrão é de 7 períodos), calcula-se a média móvel do preço do par (o padrão é de 7 períodos).rolling_mean) e a diferença padrãorolling_std)。
Usando essas estatísticas, calcule o Z-score do preço atual do parâmetro:rolling_z_score = (log_price - rolling_mean) / rolling_stdO valor representa o múltiplo da diferença padrão entre o preço atual e o desvio do valor médio.
Os requisitos de entrada são os seguintes:
A meta de parada é definida como uma média móvel do preço do parâmetro em forma de índice:take_profit_price = math.exp(rolling_mean)Isso significa que o objetivo da estratégia é fazer com que o preço volte à sua média estatística.
O mecanismo de stop loss dinâmico é uma inovação fundamental da estratégia:
A lógica de saída inclui duas situações:
Estatística BásicaA estratégia baseia-se em princípios estatísticos sólidos e usa um Z-score para medir o grau de desvio de preços, fornecendo sinais de entrada e saída objetivos.
Conversão para preços numéricosO uso de preços pares em vez de preços originais para o cálculo, faz com que a variação de preços seja mais compatível com a distribuição normal, aumentando a eficácia dos indicadores estatísticos.
Gestão de Riscos DinâmicosO principal destaque da estratégia reside no seu mecanismo de stop loss dinâmico, capaz de ajustar automaticamente os níveis de stop loss de acordo com as mudanças na volatilidade do mercado, permitindo ao mesmo tempo espaço de negociação suficiente para proteger os fundos.
Transações bidirecionaisA estratégia permite a negociação de títulos e títulos em branco, permitindo a busca de oportunidades em diversos cenários de mercado.
Valor médio como metaO uso da média estatística como um alvo de suspensão está de acordo com a base teórica da regressão da média, aumentando a racionalidade da suspensão.
Parâmetros ajustáveisA estratégia oferece vários parâmetros ajustáveis, incluindo a janela de rolagem, a pontuação Z de entrada e a pontuação Z de parada, permitindo que os comerciantes se ajustem a diferentes mercados e preferências de risco pessoais.
Risco da hipótese de regressão à médiaA hipótese central da estratégia é que o preço retorne à sua média estatística, mas isso pode falhar em mercados de tendência ou de mudanças estruturais, resultando em perdas de longo prazo. Solução: Pode-se adicionar um filtro de tendência e suspender a negociação em mercados de forte tendência.
Pontuação Z hipersensivelEm mercados com pouca volatilidade, mesmo pequenas variações de preços podem gerar grandes variações de Z-score, desencadeando sinais de negociação desnecessários. Solução: definir um limiar de mínima volatilidade ou ajustar o limiar de entrada em um ambiente de baixa volatilidade.
Sensibilidade ao comprimento da janelaA estratégia é muito sensível aos parâmetros de comprimento de janela de rolagem, e a escolha incorreta pode levar a excessos de negociação ou a oportunidades perdidas. Solução: O parâmetro ideal pode ser encontrado por meio da retrospecção de diferentes comprimentos de janela ou usando comprimentos de janela adaptáveis.
Risco de perda de dadosNo início da negociação, a falta de dados históricos suficientes para calcular as médias móveis e o desvio padrão pode causar instabilidade no sinal. Solução: Certifique-se de que há um período de pré-calor suficiente antes de calcular o indicador.
Risco de ajuste de estratégia de parada de prejuízosO mecanismo de parada dinâmica, embora inovador, também pode causar um excesso de ajuste do ponto de parada quando a volatilidade muda drasticamente. Solução: Pode-se definir um limite de amplitude máxima do ajuste de parada para evitar o excesso de ajuste.
Adaptação do comprimento da janelaA estratégia atual usa um comprimento de janela de rolagem fixo (de 7 ciclos por defeito) para calcular os indicadores estatísticos. Pode-se considerar a implementação de um comprimento de janela de adaptação, ajustando automaticamente o tamanho da janela de acordo com as mudanças periódicas do mercado. Isso permite capturar melhor as oportunidades de retorno do valor médio em diferentes escalas de tempo, aumentando a adaptabilidade da estratégia.
Filtros de tendênciasA adição de um mecanismo de julgamento de tendência, suspensão ou ajuste de parâmetros de estratégia em mercados de forte tendência, e a aplicação de estratégias de retorno ao valor médio apenas em mercados de lateral ou de reversão. Isso pode ser feito com a adição de médias móveis de longo prazo ou indicadores de tendência, como o ADX, para evitar perdas frequentes em mercados de tendência unilateral.
Análise de Multi-Framas de Tempo: Integração de sinais de pontuação Z de vários períodos de tempo para formar uma decisão mais abrangente de entrada e saída. Por exemplo, é possível confirmar a oportunidade de retorno do valor médio em períodos de tempo maiores e, em seguida, procurar pontos de entrada precisos em períodos de tempo menores, aumentando a taxa de vitória e o retorno do risco.
Optimização de congelamentoA estratégia atual usa a média simples como um alvo de parada. Pode-se considerar a implementação de mecanismos de parada dinâmicos, como a definição de um alvo de parada baseado na estrutura do mercado ou na relação de risco-retorno associada a uma parada, ou a implementação de uma estratégia de parada parcial, bloqueando os lucros gradualmente quando o preço se move na direção favorável.
Peso da flutuaçãoConsidere a inclusão de um mecanismo de ponderação da taxa de flutuação no cálculo do escore Z, dando maior peso aos dados de intervalos mais estáveis, o que reduz a interferência da flutuação extrema na geração de sinais e melhora a qualidade do sinal.
Integração de aprendizagem de máquinaConsidere a introdução de algoritmos de aprendizagem de máquina para otimizar as margens de entrada e saída, que podem ser baseadas em modelos de treinamento de dados históricos, prever as melhores margens de pontuação Z e parâmetros de stop loss dinâmicos, melhorar a capacidade de adaptação e o desempenho geral da estratégia.
A estratégia de parada dinâmica de retorno ao valor médio do parâmetro é uma estratégia de negociação quantitativa baseada em princípios estatísticos, que identifica o estado de sobrecompra e sobrevenda do mercado através do cálculo do Z-score do preço do parâmetro e obtém lucro quando o preço retorna ao valor médio esperado. A inovação central da estratégia está em seu mecanismo de parada dinâmica, que pode ajustar automaticamente os parâmetros de risco de acordo com as mudanças na volatilidade do mercado, oferecendo uma melhor gestão de risco.
Embora a estratégia seja baseada em uma sólida base estatística, ela ainda enfrenta desafios como a possibilidade de falha da hipótese de regressão de média, sensibilidade de parâmetros e adaptabilidade ao ambiente de mercado. Com melhorias como a adição de filtros de tendência, comprimento de janela de adaptação automática, análise de múltiplos quadros temporais e otimização de aprendizado de máquina, a estratégia tem potencial para obter um desempenho mais estável em vários ambientes de mercado.
Note-se que qualquer estratégia de quantificação precisa ser bem testada e verificada com antecedência e ajustar os parâmetros de acordo com as características específicas do mercado e as preferências de risco pessoais. A estratégia fornece uma estrutura que combina princípios estatísticos e gestão de risco dinâmica, com base na qual os comerciantes podem personalizar e otimizar ainda mais.
/*backtest
start: 2024-03-14 00:00:00
end: 2025-03-12 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Mean Reversion Z-Score Strategy with Dynamic SL", overlay=true)
// Input parameters
window = input.int(7, "Rolling Window", minval=1)
z_entry_long = input.float(-1.825, "Z-Score Long Entry", step=0.025)
z_entry_short = input.float(1.825, "Z-Score Short Entry", step=0.025)
z_stop_loss_long = input.float(-2.125, "Z-Score Stop Loss Long", step=0.025)
z_stop_loss_short = input.float(2.125, "Z-Score Stop Loss Short", step=0.025)
// Calculate log price, rolling mean, and rolling standard deviation
log_price = math.log(close)
rolling_mean = ta.sma(log_price, window)
rolling_std = ta.stdev(log_price, window)
rolling_z_score = (log_price - rolling_mean) / rolling_std
// Persistent variables to store entry conditions
var float entry_price = 0.0
var float entry_log_price = 0.0
var float entry_mean = 0.0
var float entry_std = 0.0
var float stop_loss_price = 0.0
var string position = "none"
// Calculate dynamic take-profit
take_profit_price = math.exp(rolling_mean)
// Entry logic
if (rolling_z_score <= z_entry_long and position == "none")
entry_price := close
entry_log_price := log_price
entry_mean := rolling_mean
entry_std := rolling_std
stop_loss_price := math.exp(log_price + z_stop_loss_long * rolling_std)
position := "long"
strategy.entry("Long", strategy.long)
if (rolling_z_score >= z_entry_short and position == "none")
entry_price := close
entry_log_price := log_price
entry_mean := rolling_mean
entry_std := rolling_std
stop_loss_price := math.exp(log_price - z_stop_loss_short * rolling_std)
position := "short"
strategy.entry("Short", strategy.short)
// Exit logic with dynamic adjustments
if (position != "none")
// Calculate new stop-loss based on current volatility
float new_stop_loss = na
if (position == "long")
new_stop_loss := math.exp(log_price + z_stop_loss_long * rolling_std)
if (rolling_std > entry_std)
stop_loss_price := math.min(stop_loss_price, new_stop_loss)
else if (rolling_std < entry_std)
stop_loss_price := math.max(stop_loss_price, new_stop_loss)
if (close >= take_profit_price)
strategy.close("Long", comment="TP")
position := "none"
else if (close <= stop_loss_price)
strategy.close("Long", comment="SL")
position := "none"
else if (position == "short")
new_stop_loss := math.exp(log_price - z_stop_loss_short * rolling_std)
if (rolling_std > entry_std)
stop_loss_price := math.max(stop_loss_price, new_stop_loss)
else if (rolling_std < entry_std)
stop_loss_price := math.min(stop_loss_price, new_stop_loss)
if (close <= take_profit_price)
strategy.close("Short", comment="TP")
position := "none"
else if (close >= stop_loss_price)
strategy.close("Short", comment="SL")
position := "none"
// Plots
plot(rolling_z_score, title="Z-Score", color=color.blue, linewidth=1)
plot(z_entry_short, title="Z-Score-upper", color=color.rgb(33, 243, 103), linewidth=1)
plot(z_entry_long, title="Z-Score-lower", color=color.rgb(243, 33, 61), linewidth=1)