Estrategia de distribución adaptativa de BBP


Fecha de creación: 2025-11-13 15:13:21 Última modificación: 2025-11-13 17:51:06
Copiar: 9 Número de Visitas: 133
2
Seguir
413
Seguidores

Estrategia de distribución adaptativa de BBP Estrategia de distribución adaptativa de BBP

Descripción general

La estrategia es un innovador sistema de comercio cuantitativo basado en la teoría de la distribución estadística, que combina los indicadores tradicionales de fuerza múltiple (Bull Bear Power) con la tecnología de adaptación de la distribución. La innovación central de la estrategia consiste en deshacerse de la hipótesis fija de la distribución ortogonal en el análisis técnico tradicional, calcular en tiempo real las características estadísticas de alto nivel de los datos del mercado (pérdida y pico), ajustar dinámicamente los umbrales de transacción para que la generación de señales coincida con las características de distribución real del mercado.

Principio de estrategia

El mecanismo central de funcionamiento de la estrategia incluye los siguientes elementos clave:

  1. Cálculo del PIBA través del cálculo de la suma de la diferencia entre el precio más alto y el EMA (fuerza múltiple) y el precio más bajo y el diferencial entre el EMA (fuerza en blanco), se construye un indicador básico que refleja la comparación de la fuerza múltiple en el mercado. El valor positivo indica la predominancia múltiple y el valor negativo indica la predominancia en blanco.

  2. Análisis de características distribuidas: Utilizando el método de cálculo de la matriz de grado alto, para el análisis estadístico de la secuencia de BBP, se producen las medias, la diferencia estándar, la desviación (la matriz central de grado tres) y el pico excesivo (la matriz central de grado cuatro disminuida) Cuatro estadísticas clave, que muestran de manera completa la forma distribuida de los datos del mercado. La desviación refleja la asimetría de la distribución, y el pico refleja el grosor de la cola y la frecuencia de los eventos extremos.

  3. Generación de umbral adaptativo

    • Digitales normales basados en el nivel de significancia calculados como el valor Z de referencia
    • Cuando el pico excesivo supera el umbral, aplica una modificación aproximada de la distribución de t para invertir la libertad en función del pico y ampliar el rango de tolerancia
    • Aplicación de la extensión de Cornish-Fisher para corregir la asimetría cuando la desviación supera el umbral
    • Finalmente, se forma una línea de fluctuación ascendente y descendente ajustada a la dinámica de las características de la distribución real del mercado
  4. Evaluación del estado del mercado

    • Dimensión de transacción: la participación en el mercado se cuantifica en tres niveles: alta, media y baja, mediante la relación entre el volumen de transacción actual y el promedio periódico
    • Dimensión de ubicación de precios: ubicación relativa de los precios en el intervalo histórico mediante algoritmos de clasificación por porcentaje
    • Mecanismo de puntuación integral: toma el promedio de las puntuaciones de dos dimensiones para formar el coeficiente de ajuste de la suspensión
  5. Sistema de frenado dinámico

    • Diseño de tres niveles de suspensión, el multiplicador de suspensión está basado en la proporción de división en oro (de 1.618 a 2.382 a 3.618)
    • Distancia de frenado por nivel = ATR × multiplicador fijo × coeficiente de ajuste dinámico
    • Ampliar los objetivos de contención en situaciones de alta intensidad y alto porcentaje de participación, y estrechar la distancia de contención en situaciones de baja participación
  6. Generación y ejecución de señales

    • Señales múltiples: el BBP se expande al cruzar hacia arriba para adaptarse a la subida
    • Señales de cabeza vacía: BBP cruza hacia abajo para adaptarse a la baja baja
    • La señal de salida: BBP regresa a la línea de mediano para cerrar la posición, siguiendo el principio de regreso a la mediano

