Stratégie de distribution adaptative de BBP


Date de création: 2025-11-13 15:13:21 Dernière modification: 2025-11-13 17:51:06
Copier: 9 Nombre de clics: 133
2
Suivre
413
Abonnés

Stratégie de distribution adaptative de BBP Stratégie de distribution adaptative de BBP

Aperçu

La stratégie est un système de négociation quantitative innovant basé sur la théorie de la distribution statistique qui combine les indicateurs de force polyvalente traditionnels (Bull Bear Power) avec la technologie d’adaptation de la distribution. L’innovation principale de la stratégie consiste à se débarrasser de l’hypothèse fixe de l’analyse technique traditionnelle sur la distribution correcte, en calculant en temps réel les caractéristiques statistiques de haut niveau des données de marché (polarisations et pics), en ajustant dynamiquement les seuils de négociation afin que la génération de signaux soit conforme aux caractéristiques réelles de la distribution du marché.

Principe de stratégie

Le mécanisme central de la stratégie comprend les éléments clés suivants:

  1. Calcul de l’indicateur PIBEn calculant la somme des valeurs de la plus haute valeur et de l’EMA (forces multiples) et de la plus basse valeur et de l’EMA (forces superficielles), on construit un indicateur de base qui reflète la comparaison des forces superficielles du marché. La valeur positive représente la prédominance des valeurs multiples et la valeur négative la prédominance des valeurs superficielles.

  2. Analyse des caractéristiques de distribution: analyse statistique de la séquence BBP en utilisant la méthode de calcul de la courbe de haute classe, sortie moyenne, écart-type, déviation (en trois classes) et pic excessif (en quatre classes) pour une représentation complète de la distribution des données du marché. La déviation reflète l’asymétrie de la distribution, et le pic reflète l’épaisseur de la queue et la fréquence des événements extrêmes.

  3. Génération de seuils adaptatifs

    • Le décimal normal standard est calculé sur la base du niveau de significativité comme valeur Z de référence
    • Lorsque le pic excédentaire dépasse la limite, appliquer une approximation de la distribution t modifiée, inverser la liberté en fonction du pic et élargir la plage de tolérance
    • Appliquer l’extension Cornish-Fisher pour la correction de l’asymétrie lorsque l’écart dépasse la limite
    • Ligne de valeurs à la hausse et à la baisse, ajustée en fonction de la dynamique des caractéristiques réelles de la distribution du marché
  4. Évaluation de l’état du marché

    • Dimensions de transaction: la participation du marché est quantifiée en trois niveaux: haute, moyenne et basse, par rapport au volume de transaction actuel multiplié par la moyenne cyclique
    • Dimension de position des prix: position relative des prix sur une période historique par le biais d’un algorithme de classement en pourcentage
    • Mécanisme de notation intégrée: la moyenne des notations en deux dimensions est prise pour former un coefficient d’ajustement de l’arrêt
  5. Système d’arrêt dynamique

    • La conception de l’arrêt à trois niveaux, le multiplicateur de l’arrêt est basé sur le ratio de division d’or ((1.618, 2.382, 3.618))
    • Distance d’arrêt par niveau = ATR × multiplicateur fixe × coefficient d’ajustement dynamique
    • Augmentation de l’objectif d’arrêt dans les situations de forte intensité de trafic et de forte participation, resserrement de la distance d’arrêt dans les situations de faible participation
  6. Génération et exécution de signaux

    • Signaux multiples: le BBP est plus élevé en traversant vers le haut pour s’adapter à la hausse
    • Signal de tête vide: BBP traversé vers le bas pour s’adapter à la baisse de la barre blanche
    • Signaux de sortie: BBP retour à la ligne de la valeur moyenne à l’heure de l’équilibre, suivant le principe de retour à la valeur moyenne

Avantages stratégiques

  1. Une base solide en théorie statistique: abandon de l’hypothèse fixe des stratégies traditionnelles sur la distribution normale, adaptation des critères de décision en fonction de la dynamique des caractéristiques réelles de la distribution du marché, restructuration de la logique de génération de signaux à un niveau statistique, avec un soutien théorique rigoureux.

  2. Une grande capacité d’adaptation: Grâce à la surveillance en temps réel de la déviation et du pic, la stratégie est en mesure d’identifier automatiquement les changements dans les caractéristiques de la distribution du marché. En augmentant la dévaluation en hausse dans les marchés à déviation positive, évitez de suivre la hausse, en élargissant la gamme de dévaluation dans les marchés à queue épaisse, évitez de réagir de manière excessive aux fluctuations normales, ce qui permet de “faire en sorte que la stratégie s’adapte au marché”.

  3. Évaluation intégrée multidimensionnelleL’objectif est de construire un système d’évaluation complet de l’état du marché, combinant les trois dimensions de la dynamique des prix, de l’activité des volumes de transactions et de la position relative des prix, afin d’éviter la partialité des jugements sur une seule dimension.

  4. Gestion dynamique des risquesLe système de freinage à trois niveaux est équipé d’un mécanisme d’ajustement dynamique qui permet d’optimiser la distance de freinage en fonction de la chaleur du marché. Capture pleinement les marges bénéficiaires dans les conditions de tendance et encaisse rapidement les gains dans les conditions de faiblesse.

  5. Qualité du signal: En utilisant des tests de signification statistique, les transactions sont déclenchées uniquement à des points de distribution réels, ce qui réduit le taux de faux signaux et améliore l’efficacité statistique des transactions.

  6. Intuition visualisée: le processus d’adaptation de la stratégie est clairement illustré par une ligne de référence dynamique, une ligne de référence de décalage standard et un marquage de signal, ce qui facilite la compréhension et la surveillance.

