pybroker.indicator 模块

PyBroker 对标准指标进行了重新实现,加入了波动率归一化和稳健的非线性重缩放,使其值在不同股票代码和不同市场状态下都具有可比性。

包含与指标相关的功能。

class Indicator(name: str, fn: Callable[[...], NDArray[float64]], kwargs: dict[str, Any])[源代码]

基类:object

表示一个指标的类。

参数:
  • name -- 指标名称。

  • fn -- 用于计算指标值序列的 Callable

  • kwargs -- 传递给 fn 的关键字参数 dict

__call__(data: BarData | DataFrame, hyperparams: dict[str, Any] | None = None) Series[源代码]

计算指标值。

property hyperparam_names: frozenset[str]
intervals(*intervals: int | Literal['daily', 'weekly', 'monthly', 'quarterly', 'yearly'] | str) IntervalBoundIndicator[源代码]

将此指标绑定到一个或多个压缩区间,以便与 pybroker.strategy.Strategy.add_execution() 搭配使用。

已绑定的指标只会在所列出的区间上计算,其值通过 pybroker.context.IntervalContext.indicator() 读取。绑定会替代默认的基础时间框架计算;在 intervals 中包含字面量 'base' 即可同时在基础时间框架上计算该指标。绑定的区间会自动通过 pybroker.context.ExecContext.interval() 提供,无需在 add_execution()intervals 参数中再次声明它们:

sma_10 = pybroker.indicator("sma_10", sma_fn)
strategy.add_execution(
    fn, "SPY", indicators=sma_10.intervals("base", "weekly")
)
参数:

intervals -- 计算此指标所使用的一个或多个 TimeframeInterval,每一个都必须严格粗于回测数据的基础 K 线间隔,或使用字面量 'base' 表示基础时间框架。

返回:

将此指标绑定到 intervalsIntervalBoundIndicator

iqr(data: BarData | DataFrame) float[源代码]

使用 data 生成指标数据,并计算其 四分位距(IQR)

relative_entropy(data: BarData | DataFrame) float[源代码]

使用 data 生成指标数据,并计算其相对

class IndicatorSet[源代码]

基类:IndicatorsMixin

计算多个指标的数据。

__call__(df: DataFrame, parallel_indicators: bool = False) DataFrame[源代码]

计算指标数据。

参数:
  • df -- 输入数据的 pandas.DataFrame

  • parallel_indicators -- 如果为 True,指标数据会使用多个进程并行计算。如果为 False,则串行计算。默认为 False

返回:

包含计算出的指标数据的 pandas.DataFrame

add(indicators: Indicator | Iterable[Indicator], *args)[源代码]

添加指标。

clear()[源代码]

移除所有指标。

remove(indicators: Indicator | Iterable[Indicator], *args)[源代码]

移除指标。

class IndicatorsMixin[源代码]

基类:object

实现与指标相关功能的 Mixin。

compute_indicators(df: DataFrame, indicator_syms: Iterable[IndicatorSymbol], cache_date_fields: CacheDateFields | None, parallel_indicators: bool, interval_data: IntervalData | None = None, symbol_store: SymbolArrayStore | None = None, hyperparams: dict[str, Any] | None = None) dict[IndicatorSymbol, Series][源代码]

为给定的 pybroker.common.IndicatorSymbol 组合计算指标数据。

参数:
  • df -- 用于计算指标值的 pandas.DataFrame

  • indicator_syms -- 待计算指标的 pybroker.common.IndicatorSymbol 组合的 Iterable

  • cache_date_fields -- 用于为缓存数据生成键的日期字段。传入 None 可禁用缓存。

  • parallel_indicators -- 如果为 True,指标数据会使用多个进程并行计算。如果为 False,则为所有 pybroker.common.IndicatorSymbol 组合串行计算。

  • interval_data -- 可选的压缩区间数据。

  • symbol_store -- 可选的预先构建好的 pybroker.scope.SymbolArrayStore,用于避免从 df 重新构建各品种的数组。

  • hyperparams -- 为声明了超参数的指标提供可选的超参数覆盖值。在 pybroker.optimize.OptimizeMixin.optimize() 期间,结果会在内存中被记忆化(memoized)。

返回:

将每个 pybroker.common.IndicatorSymbol 组合映射到其计算出的指标值 pandas.Seriesdict

adx(name: str, lookback: int) Indicator[源代码]

平均动向指数(Average Directional Movement Index,ADX)。

参数:
  • name -- 指标名称。

  • lookback -- 回溯 K 线数量。

返回:

平均动向指数 Indicator

aroon_diff(name: str, lookback: int) Indicator[源代码]