Ventajas estratégicas

  1. Las bases de la teoría estadística son sólidas: Liberación de las estrategias tradicionales de la hipótesis fija de la distribución normal, ajuste de los criterios de decisión en función de la dinámica de las características de la distribución real del mercado, reconstrucción de la lógica de generación de señales desde el nivel estadístico, con un rigoroso apoyo teórico.

  2. La capacidad de adaptación destacaA través de la monitorización en tiempo real de la oscilación y el pico, la estrategia puede identificar automáticamente los cambios en las características de la distribución del mercado. En los mercados de desviación positiva, aumentar los valores al alza para evitar el alza, y en los mercados de cola gruesa, ampliar los valores alza para evitar la reacción excesiva a las fluctuaciones normales, es realmente “hacer que la estrategia se adapte al mercado”.

  3. Evaluación integrada y multidimensionalCombinando las tres dimensiones de la dinámica de los precios, la actividad de los volúmenes de transacción y la posición relativa de los precios, se construye un sistema integral de evaluación de la situación del mercado, evitando la unilateralidad de los juicios de una sola dimensión.

  4. Gestión de riesgos dinámicosEl sistema de frenado de tres niveles está equipado con un mecanismo de ajuste dinámico que permite optimizar la distancia de frenado de acuerdo con el calor del mercado. Capturar plenamente el espacio de ganancias en situaciones de tendencia y cobrar rápidamente en situaciones de debilidad.

  5. La calidad de la señal es alta: A través de la prueba de significación estadística, sólo se puede activar una transacción en un punto de anomalía de la distribución real, reduciendo así la tasa de falsas señales y aumentando la eficacia estadística de la transacción.

  6. Visualización de la intuición: El proceso de adaptación de la estrategia es fácil de entender y monitorear, a través de líneas de referencia de umbral dinámico, referencia de desviación estándar y marcas de señales.

Riesgo estratégico

  1. Complejidad de optimización de parámetros altaLa estrategia incluye varios parámetros (niveles de significancia, valores de desviación, valores de pico, multiplicadores de parálisis, etc.), la combinación óptima de parámetros en diferentes entornos de mercado es muy variable y requiere una optimización de parámetros sistemática y verificación de retroalimentación.

  2. La falta de un mecanismo claro para detener los dañosLa estrategia se basa principalmente en la salida de retorno al promedio, sin un alto duro basado en el precio o en el ATR. En un caso extremo de unilateral, si el BBP se mantiene alejado del promedio y no retorna, puede causar grandes pérdidas y ocupación de capital.

  3. La mala adaptabilidad del mercado horizontalEn el contexto de la oscilación estrecha a largo plazo, el BBP se mantiene cerca de la media y no alcanza los mínimos de adaptación, lo que hace que las oportunidades de negociación sean escasas y limita el rendimiento de la estrategia.

  4. Fuerte dependencia de los datosEl análisis de características distribuidas requiere suficientes datos históricos para obtener resultados estadísticos estables y confiables. Las monedas nuevas o los indicadores con datos insuficientes pueden ser inestables en el uso inicial de las estadísticas, lo que afecta el rendimiento de la estrategia.

  5. La complejidad de los cálculos es mayorEl cálculo en tiempo real de la torsión de alta gradación, la clasificación porcentual y el valor de los umbrales dinámicos requiere recorrer los datos históricos, lo que puede provocar problemas de rendimiento en un entorno de negociación con recursos limitados.

  6. Riesgo de las tendencias extremasEn situaciones de unilateral extremo rápido, como un flash crash o un tornado, el BBP puede romper el umbral instantáneamente y regresar rápidamente, lo que hace que el punto de entrada no sea ideal o que se pierda el mejor momento.

