概率锥 (Probability Cones)

概率锥 (Probability Cones) 指标源码解析与数学原理
一、 核心数学模型与原理
概率锥的理论基础源于金融工程中的 几何布朗运动(Geometric Brownian Motion, GBM) 模型。在该模型下,资产价格的对数收益率服从正态(或重尾)分布,其不确定性(波动范围)随时间的推移按 时间平方根法则(Square Root of Time Rule) 呈锥形扩散。
┌── Upper 3σ (99.73%)
│── Upper 2σ (95.45%)
│── Upper 1σ (68.27%)
锚点价格 S₀ ─────────┼── Mean (中枢漂移轴)
│── Lower 1σ
│── Lower 2σ
└── Lower 3σ
t=0 t=i (未来 K 线)
1. 对数收益率 (Log Returns)
金融资产价格变化存在非对称性与累乘效应,因此采用连续复利的对数收益率:
$$r_t = lnleft(frac{S_t}{S_{t-1}}right)$$
- $S_t$:当前周期的数据源价格(如
close)。 - $S_{t-1}$:上一周期的价格。
2. 均值漂移率 ($mu$)
在历史回溯窗口 $N$ (i_lookback,默认 500 根 K 线) 内,计算对数收益率的期望值:
-
算术平均值 (Average):
$$mu = frac{1}{N} sum_{t=1}^{N} r_t = text{SMA}(r, N)$$ -
中位数 (Median):
$$mu = text{Median}(r, N)$$
在长期价格序列中,中位数对异常值(黑天鹅极值)具有更强的鲁棒性。
3. 波动率与偏差算法 ($sigma$)
指标提供了三种历史波动率算法以及一种自定义隐含波动率(IV)导入机制:
(1) 标准差 (Standard Deviation)
适用于标准正态分布假设:
$$sigma_{text{std}} = sqrt{frac{1}{N-1} sum_{t=1}^{N} (r_t – mu)^2}$$
(2) 平均绝对偏差 (MAD – Mean Absolute Deviation)
用于降低离群值影响,反映收益率的平均离散程度:
$$text{MAD} = frac{1}{N} sum_{t=1}^{N} |r_t – mu|$$
(3) 拉普拉斯偏差 (Laplace Deviation)
假设资产收益率服从重尾分布(拉普拉斯分布/双指数分布),公式为:
$$sigma_{text{laplace}} = sqrt{2 cdot text{MAD}^2} = sqrt{2} cdot text{MAD}$$
(4) 年化隐含波动率转换 (Custom IV)
当开启 i_useCustomIV 时,指标将年化百分比波动率 $mathrm{IV}$ 转换至单根 K 线周期的波动率:
$$sigma_{mathrm{IV}} = frac{mathrm{IV}}{100 times sqrt{mathrm{PeriodsPerYear}}}$$
- 例如:加密货币日线 $mathrm{PeriodsPerYear} = 365$,股市日线 $mathrm{PeriodsPerYear} = 252$。
4. 概率锥推演公式
定义起点(锚点)价格为 $S_0$,漂移率为 $mu$,单周期偏差为 $sigma$。向未来第 $i$ 根 K 线($i = 0, 1, 2, dots, text{forecastBars}$)进行推演:
均线(漂移轴)
$$text{Mean}_i = S_0 cdot e^{mu cdot i}$$
- 若关闭漂移 (
i_driftToggle = false),则 $mu = 0$,中枢线为水平线 $text{Mean}_i = S_0$。
上下偏差锥线 (Upper / Lower Lines)
$$text{Upper}_{i, k} = S_0 cdot e^{mu cdot i + k cdot sigma cdot sqrt{i + text{open}}}$$
$$text{Lower}_{i, k} = S_0 cdot e^{mu cdot i – k cdot sigma cdot sqrt{i + text{open}}}$$
- $k$:偏差倍数(如第 1、2、3 层圆锥对应的 $k_1, k_2, k_3$)。
- $sqrt{i + text{open}}$:时间平方根扩散因子。
open参数控制锚点起点是否包含初始波动(开启时 $text{open}=1$,闭合时 $text{open}=0$)。
二、 代码结构与函数拆解
Pine Script 源码采用了模块化的设计架构,整体分为六大部分:
┌────────────────────────────────────────────────────────┐
│ 1. 常量与类型定义 (User Types & Color Strings) │
├────────────────────────────────────────────────────────┤
│ 2. 输入选项配置 (Inputs: Custom IV, Anchors, Cones) │
├────────────────────────────────────────────────────────┤
│ 3. 自定义对象与方法 (Type definitions & lineStyle) │
├────────────────────────────────────────────────────────┤
│ 4. 概率锥计算核心函数 (coneValues, coneLine, coneFill) │
├────────────────────────────────────────────────────────┤
│ 5. 动态锚点定位与波动率计算 │
├────────────────────────────────────────────────────────┤
│ 6. 绘图渲染逻辑 (barstate.islast 执行) │
└────────────────────────────────────────────────────────┘
1. 自定义数据类型 (User-Defined Types)
为了便于多层级数据的传递与管理,代码定义了三个封装对象:
deviations:存储各层上下轨道的偏差倍数与计算得到的单周期波动率。coneValues:存储未来所有预测点上的价格数组 (array)。coneLineStyle:封装线条样式(颜色、样式、线宽、开关)。
2. 核心算法函数
coneValues()
循环生成从 $i = 0$ 到 forecastBars 的所有区间价格,并压入对应数组:
coneValues(float sourceAnchor, bool driftToggle, float mean, int forecastBars, bool anchorOpenToggle, deviations newDeviations) =>
int anchorOpen = anchorOpenToggle ? 1 : 0
// 遍历预测周期
for i = 0 to forecastBars
float periodSqrt = math.sqrt(i + anchorOpen)
float driftFactor = driftToggle ? mean * i : 0.0
// 利用指数扩散计算上轨与下轨价格
float upperVal = sourceAnchor * math.exp(driftFactor + newDeviations.dev1 * newDeviations.stdev * periodSqrt)
// ... 压入数组存储
coneLine()
利用 line.new() 在图表上绘制或更新线条。代码优化了内存消耗,只在最后一根 K 线更新 line 坐标。支持阶梯状(stepped)与平滑连接两种模式。
coneFill()
使用 Pine Script 独特的 linefill.new() 方法,在相邻的两条 line 对象之间创建动态色彩填充区。
3. 动态锚点计算 (Anchor Index)
指标支持三种确定概率锥起点的方式:
ANCHOR_BAR:基于当前 K 线向后回溯 N 根 K 线。ANCHOR_DATE:锁定在用户指定的特定日期。ANCHOR_HTF:自动锁定在更高时间框架(如周线 W、月线 M)的起点。
转换公式:
int anchorSubscript = switch i_anchorType
ANCHOR_BAR => i_coneLock ? i_barsBack + (bar_index - barLock[1] - 1) + i_anchorOffset : i_barsBack + i_anchorOffset
ANCHOR_DATE => bar_index - anchorDate + i_anchorOffset
ANCHOR_HTF => anchorBarssince + i_anchorOffset
三、 参数与符号对照表
| Pine Script 变量 | 数学符号 | 参数含义 | 默认设置 |
|---|---|---|---|
i_source |
$S$ | 计算数据源 | close |
i_lookback |
$N$ | 统计回溯周期 | 500 |
i_forecastBars |
$H$ | 向未来预测的 K 线数量 | 30 |
meanSwitch |
$mu$ | 对数收益率期望漂移率 | 自动选择 |
deviationSwitch |
$sigma$ | 单周期波动率/偏差 | 历史标准差或转换 IV |
i_customIV |
$mathrm{IV}$ | 年化隐含波动率 (%) | 50.0% |
i_periodsPerYear |
$P$ | 每年 K 线总数 | 365 |
i_firstUpperDeviation |
$k_1$ | 第一层上偏差倍数 (标准差层级 1) | 1.0 |
i_secondUpperDeviation |
$k_2$ | 第二层上偏差倍数 (标准差层级 2) | 2.0 |
i_thirdUpperDeviation |
$k_3$ | 第三层上偏差倍数 (标准差层级 3) | 3.0 |
四、 实战应用场景
-
期权卖方安全边界规划 (Options Selling Boundary):
利用自定义 IV 模式生成概率锥,1σ 覆盖约 68.27% 的价格范围,2σ 覆盖约 95.45%。期权卖方(Sell Call / Sell Put)可参照 2σ 或 3σ 概率锥边界设定卖出虚值期权的行权价。 -
波动率挤压与突破评估 (Volatility Breakout):
当价格突破 2σ 或 3σ 概率锥边界时,表明市场发生了超出统计常态的非理性冲高或暴跌,可作为超买超卖逆向交易或顺势突破交易的信号。 -
未来价格目标位预测 (Price Target Forecasting):
结合均线漂移轴(Mean Line),可以评估在趋势延续假设下,资产价格在特定未来时间点的统计期望中枢。