Aroon 上升趋势指标减去 Aroon 下降趋势指标。

参数:
  • name -- 指标名称。

  • lookback -- 回溯 K 线数量。

返回:

Aroon 上升趋势指标减去 Aroon 下降趋势指标 Indicator

aroon_down(name: str, lookback: int) Indicator[源代码]

Aroon 下降趋势指标。

参数:
  • name -- 指标名称。

  • lookback -- 回溯 K 线数量。

返回:

Aroon 下降趋势指标 Indicator

aroon_up(name: str, lookback: int) Indicator[源代码]

Aroon 上升趋势指标。

参数:
  • name -- 指标名称。

  • lookback -- 回溯 K 线数量。

返回:

Aroon 上升趋势指标 Indicator

atr(name: str, lookback: int) Indicator[源代码]

平均真实波幅(Average True Range,ATR)。

参数:
  • name -- 指标名称。

  • lookback -- 回溯 K 线数量。

返回:

平均真实波幅 Indicator

close_minus_ma(name: str, lookback: int, atr_length: int, scale: float = 1.0) Indicator[源代码]

收盘价减去移动平均线(Close Minus Moving Average)。

参数:
  • name -- 指标名称。

  • lookback -- 回溯 K 线数量。

  • atr_length -- 用于平均真实波幅(ATR)归一化的回溯长度。

  • scale -- 大于 1.0 会使返回值被压缩得更多,小于 1.0 则压缩得更少。默认为 1.0

返回:

收盘价减去移动平均线 Indicator

cubic_deviation(name: str, field: str, lookback: int, scale: float = 0.6) Indicator[源代码]

相对三次趋势的偏离度(Deviation from Cubic Trend)。

参数:
  • name -- 指标名称。

  • field -- pybroker.common.BarData 字段名称。

  • lookback -- 回溯 K 线数量。

  • scale -- 大于 1.0 会使返回值被压缩得更多,小于 1.0 则压缩得更少。默认为 0.6

返回:

相对三次趋势的偏离度 Indicator

cubic_trend(name: str, field: str, lookback: int, atr_length: int, scale: float = 1.0) Indicator[源代码]

三次趋势强度(Cubic Trend Strength)。

参数:
  • name -- 指标名称。

  • field -- pybroker.common.BarData 字段名称。

  • lookback -- 回溯 K 线数量。

  • atr_length -- 用于平均真实波幅(ATR)归一化的回溯长度。

  • scale -- 大于 1.0 会使返回值被压缩得更多,小于 1.0 则压缩得更少。默认为 1.0

返回:

三次趋势强度 Indicator

delta_on_balance_volume(name: str, lookback: int, delta_length: int = 0, scale: float = 0.6) Indicator[源代码]

能量潮变化量(Delta On-Balance Volume)。

参数:
  • name -- 指标名称。

  • lookback -- 回溯 K 线数量。

  • delta_length -- 差分所使用的滞后期。

  • scale -- 大于 1.0 会使返回值被压缩得更多,小于 1.0 则压缩得更少。默认为 0.6

返回:

能量潮变化量 Indicator

detrended_rsi(name: str, field: str, short_length: int, long_length: int, reg_length: int) Indicator[源代码]

去趋势相对强弱指数(Detrended RSI)。

参数:
  • name -- 指标名称。

  • field -- pybroker.common.BarData 字段名称。

  • short_length -- 短期 RSI 的回溯长度。

  • long_length -- 长期 RSI 的回溯长度。

  • reg_length -- 用于线性回归的 K 线数量。

返回:

去趋势 RSI Indicator

highest(name: str, field: str, period: int) Indicator[源代码]

创建一个滚动最高价 Indicator

参数:
  • name -- 指标名称。

  • field -- 用于计算滚动最高价的 pybroker.common.BarData 字段。

  • period -- 回溯周期。

返回:

滚动最高价 Indicator

indicator(name: str, fn: Callable[[...], NDArray[float64]], **kwargs) Indicator[源代码]

创建一个 Indicator 实例,并以 name 全局注册。

参数:
  • name -- 用于全局引用该指标的名称。

  • fn -- 用于计算指标值序列的 Callable[[BarData, ...], NDArray[float]]

  • **kwargs -- 传递给 fn 的附加参数。

返回:

Indicator 实例。

intraday_intensity(name: str, lookback: int, smoothing: float = 0.0) Indicator[源代码]

日内强度(Intraday Intensity)。

参数:
  • name -- 指标名称。

  • lookback -- 回溯 K 线数量。

  • smoothing -- 平滑量;<= 1 表示不平滑。默认为 0