Dirección de optimización

  1. Introducción de un mecanismo dinámico de detención de pérdidas

    • Detención de pérdidas y pérdidas de seguimiento basado en ATR, con ajuste dinámico de la distancia de detención según el tiempo de tenencia de la posición y la situación de las ganancias
    • Pérdida técnica combinada con puntos de resistencia de soporte
    • Determinación de pérdidas adaptativas basadas en la máxima desviación adversa (MAE)
  2. Mejorar la identificación del entorno del mercado

    • Introducción de filtros de intensidad de tendencia (como ADX) para suspender el comercio cuando no hay una tendencia clara
    • Agrega clasificación de estados de fluctuación para identificar y evitar períodos de fluctuación extrema
    • Identificación anticipada de agotamiento de la liquidez en combinación con indicadores de la microestructura del mercado
  3. Optimización de los parámetros de adaptación

    • Aplicación de la retroalimentación de la ventana de rodaje y la longitud del ciclo de análisis de ajuste dinámico
    • Introducción de métodos de aprendizaje automático (como algoritmos genéticos, optimización de grupos de partículas) para la optimización de parámetros
    • Mecanismo de cambio de parámetros basado en el estado del mercado
  4. Mejor calidad de la señal

    • Aumento de las condiciones de confirmación de la transacción, que requieren un aumento de la transacción cuando se activa la señal
    • Confirmación múltiple en combinación con las posiciones técnicas clave (por ejemplo, posición anterior alta, posición anterior baja, posiciones de reajuste de Fibonacci)
    • Introducción de un sistema de puntuación de la intensidad de la señal para ajustar el tamaño de la posición según la puntuación
  5. Optimización de la gestión de posiciones

    • Distribución dinámica de posiciones basada en la fórmula de Kelly
    • Ajuste el porcentaje de apertura de posición según la intensidad de la señal y la calificación del estado del mercado
    • Implementar estrategias de subida y bajada de la pirámide
  6. Integración de marcos de tiempo múltiples

    • En el ciclo de tiempo más alto, el juez de la dirección de la tendencia general, sólo hacer el comercio de avance
    • Buscar un punto de entrada exacto en un período de tiempo más corto
    • Construir un mecanismo de confirmación de resonancia de ciclo múltiple

Resumir

La estrategia de distribución adaptativa de BBP representa un intento innovador de combinar el análisis técnico con la estadística moderna, que resuelve fundamentalmente la dependencia de las estrategias tradicionales en la hipótesis de distribución ortogonal a través de la técnica de adaptación de distribución adaptativa. El valor central de la estrategia radica en su innovación teórica y el respeto por las características de la distribución real del mercado, que permite mantener una calidad de señal razonable en mercados con diferentes formas de distribución.

Sin embargo, también hay un margen de mejora evidente en la estrategia. La falta de un mecanismo claro de detención de pérdidas es el mayor de los puntos débiles, que se debe complementar con prioridad en la aplicación práctica. La complejidad de la optimización de los parámetros y la adaptabilidad de los mercados transversal también deben resolverse mediante la introducción de mecanismos de identificación de entornos de mercado y de adaptación de parámetros.

Esta estrategia ofrece un excelente marco de aprendizaje y mejora para los comerciantes cuantitativos que buscan profundidad teórica y están dispuestos a investigar en profundidad.

  1. Realizar un buen historial de retroalimentación y optimización de parámetros para los indicadores de negociación específicos
  2. Agrega protección contra pérdidas de hardware basada en ATR o porcentaje
  3. Evita el comercio en condiciones de mercado desfavorables combinado con un filtro de tendencia
  4. Comience con una posición pequeña y verifique el rendimiento de la estrategia en el mercado real

En general, se trata de una estrategia innovadora con una sólida base teórica, una lógica de diseño rigurosa y un alto valor de investigación y aplicación, que vale la pena que los operadores cuantitativos exploren en profundidad y optimizen continuamente.

Código Fuente de la Estrategia
//@version=5
strategy("BBP Adaptive Distribution Strategy [presentTrading]")

//========================================
// BBP策略参数设置
//========================================
lengthInput = input.int(20, "EMA Length");//EMA周期长度
zLength = input.int(150, "Distribution Analysis Period");//分布分析周期

//自适应分布参数组
dist_group = "Distribution Fitting";
//统计显著性水平,0.05表示95%置信度
significance_level = input.float(0.05, "Significance Level", minval=0.01, maxval=0.1, step=0.01, 
    group=dist_group, tooltip="统计显著性水平,0.05=95%置信度");
//是否启用自适应分布拟合,禁用则使用传统Z-score
auto_fit = input.bool(true, "Auto Fit Distribution", group=dist_group, 
    tooltip="启用自适应分布拟合,禁用则使用传统Z-score");
