混合双态Z评分量化策略

SMA BB
创建日期: 2024-05-28 17:38:08 最后修改: 2024-05-28 17:38:08
复制: 1 点击次数: 224
1
关注
1107
关注者

混合双态Z评分量化策略

概述

该策略采用了一种混合的量化分析方法,结合了二项分布模型和回归分析,以识别不同的市场状态。策略首先计算简单移动平均线(SMA)和布林带(BB)指标,然后基于历史回报的均值和标准差计算Z评分。当Z评分低于下阈值且价格低于下轨时,策略开仓做多;当Z评分高于上阈值且价格高于上轨时,策略平仓。

策略原理

该策略的核心原理是利用Z评分来衡量当前回报相对于历史回报分布的位置。Z评分的计算公式为:(当前回报 - 历史回报均值) / 历史回报标准差。Z评分越高,表示当前回报越极端,超买可能性越大;Z评分越低,表示当前回报越极端,超卖可能性越大。同时,策略还结合了布林带指标,以价格突破上下轨作为二次确认。只有在Z评分和布林带信号同时满足条件时,策略才会产生交易信号。这种组合方式可以有效降低假信号的出现。

策略优势

  1. 量化分析:该策略完全基于量化指标,规则明确,易于实现和回测。
  2. 双重确认:策略同时采用了Z评分和布林带两个指标,形成双重过滤机制,提高信号准确度。
  3. 统计学基础:Z评分源于统计学中的正态分布理论,有坚实的理论基础,可以客观衡量当前回报的极端程度。
  4. 参数灵活:用户可以根据需要调整SMA周期、布林带倍数、Z评分阈值等参数,灵活适应不同市场。

策略风险

  1. 参数敏感:不同参数设置可能导致策略表现差异较大,需要进行充分的参数优化和稳定性测试。
  2. 趋势风险:当市场出现强趋势时,Z评分可能长期处于极端区域,导致策略信号稀少或完全缺失。
  3. 过拟合风险:若对策略参数优化过度,可能导致过拟合,在样本外表现不佳。
  4. 黑天鹅风险:极端行情下,历史统计规律可能失效,策略面临较大回撤风险。

策略优化方向

  1. 动态参数:考虑根据市场波动率、趋势强度等指标,动态调整Z评分阈值和布林带倍数,提高适应性。
  2. 加入趋势过滤:在现有机制上叠加趋势判断指标,如MA交叉、DMI等,避免在强趋势下出现过多无效信号。
  3. 组合优化:将该策略与其他量化策略(如动量、均值回归等)进行组合,发挥各自优势,提高稳健性。
  4. 止损止盈:引入合理的止损止盈机制,控制单次交易风险敞口,提高风险调整后收益。

总结

混合双态Z评分量化策略是一个基于统计学原理的量化交易策略,通过比较当前回报与历史回报分布,识别潜在的超买超卖机会。同时,策略采用布林带指标进行二次确认,提高信号可靠性。策略规则明确,易于实现和优化,但同时也面临参数敏感、趋势风险、过拟合风险等挑战。未来可以从动态参数、趋势过滤、组合优化、止损止盈等方面对策略进行优化,以提升其适应性和稳健性。总的来说,该策略为量化交易提供了一种简单而有效的思路,值得进一步探索和改进。

策略源码
/*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)
相关推荐
更多内容