返回:

日内强度 Indicator

laguerre_rsi(name: str, fe_length: int = 13) Indicator[源代码]

拉盖尔相对强弱指数(Laguerre RSI)。

参数:
  • name -- 指标名称。

  • fe_length -- 分形能量(Fractal Energy)长度。默认为 13

返回:

拉盖尔 RSI Indicator

linear_deviation(name: str, field: str, lookback: int, scale: float = 0.6) Indicator[源代码]

相对线性趋势的偏离度(Deviation from Linear Trend)。

参数:
  • name -- 指标名称。

  • field -- pybroker.common.BarData 字段名称。

  • lookback -- 回溯 K 线数量。

  • scale -- 大于 1.0 会使返回值被压缩得更多,小于 1.0 则压缩得更少。默认为 0.6

返回:

相对线性趋势的偏离度 Indicator

linear_trend(name: str, field: str, lookback: int, atr_length: int, scale: float = 1.0) Indicator[源代码]

线性趋势强度(Linear Trend Strength)。

参数:
  • name -- 指标名称。

  • field -- pybroker.common.BarData 字段名称。

  • lookback -- 回溯 K 线数量。

  • atr_length -- 用于平均真实波幅(ATR)归一化的回溯长度。

  • scale -- 大于 1.0 会使返回值被压缩得更多,小于 1.0 则压缩得更少。默认为 1.0

返回:

线性趋势强度 Indicator

lowest(name: str, field: str, period: int) Indicator[源代码]

创建一个滚动最低价 Indicator

参数:
  • name -- 指标名称。

  • field -- 用于计算滚动最低价的 pybroker.common.BarData 字段。

  • period -- 回溯周期。

返回:

滚动最低价 Indicator

macd(name: str, short_length: int, long_length: int, smoothing: float = 0.0, scale: float = 1.0) Indicator[源代码]

指数平滑异同移动平均线(Moving Average Convergence Divergence,MACD)。

参数:
  • name -- 指标名称。

  • field -- pybroker.common.BarData 字段名称。

  • short_length -- 短期回溯长度。

  • long_length -- 长期回溯长度。

  • smoothing -- 计算 MACD 减去其平滑值(当参数 >= 2 时)。

  • scale -- 大于 1.0 会使返回值被压缩得更多,小于 1.0 则压缩得更少。默认为 1.0

返回:

指数平滑异同移动平均线 Indicator

money_flow(name: str, lookback: int, smoothing: float = 0.0) Indicator[源代码]