//偏度阈值,超过此值考虑使用偏态分布
skew_threshold = input.float(0.5, "Skewness Threshold", minval=0.1, maxval=2.0, group=dist_group, 
    tooltip="超过此值考虑偏态分布");
//峰度阈值,超过此值考虑使用厚尾分布
kurt_threshold = input.float(1.0, "Kurtosis Threshold", minval=0.3, maxval=3.0, group=dist_group, 
    tooltip="超过此值考虑厚尾分布");

//========================================
// 止盈参数设置
//========================================
tp_group = "Take Profit Settings";//止盈参数组
useTP = input.bool(true, "Use Take Profit", group=tp_group);//是否启用止盈
baseAtrLength = input.int(20, "ATR Period", minval=1, group=tp_group);//ATR计算周期
atrMult1 = input.float(1.618, "TP1 ATR Multiplier", minval=0.1, step=0.1, group=tp_group);//第一止盈位ATR倍数
atrMult2 = input.float(2.382, "TP2 ATR Multiplier", minval=0.1, step=0.1, group=tp_group);//第二止盈位ATR倍数
atrMult3 = input.float(3.618, "TP3 ATR Multiplier", minval=0.1, step=0.1, group=tp_group);//第三止盈位ATR倍数
tp1_size = input.float(13, "TP1 Position %", minval=1, maxval=100, group=tp_group);//第一止盈位仓位百分比
tp2_size = input.float(13, "TP2 Position %", minval=1, maxval=100, group=tp_group);//第二止盈位仓位百分比
tp3_size = input.float(13, "TP3 Position %", minval=1, maxval=100, group=tp_group);//第三止盈位仓位百分比

//========================================
// 成交量分析参数设置
//========================================
vol_group = "Volume Analysis Settings";//成交量分析参数组
vol_period = input.int(100, "Volume MA Period", minval=1, group=vol_group);//成交量均线周期
vol_high = input.float(2.0, "High Volume Multiplier", minval=1.0, step=0.1, group=vol_group);//高成交量倍数
vol_med = input.float(1.5, "Medium Volume Multiplier", minval=1.0, step=0.1, group=vol_group);//中成交量倍数
vol_low = input.float(1.0, "Low Volume Multiplier", minval=0.5, step=0.1, group=vol_group);//低成交量倍数
vol_high_mult = input.float(1.5, "High Volume Factor", minval=0.1, step=0.1, group=vol_group);//高成交量系数
vol_med_mult = input.float(1.3, "Medium Volume Factor", minval=0.1, step=0.1, group=vol_group);//中成交量系数
vol_low_mult = input.float(1.0, "Low Volume Factor", minval=0.1, step=0.1, group=vol_group);//低成交量系数

//========================================
// 百分位分析参数设置
//========================================
perc_group = "Percentile Analysis Settings";//百分位分析参数组
perc_period = input.int(100, "Percentile Period", minval=20, group=perc_group);//百分位计算周期
perc_high = input.float(90, "High Percentile", minval=50, maxval=100, group=perc_group);//高百分位阈值
perc_med = input.float(80, "Medium Percentile", minval=50, maxval=100, group=perc_group);//中百分位阈值
perc_low = input.float(70, "Low Percentile", minval=0, maxval=100, group=perc_group);//低百分位阈值
perc_high_mult = input.float(1.5, "High Percentile Factor", minval=0.1, step=0.1, group=perc_group);//高百分位系数
perc_med_mult = input.float(1.3, "Medium Percentile Factor", minval=0.1, step=0.1, group=perc_group);//中百分位系数
perc_low_mult = input.float(1.0, "Low Percentile Factor", minval=0.1, step=0.1, group=perc_group);//低百分位系数

//========================================
// 核心多空力量计算
//========================================
//计算价格的指数移动平均
emaClose = ta.ema(close, lengthInput);
//多头力量:最高价与EMA的差值
bullPower = high - emaClose;
//空头力量:最低价与EMA的差值
bearPower = low - emaClose;
//多空力量平衡:多头力量加上空头力量
bbp = bullPower + bearPower;

