
Стратегия представляет собой инновационную количественную торговую систему, основанную на теории статистического распределения, сочетающую традиционный показатель многополярной силы (Bull Bear Power) с адаптивной технологией адаптации распределения. Основными новшествами стратегии являются избавление от фиксированных предположений в традиционном техническом анализе о нормальном распределении, динамическая корректировка торгового порога путем вычисления в режиме реального времени высокоуровневых статистических характеристик рыночных данных (наклонность и пик), чтобы генерирование сигналов соответствовало реальным распределенным характеристикам рынка.
Основные элементы стратегии включают в себя:
Расчет ВВППоложительное значение означает преобладание плюсовых, отрицательное значение - преобладание пустых.
Анализ распределённых характеристикПрименение метода вычисления высококлассных матриц для статистического анализа последовательности BBP, вывод средних значений, стандартных отклонений, отклонений ((трехклассный центральный матриц) и сверхпиков ((четырехклассный центральный матриц уменьшение 3) четырех ключевых статистических величин, полностью изображающих распределение рыночных данных. Отклонения отражают несимметричность распределения, пики отражают толщину хвоста и частоту экстремальных событий.
Адаптированное создание порога:
Оценка состояния рынка:
Динамическая тормозная система:
Генерация и исполнение сигнала:
Прочные теоретические основы статистики: избавление от фиксированных предположений о нормальном распределении в традиционных стратегиях, адаптация критериев принятия решений к динамике реальных распределенных характеристик рынка, перестройка логики генерирования сигналов с статистического уровня с строгой теоретической поддержкой.
Выдающаяся способность к адаптацииС помощью мониторинга в режиме реального времени отклонений и пиков стратегия может автоматически идентифицировать изменения в характеристиках распределения рынка. Увеличение верхних отклонений в положительно отклонённых рынках позволяет избежать отслеживания высоких отклонений, а расширение диапазона отклонений в толстых рынках позволяет избежать чрезмерной реакции на нормальные колебания, что действительно позволяет стратегии адаптироваться к рынку.
Комплексная многомерная оценкаСоздание целостной системы оценки состояния рынка, объединяющей три измерения: динамику цен, активность объема сделок и относительную позицию цен, избегая одностороннего суждения о одном измерении.
Динамическое управление рискамиТрехступенчатая система остановок с механизмом динамической корректировки позволяет оптимизировать остановочные расстояния в зависимости от температуры рынка. Полностью захватывает пространство для прибыли в трендовых ситуациях и быстро получает прибыль в слабых ситуациях.
Сигнал высокого качества: с помощью проверки статистической значимости, срабатывает только в точке истинного распределения аномалий, эффективно снижает уровень ложных сигналов, повышает статистическую эффективность сделки.
Визуализация интуиции: Процесс адаптации стратегии, легко понимаемый и контролируемый с помощью динамических отклонений, отклонений от стандарта и маркировки сигналов
Оптимизация параметров высокой сложностиСтратегия включает в себя несколько параметров (высокий уровень значимости, отклонение, пик, стоп-множественность и т. д.), оптимальные комбинации параметров в различных рыночных условиях отличаются, требуют систематической оптимизации параметров и обратной проверки.
Отсутствие четких механизмов по ликвидации убытковСтратегия основывается на выходе из средней стоимости, отсутствие жестких остановок на основе цены или ATR. В крайних односторонних ситуациях, если BBP продолжает отклоняться от средней стоимости и не возвращается, это может привести к значительным потерям и занятию капитала.
Низкая адаптируемость рынкаВ условиях длительных узких колебаний, стоимость BBP колеблется вблизи средней стоимости, что затрудняет достижение адаптивной пониженной стоимости, что приводит к редкости возможностей для торговли и ограничивает эффективность стратегии.
Сильная зависимость от данных: Анализ распределённых характеристик требует достаточного количества исторических данных для получения стабильных и надежных статистических результатов. Новые выпущенные монеты или показатели с недостаточными данными могут быть нестабильными в раннем использовании, что может повлиять на эффективность стратегии.
Высокая сложность вычисленийВ реальном времени вычисление высоких степеней, процентного ранжирования и динамического понижения требует прохождения через исторические данные, что может привести к сбоям в производительности в среде с ограниченными ресурсами.
Риски экстремальных ситуацийВ экстремально быстрых односторонних ситуациях, таких как вспышка или буря, BBP может мгновенно преодолеть порог и быстро вернуться назад, что приводит к нежелательному вхождению в точку или упущению оптимального времени.
Введение динамического механизма остановки убытков:
Повышение осведомленности о рыночной ситуации:
Параметры адаптируются и оптимизируются:
Повышение качества сигнала:
Оптимизация управления позициями:
Интеграция многовременных рамок:
Стратегия BBP по адаптивному распределению представляет собой инновационную попытку объединения технического анализа с современной статистикой, которая в корне решает проблему зависимости традиционной стратегии от гипотезы нормального распределения посредством адаптивного распределения. Центральная ценность стратегии заключается в ее теоретической инновативности и уважении к реальным распределенным характеристикам рынка, которая позволяет поддерживать разумное качество сигнала на рынках с различными формами распределения.
Тем не менее, существует также очевидное пространство для улучшения стратегии. Отсутствие четких механизмов остановки убытков является наибольшим недостатком, который необходимо удовлетворить в практическом применении. Сложность оптимизации параметров и адаптивность к поперечным рынкам также требует решения путем внедрения механизмов идентификации рыночной среды и адаптации параметров.
Для тех, кто стремится к теоретической глубине и желает углубиться в исследования, эта стратегия предоставляет отличную основу для обучения и совершенствования.
В целом, это инновационная стратегия с прочной теоретической основой, строгой логикой дизайна и высокой исследовательской и прикладной ценностью, которая заслуживает глубокого изучения и постоянной оптимизации количественными трейдерами.
//@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);