佳庆资金流量指标(Chaikin's Money Flow)。

参数:
  • name -- 指标名称。

  • lookback -- 回溯 K 线数量。

  • smoothing -- 平滑量;<= 1 表示不平滑。默认为 0

返回:

佳庆资金流量指标 Indicator

normalized_negative_volume_index(name: str, lookback: int, scale: float = 0.5) Indicator[源代码]

归一化负成交量指标(Normalized Negative Volume Index)。

参数:
  • name -- 指标名称。

  • lookback -- 回溯 K 线数量。

  • scale -- 大于 1.0 会使返回值被压缩得更多,小于 1.0 则压缩得更少。默认为 0.5

返回:

归一化负成交量指标 Indicator

normalized_on_balance_volume(name: str, lookback: int, scale: float = 0.6) Indicator[源代码]

归一化能量潮指标(Normalized On-Balance Volume)。

参数:
  • name -- 指标名称。

  • lookback -- 回溯 K 线数量。

  • scale -- 大于 1.0 会使返回值被压缩得更多,小于 1.0 则压缩得更少。默认为 0.6

返回:

归一化能量潮指标 Indicator

normalized_positive_volume_index(name: str, lookback: int, scale: float = 0.5) Indicator[源代码]

归一化正成交量指标(Normalized Positive Volume Index)。

参数:
  • name -- 指标名称。

  • lookback -- 回溯 K 线数量。

  • scale -- 大于 1.0 会使返回值被压缩得更多,小于 1.0 则压缩得更少。默认为 0.5

返回:

归一化正成交量指标 Indicator

price_change_oscillator(name: str, short_length: int, multiplier: int, scale: float = 4.0) Indicator[源代码]

价格变化振荡指标(Price Change Oscillator)。

参数:
  • name -- 指标名称。

  • short_length -- 短期回溯 K 线数量。

  • multiplier -- 用于计算长期回溯 K 线数量的乘数:长期回溯长度 = multiplier * short_length

  • scale -- 大于 1.0 会使返回值被压缩得更多,小于 1.0 则压缩得更少。默认为 4.0

返回:

价格变化振荡指标 Indicator

price_intensity(name: str, smoothing: float = 0.0, scale: float = 0.8) Indicator[源代码]

价格强度(Price Intensity)。

参数:
  • name -- 指标名称。

  • smoothing -- 平滑量。默认为 0

  • scale -- 大于 1.0 会使返回值被压缩得更多,小于 1.0 则压缩得更少。默认为 0.8

返回:

价格强度 Indicator

price_volume_fit(name: str, lookback: int, scale: float = 9.0) Indicator[源代码]

价量拟合指标(Price Volume Fit)。

参数:
  • name -- 指标名称。

  • lookback -- 回溯 K 线数量。

  • scale -- 大于 1.0 会使返回值被压缩得更多,小于 1.0 则压缩得更少。默认为 9.0

返回:

价量拟合指标 Indicator

quadratic_deviation(name: str, field: str, lookback: int, scale: float = 0.6) Indicator[源代码]

相对二次趋势的偏离度(Deviation from Quadratic Trend)。

参数:
  • name -- 指标名称。

  • field -- pybroker.common.BarData 字段名称。

  • lookback -- 回溯 K 线数量。

  • scale -- 大于 1.0 会使返回值被压缩得更多,小于 1.0 则压缩得更少。默认为 0.6

返回:

相对二次趋势的偏离度 Indicator

quadratic_trend(name: str, field: str, lookback: int, atr_length: int, scale: float = 1.0) Indicator[源代码]

二次趋势强度(Quadratic Trend Strength)。

参数:
  • name -- 指标名称。

  • field -- pybroker.common.BarData 字段名称。

  • lookback -- 回溯 K 线数量。

  • atr_length -- 用于平均真实波幅(ATR)归一化的回溯长度。

  • scale -- 大于 1.0 会使返回值被压缩得更多,小于 1.0 则压缩得更少。默认为 1.0

返回:

二次趋势强度 Indicator

reactivity(name: str, lookback: int, smoothing: float = 1.0, scale: float = 0.6) Indicator[源代码]

反应性指标(Reactivity)。

参数:
  • name -- 指标名称。

  • lookback -- 回溯 K 线数量。

  • smoothing -- 平滑乘数。

  • scale -- 大于 1.0 会使返回值被压缩得更多,小于 1.0 则压缩得更少。默认为 0.6

返回:

反应性指标 Indicator

returns(name: str, field: str, period: int = 1, use_log: bool = False) Indicator[源代码]

创建一个滚动收益率 Indicator

参数:
  • name -- 指标名称。

  • field -- 用于计算滚动收益率的 pybroker.common.BarData 字段。

  • period -- 收益率计算周期。默认为 1。

  • use_log -- 是否计算对数收益率,而非算术收益率。默认为 False

返回:

滚动收益率 Indicator

stochastic(name: str, lookback: int, smoothing: int = 0) Indicator[源代码]

随机指标(Stochastic,KD)。

参数:
  • name -- 指标名称。

  • lookback -- 回溯 K 线数量。

  • smoothing -- 原始随机值被平滑的次数,为 0、1 或 2 次。默认为 0

返回:

随机指标 Indicator

stochastic_rsi(name: str, field: str, rsi_lookback: int, sto_lookback: int, smoothing: float = 0.0) Indicator[源代码]

随机相对强弱指数(Stochastic RSI)。

参数:
  • name -- 指标名称。

  • field -- pybroker.common.BarData 字段名称。

  • rsi_lookback -- RSI 计算的回溯长度。

  • sto_lookback -- 随机指标(Stochastic)计算的回溯长度。

  • smoothing -- 平滑量;<= 1 表示不平滑。默认为 0

返回:

随机 RSI Indicator

volume_momentum(name: str, short_length: int, multiplier: int = 2, scale: float = 3.0) Indicator[源代码]

成交量动量(Volume Momentum)。

参数:
  • name -- 指标名称。

  • short_length -- 短期回溯 K 线数量。

  • multiplier -- 回溯乘数。默认为 2

  • scale -- 大于 1.0 会使返回值被压缩得更多,小于 1.0 则压缩得更少。默认为 3.0

返回:

成交量动量 Indicator

volume_weighted_ma_ratio(name: str, lookback: int, scale: float = 1.0) Indicator[源代码]

成交量加权移动平均比率(Volume-Weighted Moving Average Ratio)。

参数:
  • name -- 指标名称。

  • lookback -- 回溯 K 线数量。

  • scale -- 大于 1.0 会使返回值被压缩得更多,小于 1.0 则压缩得更少。默认为 1.0

返回:

成交量加权移动平均比率 Indicator