//计算分布的高阶矩:均值、标准差、偏度、峰度
calcDistributionMoments(src, length) =>
    mean = ta.sma(src, length);//计算均值
    variance = ta.variance(src, length);//计算方差
    stddev = math.sqrt(variance);//计算标准差
    
    //初始化偏度和峰度累加变量
    skew_sum = 0.0;
    kurt_sum = 0.0;
    
    //当标准差大于0时,计算偏度和峰度
    if stddev > 0
        for i = 0 to math.min(length - 1, 100)
            z = (src[i] - mean) / stddev;//计算标准化值
            z2 = z * z;//计算Z的平方
            skew_sum += z * z2;//累加偏度项
            kurt_sum += z2 * z2;//累加峰度项
    
    n = math.min(length, 100);//取样本数
    skewness = skew_sum / n;//计算偏度
    excess_kurtosis = kurt_sum / n - 3.0;//计算超额峰度
    
    [mean, stddev, skewness, excess_kurtosis];//返回四个统计量

//自适应阈值计算:根据分布特征动态调整阈值
calcAdaptiveThreshold(mu, sigma, skew, kurt, alpha, use_adaptive) =>
    //计算标准正态分位数(基础Z值)
    z_base = math.sqrt(-2.0 * math.log(alpha / 2.0));
    
    z_adjusted = z_base;//初始化调整后的Z值
    
    //如果启用自适应拟合,则进行分布修正
    if use_adaptive
        //厚尾修正:使用t分布近似,当峰度超过阈值时调整
        if math.abs(kurt) > kurt_threshold
            df = math.max(6.0 / math.abs(kurt) + 4.0, 5.0);//计算自由度
            z_adjusted := z_adjusted * math.sqrt(df / (df - 2.0));//调整Z值
        
        //偏度修正:使用Cornish-Fisher展开式,当偏度超过阈值时调整
        if math.abs(skew) > skew_threshold
            z_adjusted := z_adjusted + skew * (z_adjusted * z_adjusted - 1.0) / 6.0;//应用偏度修正
    
    //计算上下阈值
    upper_threshold = mu + sigma * z_adjusted;
    lower_threshold = mu - sigma * z_adjusted;
    
    [upper_threshold, lower_threshold];//返回上下阈值

//执行分布分析:计算BBP的均值、标准差、偏度和峰度
[mu, sigma, skewness, kurtosis] = calcDistributionMoments(bbp, zLength);

//计算自适应阈值:基于统计特征动态确定交易阈值
[upper_threshold, lower_threshold] = calcAdaptiveThreshold(mu, sigma, skewness, kurtosis, 
    significance_level, auto_fit);

//========================================
// 成交量与百分位分析
//========================================
vol_sma = ta.sma(volume, vol_period);//计算成交量简单移动平均
vol_mult = volume / vol_sma;//计算当前成交量相对于均值的倍数

//计算百分位排名:返回当前值在历史数据中的百分位位置
calcPercentile(src) =>
    var values = array.new_float(0);//初始化数组
    array.unshift(values, src);//将新值插入数组头部
    if array.size(values) > perc_period
        array.pop(values);//超过周期长度时删除尾部元素
    //计算百分位排名
    array.size(values) > 0 ? array.percentrank(values, array.size(values)-1) * 100 : 50;

price_perc = calcPercentile(close);//计算价格百分位
vol_perc = calcPercentile(volume);//计算成交量百分位

//计算止盈系数:综合成交量和价格百分位评分
getTpFactor() =>
    //根据成交量倍数评分
    vol_score = vol_mult > vol_high ? vol_high_mult : vol_mult > vol_med ? vol_med_mult : vol_mult > vol_low ? vol_low_mult : 0.8;
    
    //根据价格百分位评分
    price_score = price_perc > perc_high ? perc_high_mult : price_perc > perc_med ? perc_med_mult : price_perc > perc_low ? perc_low_mult : 0.8;
    
    math.avg(vol_score, price_score);//返回两个评分的平均值

//========================================
// 入场出场逻辑
//========================================
//多头入场条件:BBP向上突破上阈值
longCondition = ta.crossover(bbp, upper_threshold);
//空头入场条件:BBP向下跌破下阈值
shortCondition = ta.crossunder(bbp, lower_threshold);
//多头出场条件:BBP向下跌破均值
exitLongCondition = ta.crossunder(bbp, mu);
//空头出场条件:BBP向上突破均值
exitShortCondition = ta.crossover(bbp, mu);

