跳到主要内容

公式

公式让你能够根据图表指标创建自定义的计算序列。使用算术运算符和内置函数对指标进行组合、变换和分析。

添加公式

  1. 编辑模式下打开图表
  2. 点击 + Add 按钮,然后选择 Add Formula
  3. 输入一个标签(例如,"7-day SMA of Price")
  4. 输入一个表达式(例如,sma(m1, 7)
  5. 点击 Add Formula

公式结果会作为一条新序列显示在图表上,并拥有自己的颜色和样式。

语法

指标与公式引用

  • m1m2……按位置引用图表指标(第一个指标 = m1)
  • f1f2……按位置引用更早的公式(第一个公式 = f1)

公式按顺序求值,因此 f2 可以引用 f1,但反过来不行。

算术运算符

具有正常优先级的标准运算符(*/ 先于 +-):

m1 + m2 # Addition
m1 - m2 # Subtraction
m1 * m2 # Multiplication
m1 / m2 # Division (returns null if divisor is 0)
(m1 + m2) * m3 # Parentheses for grouping

数字与水平线

常量值可以用在表达式中。一个独立的数字会在该值处绘制一条水平线

42000 # Horizontal line at 42,000
m1 * 100 # Scale a metric
m1 / 1000000 # Convert to millions
0.5 # Horizontal line at 0.5 (useful as threshold)

函数

移动平均与滚动统计

函数语法说明
smasma(series, period)简单移动平均——对尾部 N 个数据点取算术平均值
emaema(series, period)指数移动平均——EMA_t = value_t × k + EMA_(t-1) × (1 - k),其中 k = 2 / (period + 1)。对近期值赋予更高权重
medianmedian(series, period)在 N 个周期上的滚动中位数(中间值)
sumsum(series, period)在尾部 N 个周期上的滚动求和
stdstd(series, period)在 N 个周期上的滚动标准差

累计函数

使用从起点到每个数据点的全部数据的扩展窗口函数:

函数语法说明
cumsumcumsum(series)从数据起点开始的扩展累计求和
cummeancummean(series)从数据起点开始的扩展累计均值
cummediancummedian(series)从数据起点开始的扩展累计中位数
cumstdcumstd(series)从数据起点开始的扩展累计标准差
cummaxcummax(series)到每个数据点为止的累计历史最大值
cummincummin(series)到每个数据点为止的累计历史最小值

变化函数

函数语法说明
percent_changepercent_change(series, period)在 N 个周期上的百分比变化。返回值为小数形式(例如,0.20 = +20% 增长)
diffdiff(series, period)在 N 个周期上的绝对值变化:value_t - value_(t-N)

数学函数

函数语法说明
absabs(series)所有数据点的绝对值
powpow(series, n)将所有数据点求 n 次幂
loglog(series)以 10 为底的对数(对非正值返回 null)
roundround(series, digits)将值四舍五入到 N 位小数
maxmax(a, b, ...)逐点最大值——在每个数据点返回所有参数中的最大值。参数可以是序列或常量,例如 max(m1, m2, 0)
minmin(a, b, ...)逐点最小值——在每个数据点返回所有参数中的最小值。参数可以是序列或常量,例如 min(m1, m2, 100)

技术指标

函数语法说明
rsirsi(series, period)相对强弱指数(0–100),在 N 个周期上使用 Wilder 平滑法计算
corrcorr(series1, series2, period)两个序列在 N 个周期的尾部窗口上的 Pearson 相关系数。返回值从 -1(反向)到 +1(完全正相关)
drawdowndrawdown(series)相对于历史最高点的相对回撤。返回负小数(例如,-0.30 = 低于 ATH 30%)

风险与回报

函数语法说明
mean_returnmean_return(series, period)在 N 个周期上的年化滚动平均回报(基于每日对数回报 × 365)
realized_volrealized_vol(series, period)在 N 个周期上的年化已实现波动率(每日对数回报标准差 × √365)
sharpe_ratio_arithmeticsharpe_ratio_arithmetic(series, period)在 N 个周期上使用回报算术平均值计算的年化 Sharpe 比率
sharpe_ratio_geometricsharpe_ratio_geometric(series, period)在 N 个周期上使用回报几何平均值计算的年化 Sharpe 比率

序列操作

函数语法说明
shiftshift(series, period)将序列向右平移 N 个周期。正周期在当前位置显示过去的值(即每个数据点显示 N 个周期之前的值)。负周期向左平移(显示未来的值)
ifif(a, "op", b, then, else)条件:在每个数据点求值比较式 a op b,若为真返回 then,若为假返回 elseop 参数是以带引号字符串形式传入的比较运算符:"=""!="">"">=""<""<="

示例

移动平均

sma(m1, 7) # 7-day simple moving average of first metric
sma(m1, 30) # 30-day SMA
ema(m1, 21) # 21-day exponential moving average
median(m1, 14) # 14-day rolling median

SMA 交叉检测

f1: sma(m1, 7) # Short-term SMA
f2: sma(m1, 30) # Long-term SMA
f3: f1 - f2 # Difference (positive = short above long)

比率分析

m1 / m2 # Ratio between two metrics

相对历史最高点的回撤

drawdown(m1) # Drawdown as negative decimal (-0.30 = 30% below ATH)

布林带

f1: sma(m1, 20) # Middle band
f2: f1 + 2 * std(m1, 20) # Upper band (+2 standard deviations)
f3: f1 - 2 * std(m1, 20) # Lower band (-2 standard deviations)

周期间变化

percent_change(m1, 7) # 7-day percentage change (decimal)
diff(m1, 30) # 30-day absolute change

RSI

rsi(m1, 14) # 14-period RSI
30 # Oversold threshold line
70 # Overbought threshold line

限定取值范围

max(m1, 0) # Floor at zero (remove negative values)
min(m1, 100) # Cap at 100
max(m1, m2) # Higher of two metrics at each point

相关性

corr(m1, m2, 30) # 30-day rolling correlation between two metrics

波动率与风险

realized_vol(m1, 30) # 30-day annualized volatility
sharpe_ratio_arithmetic(m1, 90) # 90-day annualized Sharpe ratio

样式

添加公式后,在图例中点击它(处于编辑模式下)即可配置:

  • 图表样式:线形图、面积图或柱状图
  • 颜色:从预设中选择或自定义
  • Y 轴:分配到任意坐标轴
  • 线宽填充不透明度
  • 可见性:显示/隐藏切换

持久化

公式会与图表配置一起保存。当你将图表保存到 "My Charts" 时,所有公式都会被保留,并在重新加载图表时恢复。

导出

公式值会包含在 CSV 和 JSON 导出中。每一列公式以该公式的标签作为表头。