Risque stratégique

  1. Paramètres d’optimisation de haute complexité: la stratégie contient plusieurs paramètres (niveau de significativité, seuil de déviation, seuil de pointe, multiplicateur d’arrêt, etc.), les combinaisons optimales de paramètres dans différents environnements de marché sont très variables et nécessitent une optimisation systématique des paramètres et une vérification de la rétroanalyse.

  2. Le manque de mécanismes clairs de prévention: la stratégie repose principalement sur une sortie de retour à la moyenne, sans arrêt dur basé sur le prix ou l’ATR. Dans un scénario unilatéral extrême, si le BBP continue à s’écarter de la moyenne sans revenir, il peut entraîner des pertes importantes et une prise de fonds.

  3. La résilience du marché horizontalEn cas de fluctuation à long terme, la valeur du BBP est proche de la moyenne et ne peut pas atteindre la valeur de la marge d’adaptation, ce qui réduit les opportunités de négociation et limite la performance de la stratégie.

  4. Les données sont très dépendantes.: L’analyse des caractéristiques de distribution nécessite des données historiques suffisantes pour obtenir des résultats statistiques stables et fiables. Les nouvelles monnaies publiées sur le marché ou les indicateurs avec des données insuffisantes peuvent être instables au début de l’utilisation, ce qui affecte la performance de la stratégie.

  5. Plus de complexité de calculLe calcul en temps réel des torques de haute gradation, des pourcentages et des seuils dynamiques nécessite de parcourir les données historiques, ce qui peut entraîner des problèmes de performance dans un environnement de transaction avec des ressources limitées.

  6. Le risque d’une situation extrême: Dans des situations unilatérales extrêmement rapides comme un flash crash ou une tempête, le BBP peut briser la barre instantanément et revenir rapidement, ce qui entraîne une mauvaise position d’entrée ou un mauvais moment.

Direction d’optimisation

  1. Mise en place d’un mécanisme d’arrêt dynamique

    • Tracking stop loss basé sur l’ATR, la distance de stop loss s’ajuste dynamiquement en fonction du temps de détention et de la situation des bénéfices
    • Stop loss technique associée à un point de résistance de support
    • Stop-loss d’adaptation basé sur le décalage maximal défavorable (MAE)
  2. Renforcement de la reconnaissance du contexte du marché

    • Introduction de filtres de force de tendance (comme l’ADX) qui suspendent la négociation en l’absence d’une tendance claire
    • Ajout d’une classification des états de fluctuation pour identifier et éviter les périodes d’extrême volatilité
    • Identifier à l’avance l’état d’épuisement de la liquidité en combinant les indicateurs de la microstructure du marché
  3. Paramètres adaptés à l’optimisation

    • Application de la rétro-mesure de la fenêtre de défilement et de la longueur du cycle d’analyse d’ajustement dynamique
    • L’introduction de méthodes d’apprentissage automatique (comme les algorithmes génétiques et l’optimisation des groupes de particules) pour l’optimisation des paramètres
    • Mise en place d’un mécanisme de commutation de paramètres basé sur l’état du marché
  4. Amélioration de la qualité du signal

    • Augmentation des conditions de confirmation de la transaction, exigeant une amplification de la transaction accompagnée du déclenchement du signal
    • Multiple confirmation combinée à des bits techniques clés (tels que le haut avant le bas avant, le réglage de retour Fibonacci)
    • Introduction d’un système de notation de l’intensité du signal, permettant d’ajuster la taille de la position en fonction de la notation
  5. Optimisation de la gestion des positions

    • Répartition dynamique des positions basée sur la formule de Kelly
    • Modifier le ratio d’ouverture en fonction de la puissance du signal et de la notation de l’état du marché
    • Stratégie de prise et de retrait de la pyramide
  6. Intégration de plusieurs périodes

    • Il est préférable d’opérer sur des cycles plus longs pour déterminer la direction des grandes tendances.
    • Trouver un point d’entrée précis sur une période plus courte
    • Construction d’un mécanisme de confirmation par résonance multi-cycle

Résumer

La stratégie de distribution adaptative BBP représente une tentative innovante de combiner l’analyse technique avec la statistique moderne, en résolvant fondamentalement le problème de la dépendance des stratégies traditionnelles à l’hypothèse d’une distribution normale par la technique d’adaptation de la distribution. La valeur centrale de la stratégie réside dans son innovation théorique et son respect des caractéristiques réelles de la distribution du marché, capable de maintenir une qualité de signal raisonnable sur des marchés de différentes formes de distribution.

Cependant, il y a aussi une marge d’amélioration évidente dans la stratégie. L’absence d’un mécanisme d’arrêt de perte explicite est le plus grand défaut et doit être complété en priorité dans les applications réelles. La complexité de l’optimisation des paramètres et l’adaptabilité des marchés transversaux doivent également être résolues par l’introduction d’un mécanisme d’identification des environnements de marché et d’adaptation des paramètres.

Cette stratégie offre un excellent cadre d’apprentissage et d’amélioration pour les traders quantifiés qui recherchent une profondeur théorique et qui souhaitent approfondir leurs connaissances.

  1. Retour en arrière historique et optimisation des paramètres pour des indices de négociation spécifiques
  2. Ajout d’une protection contre les pertes dures basée sur l’ATR ou le pourcentage
  3. Éviter de négocier dans un environnement de marché défavorable avec un filtre de tendance
  4. Commencez par un petit positionnement et vérifiez progressivement que la stratégie fonctionne dans le monde réel.

Dans l’ensemble, il s’agit d’une stratégie innovante, dotée d’une solide base théorique, d’une logique de conception rigoureuse et d’une valeur de recherche et d’application élevée, qui mérite d’être explorée et optimisée en permanence par les traders quantifiés.

Code source de la stratégie
//@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);