//========================================
// 交易执行逻辑
//========================================
//在K线确认后执行交易
if (barstate.isconfirmed)
    if longCondition
        strategy.entry("Long", strategy.long);//开多头仓位
    if shortCondition
        strategy.entry("Short", strategy.short);//开空头仓位
    if exitLongCondition
        strategy.close("Long");//平多头仓位
    if exitShortCondition
        strategy.close("Short");//平空头仓位

//========================================
// 止盈执行逻辑
//========================================
//当启用止盈且持有仓位时执行止盈逻辑
if useTP and strategy.position_size != 0
    base_move = ta.atr(baseAtrLength);//计算基础ATR值
    tp_factor = getTpFactor();//获取止盈系数
    is_long = strategy.position_size > 0;//判断是否为多头仓位
    entry_price = strategy.position_avg_price;//获取入场均价
    
    //多头止盈设置
    if is_long
        tp1_price = entry_price + (base_move * atrMult1 * tp_factor);//计算第一止盈价
        tp2_price = entry_price + (base_move * atrMult2 * tp_factor);//计算第二止盈价
        tp3_price = entry_price + (base_move * atrMult3 * tp_factor);//计算第三止盈价
        
        strategy.exit("TP1", "Long", qty_percent=tp1_size, limit=tp1_price);//设置第一止盈
        strategy.exit("TP2", "Long", qty_percent=tp2_size, limit=tp2_price);//设置第二止盈
        strategy.exit("TP3", "Long", qty_percent=tp3_size, limit=tp3_price);//设置第三止盈
    else
        //空头止盈设置
        tp1_price = entry_price - (base_move * atrMult1 * tp_factor);//计算第一止盈价
        tp2_price = entry_price - (base_move * atrMult2 * tp_factor);//计算第二止盈价
        tp3_price = entry_price - (base_move * atrMult3 * tp_factor);//计算第三止盈价
        
        strategy.exit("TP1", "Short", qty_percent=tp1_size, limit=tp1_price);//设置第一止盈
        strategy.exit("TP2", "Short", qty_percent=tp2_size, limit=tp2_price);//设置第二止盈
        strategy.exit("TP3", "Short", qty_percent=tp3_size, limit=tp3_price);//设置第三止盈

//========================================
// 图表绘制
//========================================
//绘制BBP柱状图:多头力量为绿色,空头力量为红色
plot(bbp, color=bbp >= mu ? color.new(color.green, 0) : color.new(color.red, 0), 
     title="BBPower", style=plot.style_columns);

//绘制均值线
plot(mu, "Mean", color=color.gray, linewidth=1, style=plot.style_line);
//绘制上阈值线
plot(upper_threshold, "Upper Threshold", color=color.orange, linewidth=2);
//绘制下阈值线
plot(lower_threshold, "Lower Threshold", color=color.orange, linewidth=2);

//绘制参考线:正负1倍标准差
plot(mu + sigma, "+1σ", color=color.new(color.blue, 70), linewidth=1, style=plot.style_circles);
plot(mu - sigma, "-1σ", color=color.new(color.blue, 70), linewidth=1, style=plot.style_circles);
//绘制参考线:正负2倍标准差
plot(mu + 2*sigma, "+2σ", color=color.new(color.purple, 70), linewidth=1, style=plot.style_cross);
plot(mu - 2*sigma, "-2σ", color=color.new(color.purple, 70), linewidth=1, style=plot.style_cross);

//========================================
// 信号标记
//========================================
//绘制多头信号标记
plotshape(longCondition, title="Long Signal", location=location.bottom, 
    color=color.new(color.green, 0), style=shape.labelup, text="LONG", 
    textcolor=color.white, size=size.small);

//绘制空头信号标记
plotshape(shortCondition, title="Short Signal", location=location.top, 
    color=color.new(color.red, 0), style=shape.labeldown, text="SHORT", 
    textcolor=color.white, size=size.small);