pyeventbt
PyEventBT 是一个机构级的事件驱动回测与实盘交易框架,基于 Python 构建,原生对接 MetaTrader 5 平台。
框架提供了完整的 MT5 API 模拟层,使回测与实盘之间可以无缝切换,让交易者能够轻松开发多规则、多周期、多品种的交易策略。
无论你是构建简单的均线交叉策略,还是复杂的多规则、多周期策略,PyEventBT 都能为你提供开发、测试和部署所需的全部工具。
其模块化架构允许你将信号源、仓位管理逻辑和风控层设计为独立且可互换的组件。
为什么选择 PyEventBT?
如果你希望用 Python 连接 MetaTrader 5 进行算法交易,PyEventBT 为你提供了一套完整的事件驱动回测与实盘交易框架,无需编写任何 MQL5 代码。
它的核心设计理念是 一套代码,两种模式:框架提供了完整的 MT5 API 模拟,因此你在回测中使用的策略代码无需修改即可直接用于实盘交易。这从根本上消除了回测与实盘表现不一致的常见问题,让你可以专注于策略逻辑,而非基础设施。
- 原生 MT5 集成 — 将 Python 连接至 MetaTrader 5,实现实时订单执行、仓位管理和实时数据获取
- 真实回测 — 事件驱动处理确保策略只看到当前时刻可用的数据,从设计上杜绝了前视偏差
- 模块化引擎 — 信号生成、仓位管理和风控逻辑均可作为独立且可互换的组件自由插拔
- 全面多维度 — 在单个策略中同时处理多个时间周期、多个品种和多个交易规则
- Python 生态 — 基于 Polars、NumPy 和 Pandas 构建,可在策略中使用任何 Python 库
核心概念
PyEventBT 通过事件管道处理市场数据。你只需编写信号逻辑——框架负责处理其余一切:
BarEvent → 你的策略 → SignalEvent → 仓位引擎 → 风控引擎 → OrderEvent → 执行引擎 → FillEvent → 投资组合
| 组件 | 功能说明 |
|---|---|
| 信号引擎(Signal Engine) | 你的策略逻辑——接收市场数据,返回交易信号 |
| 仓位引擎(Sizing Engine) | 计算仓位大小(最小手数、固定手数或基于风险百分比) |
| 风控引擎(Risk Engine) | 在订单执行前,根据风控规则验证订单有效性 |
| 执行引擎(Execution Engine) | 将订单路由至模拟经纪商(回测)或 MT5(实盘) |
| 投资组合(Portfolio) | 跟踪持仓、余额、权益和盈亏 |
| 数据提供者(Data Provider) | 提供历史K线数据(CSV)或实时数据(MT5) |
安装
pip install pyeventbt
快速开始
以下为简要指南。完整文档请访问 pyeventbt.com。
1. 定义你的策略
使用 @strategy.custom_signal_engine 装饰器来创建策略。
from pyeventbt import (
Strategy,
BarEvent,
SignalEvent,
Modules,
StrategyTimeframes,
PassthroughRiskConfig,
MinSizingConfig
)
from pyeventbt.events.events import OrderType, SignalType
from pyeventbt.strategy.core.account_currencies import AccountCurrencies
from pyeventbt.indicators import SMA
from datetime import datetime
from decimal import Decimal
import logging
logger = logging.getLogger("pyeventbt")
# 策略配置
strategy_id = "123456"
strategy = Strategy(logging_level=logging.INFO)
# 时间周期
signal_timeframe = StrategyTimeframes.ONE_DAY
strategy_timeframes = [signal_timeframe]
# 交易配置
symbols_to_trade = ['EURUSD']
starting_capital = 100000
# 策略参数
fast_ma_period = 10
slow_ma_period = 30
@strategy.custom_signal_engine(strategy_id=strategy_id, strategy_timeframes=strategy_timeframes)
def ma_crossover_strategy(event: BarEvent, modules: Modules):
"""
均线优势策略:
- 快线在慢线之上时持有多头
- 快线在慢线之下时持有空头
- 两线相等时平仓(或保持当前仓位)
- 始终最多持有一个未平仓仓位
"""
if event.timeframe != signal_timeframe:
return
symbol = event.symbol
signal_events = []
# 获取计算均线所需的K线数据
bars_needed = slow_ma_period + 10
bars = modules.DATA_PROVIDER.get_latest_bars(symbol, signal_timeframe, bars_needed)
if bars is None or bars.height < bars_needed:
return
# 计算移动平均线
close_prices = bars.select('close').to_numpy().flatten()
fast_ma_values = SMA.compute(close_prices, fast_ma_period)
slow_ma_values = SMA.compute(close_prices, slow_ma_period)
current_fast_ma = fast_ma_values[-1]
current_slow_ma = slow_ma_values[-1]
# 确定目标持仓状态
if current_fast_ma > current_slow_ma:
desired_position = "LONG"
elif current_fast_ma < current_slow_ma:
desired_position = "SHORT"
else:
return
# 检查当前持仓(在当前K线时刻——无前视偏差)
open_positions = modules.PORTFOLIO.get_number_of_strategy_open_positions_by_symbol(symbol)
signal_type = None
# 信号生成
if open_positions['LONG'] == 0 and desired_position == "LONG":
if open_positions['SHORT'] > 0:
modules.EXECUTION_ENGINE.close_strategy_short_positions_by_symbol(symbol)
signal_type = SignalType.BUY
if open_positions['SHORT'] == 0 and desired_position == "SHORT":
if open_positions['LONG'] > 0:
modules.EXECUTION_ENGINE.close_strategy_long_positions_by_symbol(symbol)
signal_type = SignalType.SELL
if signal_type == None:
return
# 信号生成时间(针对下一根K线)
if modules.TRADING_CONTEXT == "BACKTEST":
time_generated = event.datetime + signal_timeframe.to_timedelta()
else:
time_generated = datetime.now()
last_tick = modules.DATA_PROVIDER.get_latest_tick(symbol)
# 根据目标持仓生成信号
signal_events.append(SignalEvent(
symbol=symbol,
time_generated=time_generated,
strategy_id=strategy_id,
signal_type=signal_type,
order_type=OrderType.MARKET,
order_price=last_tick['ask'] if signal_type == SignalType.BUY else last_tick['bid'],
sl=Decimal(str(0.0)),
tp=Decimal(str(0.0)),
))
return signal_events
2. 配置并运行回测
# 配置策略
strategy.configure_predefined_sizing_engine(MinSizingConfig())
strategy.configure_predefined_risk_engine(PassthroughRiskConfig())
# 回测配置
from_date = datetime(year=2020, month=1, day=1)
to_date = datetime(year=2023, month=12, day=1)
# csv_dir = './data' # 替换为你自己的 CSV 数据路径
csv_dir = None # 如果没有 CSV 数据,可以设置为 None
# 启动回测
backtest = strategy.backtest(
strategy_id=strategy_id,
initial_capital=starting_capital,
symbols_to_trade=symbols_to_trade,
csv_dir=csv_dir,
backtest_name=strategy_id,
start_date=from_date,
end_date=to_date,
export_backtest_parquet=False,
account_currency=AccountCurrencies.USD
)
backtest.plot()
示例策略
以下是一个完整的布林带突破策略示例:
from pyeventbt import (
Strategy,
BarEvent,
SignalEvent,
Modules,
StrategyTimeframes,
PassthroughRiskConfig,
MinSizingConfig
)
from pyeventbt.events.events import OrderType, SignalType
from pyeventbt.indicators.indicators import BollingerBands
from pyeventbt.strategy.core.account_currencies import AccountCurrencies
from datetime import datetime, time
from decimal import Decimal
import logging
import numpy as np
logger = logging.getLogger("pyeventbt")
# 策略配置
strategy_id = "1234"
strategy = Strategy(logging_level=logging.INFO)
# 时间周期
signal_timeframe = StrategyTimeframes.ONE_HOUR
daily_timeframe = StrategyTimeframes.ONE_DAY
strategy_timeframes = [signal_timeframe, daily_timeframe]
# 交易配置
symbols_to_trade = ['EURUSD']
starting_capital = 100000
# 策略参数
bb_period = 20
bb_std_dev = 2.5
close_hour = 21
close_minute = 0
order_placement_hour = 8
order_placement_minute = 0
# 每日追踪
orders_placed_today: dict[str, bool] = {symbol: False for symbol in symbols_to_trade}
current_trading_date: dict[str, datetime|None] = {symbol: None for symbol in symbols_to_trade}
@strategy.custom_signal_engine(strategy_id=strategy_id, strategy_timeframes=strategy_timeframes)
def bbands_breakout(event: BarEvent, modules: Modules):
"""
布林带突破策略:
- 突破位:布林带上轨和下轨
- 退出:21:00 全部平仓
"""
symbol = event.symbol
signal_events = []
# 获取当前时间和日期
current_time = event.datetime.time()
current_date = event.datetime.date()
# 新交易日重置每日追踪
if current_trading_date[symbol] != current_date:
current_trading_date[symbol] = current_date
orders_placed_today[symbol] = False
# 获取持仓和挂单
open_positions = modules.PORTFOLIO.get_number_of_strategy_open_positions_by_symbol(symbol)
pending_orders = modules.PORTFOLIO.get_number_of_strategy_pending_orders_by_symbol(symbol)
# 在收盘时间平仓并取消挂单
if current_time >= time(close_hour, close_minute):
if open_positions['TOTAL'] > 0:
logger.info(f"{event.datetime} - 正在平仓 {symbol} 的所有持仓")
modules.EXECUTION_ENGINE.close_all_strategy_positions()
if pending_orders['TOTAL'] > 0:
logger.info(f"{event.datetime} - 正在取消 {symbol} 的所有挂单")
modules.EXECUTION_ENGINE.cancel_all_strategy_pending_orders()
return
# 在下单时间放置订单
if (current_time >= time(order_placement_hour, order_placement_minute) and
not orders_placed_today[symbol] and
pending_orders['TOTAL'] == 0 and
event.timeframe == signal_timeframe):
# 获取计算布林带所需的K线数据
bars_needed = bb_period + 10
indicator_bars = modules.DATA_PROVIDER.get_latest_bars(symbol, signal_timeframe, bars_needed)
if indicator_bars is None or indicator_bars.height < bars_needed:
return
# 计算布林带
close = indicator_bars.select('close').to_numpy().flatten()
upper, middle, lower = BollingerBands.compute(close, bb_period, bb_std_dev)
current_upper = upper[-1]
current_lower = lower[-1]
if np.isnan(current_upper) or np.isnan(current_lower):
return
upper_breakout = Decimal(str(current_upper))
lower_breakout = Decimal(str(current_lower))
# 信号生成时间
if modules.TRADING_CONTEXT == "BACKTEST":
time_generated = event.datetime + signal_timeframe.to_timedelta()
else:
time_generated = datetime.now()
# 放置 BUY STOP 订单
signal_events.append(SignalEvent(
symbol=symbol,
time_generated=time_generated,
strategy_id=strategy_id,
signal_type=SignalType.BUY,
order_type=OrderType.STOP,
order_price=upper_breakout,
sl=Decimal(str(0.0)),
tp=Decimal(str(0.0)),
))
# 放置 SELL STOP 订单
signal_events.append(SignalEvent(
symbol=symbol,
time_generated=time_generated,
strategy_id=strategy_id,
signal_type=SignalType.SELL,
order_type=OrderType.STOP,
order_price=lower_breakout,
sl=Decimal(str(0.0)),
tp=Decimal(str(0.0)),
))
orders_placed_today[symbol] = True
return signal_events
# 配置策略
strategy.configure_predefined_sizing_engine(MinSizingConfig())
strategy.configure_predefined_risk_engine(PassthroughRiskConfig())
# 回测配置
from_date = datetime(year=2020, month=1, day=1)
to_date = datetime(year=2023, month=12, day=1)
# csv_dir = '/Users/marticastany/Desktop/long_data' # 替换为你自己的 CSV 数据路径
csv_dir = None # 如果没有 CSV 数据,可以设置为 None
# 启动回测
backtest = strategy.backtest(
strategy_id=strategy_id,
initial_capital=starting_capital,
symbols_to_trade=symbols_to_trade,
csv_dir=csv_dir,
backtest_name=strategy_id,
start_date=from_date,
end_date=to_date,
export_backtest_csv=True,
export_backtest_parquet=False,
account_currency=AccountCurrencies.USD
)
print("回测完成")
backtest.plot()
框架对比
Python 生态中有多个优秀的回测框架,各有侧重。以下是它们的区别:
| PyEventBT | Backtrader | Zipline | VectorBT | |
|---|---|---|---|---|
| 架构 | 事件驱动 | 事件驱动 | 事件驱动 | 向量化 |
| MetaTrader 5 集成 | 原生支持 | — | — | — |
| 实盘交易 | 支持(通过 MT5) | 社区经纪商 | — | — |
| 回测与实盘同代码 | 支持(完整 MT5 API 模拟) | 部分支持 | — | — |
| 语言 | 仅 Python | 仅 Python | 仅 Python | 仅 Python |
| 前视偏差防护 | 设计层面杜绝 | 设计层面杜绝 | 设计层面杜绝 | 需手动处理 |
| 多周期 | 支持 | 支持 | 有限 | 支持 |
| 挂单(限价/止损) | 支持 | 支持 | 有限 | — |
何时选择 PyEventBT:你使用 MetaTrader 5 进行交易,并希望完全用 Python 开发、回测和部署策略——在回测和生产环境中使用相同的代码和相同的 MT5 API,无需编写任何 MQL5。
何时选择其他框架:如果你不使用 MetaTrader 5 作为经纪商,或者需要向量化回测来进行高频逐笔级别的研究,其他框架可能更加适合。
文档
完整文档请访问 pyeventbt.com。
文档内容包括:
- 完整的 API 参考
- 详细的示例和教程
- 导入模式与最佳实践
- 高级配置选项
- 实盘交易设置指南
面向 LLM 友好的文档,请参阅 llms.txt 和 llms-full.txt。
功能特性
- 事件驱动架构,实现真实回测
- 内置技术指标(ATR、SMA、RSI 等),并集成 pandas-ta-classic(284 种指标)
- 回测到实盘无缝切换
- 全面的绩效指标与可视化
- 灵活的风控与仓位管理引擎
- MetaTrader 5 集成,支持实盘交易
技术指标参考
PyEventBT 集成了 pandas-ta-classic,共提供 284 种技术指标(224 个类别指标 + 62 种蜡烛图形态,其中 cdl_doji 和 cdl_inside 同时计入两者),按以下分类组织:
| 类别 | 数量 | 说明 |
|---|---|---|
| Candles(蜡烛图) | 5 + 62 | 蜡烛图形态识别,62 种形态全部为原生 Python 实现 |
| Cycles(周期) | 8 | 周期分析与希尔伯特变换指标 |
| Momentum(动量) | 53 | 动量与振荡器指标 |
| Overlap(重叠) | 46 | 移动平均线与趋势跟踪指标 |
| Performance(绩效) | 3 | 绩效与收益指标 |
| Statistics(统计) | 14 | 统计分析函数 |
| Trend(趋势) | 26 | 趋势识别与方向指标 |
| Volatility(波动率) | 18 | 波动率与区间指标 |
| Volume(成交量) | 20 | 成交量分析指标 |
| Math(数学) | 31 | 逐元素数学运算与变换 |
Candles — 蜡烛图(5 个包装器 + 62 种原生形态)
所有 62 种 CDL 形态均为原生 Python 实现,无需 TA-Lib。
# 一次性计算全部 62 种形态
df = df.ta.cdl_pattern(name="all")
# 计算单个形态
df = df.ta.cdl_pattern(name="engulfing")
# 计算多个形态
df = df.ta.cdl_pattern(name=["hammer", "morningstar", "engulfing"])
# 专用访问器方法
result = df.ta.cdl_doji()
result = df.ta.cdl_inside()
可用形态: 2crows, 3blackcrows, 3inside, 3linestrike, 3outside, 3starsinsouth, 3whitesoldiers, abandonedbaby, advanceblock, belthold, breakaway, closingmarubozu, concealbabyswall, counterattack, darkcloudcover, doji, dojistar, dragonflydoji, engulfing, eveningdojistar, eveningstar, gapsidesidewhite, gravestonedoji, hammer, hangingman, harami, haramicross, highwave, hikkake, hikkakemod, homingpigeon, identical3crows, inside, inneck, invertedhammer, kicking, kickingbylength, ladderbottom, longleggeddoji, longline, marubozu, matchinglow, mathold, morningdojistar, morningstar, onneck, piercing, rickshawman, risefall3methods, separatinglines, shootingstar, shortline, spinningtop, stalledpattern, sticksandwich, takuri, tasukigap, thrusting, tristar, unique3river, upsidegap2crows, xsidegap3methods
其他蜡烛图指标: cdl_pattern(统一形态调度器)、cdl_doji(十字星专用)、cdl_inside(内包线专用)、ha(Heikin-Ashi 蜡烛图)、cdl_z(Z-score 标准化)
Cycles — 周期(8)
| 指标 | 函数 | 说明 |
|---|---|---|
| 去趋势合成价格 | dsp |
Detrended Synthetic Price |
| 更优正弦波 | ebsw |
Even Better Sinewave |
| HT 主导周期 | ht_dcperiod |
Hilbert Transform — Dominant Cycle Period |
| HT 主导周期相位 | ht_dcphase |
Hilbert Transform — Dominant Cycle Phase |
| HT 相量分量 | ht_phasor |
Hilbert Transform — Phasor Components |
| HT 正弦波 | ht_sine |
Hilbert Transform — SineWave |
| HT 趋势/周期模式 | ht_trendmode |
Hilbert Transform — Trend vs Cycle Mode |
| MESA 正弦波 | msw |
Mesa Sine Wave |
Momentum — 动量(53)
| 指标 | 函数 | 说明 |
|---|---|---|
| 动量 | mom |
Momentum |
| 变化率 | roc |
Rate of Change |
| 变化率百分比 | rocp |
Rate of Change Percentage |
| 变化率比率 | rocr |
Rate of Change Ratio |
| 相对强弱指数 | rsi |
Relative Strength Index |
| 相对强度 Xtra | rsx |
Relative Strength Xtra |
| 随机振荡器 | stoch |
Stochastic Oscillator |
| 快速随机 | stochf |
Stochastic Fast |
| 随机 RSI | stochrsi |
Stochastic RSI |
| 威廉 %R | willr |
Williams %R |
| 商品通道指数 | cci |
Commodity Channel Index |
| 资金流量指数 | mfi |
Money Flow Index |
| MACD | macd |
Moving Average Convergence Divergence |
| MACD 扩展 | macdext |
MACD Extended(可控 MA 类型) |
| MACD 固定 | macdfix |
MACD Fixed(12/26 固定周期) |
| 成交量加权 MACD | vwmacd |
Volume Weighted MACD |
| 绝对价格振荡器 | apo |
Absolute Price Oscillator |
| 百分比价格振荡器 | ppo |
Percentage Price Oscillator |
| 百分比成交量振荡器 | pvo |
Percentage Volume Oscillator |
| 偏差 | bias |
Bias |
| KST 振荡器 | kst |
KST Oscillator |
| Trix | trix |
Trix |
| Trix 直方图 | trixh |
TRIX Histogram |
| 真实强度指数 | tsi |
True Strength Index |
| 终极振荡器 | uo |
Ultimate Oscillator |
| 钱德动量振荡器 | cmo |
Chande Momentum Oscillator |
| Coppock 曲线 | coppock |
Coppock Curve |
| 费雪变换 | fisher |
Fisher Transform |
| 惯性 | inertia |
Inertia |
| KDJ | kdj |
KDJ |
| 线性回归 RSI | lrsi |
Linear Regression RSI |
| QQE | qqe |
Quantitative Qualitative Estimation |
| 挤压指标 | squeeze |
Squeeze(John Carter's / Lazybear's) |
| 挤压 Pro | squeeze_pro |
Squeeze Pro |
| Schaff 趋势周期 | stc |
Schaff Trend Cycle |
| Awesome 振荡器 | ao |
Awesome Oscillator |
| 买卖力平衡 | bop |
Balance of Power |
| BRAR | brar |
BRAR |
| 钱德预测振荡器 | cfo |
Chande Forecast Oscillator |
| 重心 | cg |
Center of Gravity |
| 相关性趋势指标 | cti |
Correlation Trend Indicator |
| 方向运动 | dm |
Directional Movement |
| 效率比率 | er |
Efficiency Ratio |
| 艾尔德射线 | eri |
Elder Ray Index |
| 预测振荡器 | fosc |
Forecast Oscillator |
| 漂亮好振荡器 | pgo |
Pretty Good Oscillator |
| 投影振荡器 | po |
Projection Oscillator |
| 心理线 | psl |
Psychological Line |
| 相对活力指数 | rvgi |
Relative Vigor Index |
| 斜率 | slope |
Slope |
| SMC 流动性扫荡 | smc_sweep |
Smart Money Concept Liquidity Sweep |
| SMI 遍历 | smi |
SMI Ergodic |
| TD 序列 | td_seq |
TD Sequential |
Overlap — 重叠(46)
| 指标 | 函数 | 说明 |
|---|---|---|
| 简单移动平均 | sma |
Simple Moving Average |
| 指数移动平均 | ema |
Exponential Moving Average |
| 双指数移动平均 | dema |
Double Exponential Moving Average |
| 三指数移动平均 | tema |
Triple Exponential Moving Average |
| T3 移动平均 | t3 |
T3 Moving Average |
| 三角移动平均 | trima |
Triangular Moving Average |
| 加权移动平均 | wma |
Weighted Moving Average |
| 成交量加权移动平均 | vwma |
Volume Weighted Moving Average |
| 成交量加权均价 | vwap |
Volume Weighted Average Price |
| Hull 移动平均 | hma |
Hull Exponential Moving Average |
| 零滞后移动平均 | zlma |
Zero Lag Moving Average |
| 正弦加权移动平均 | sinwma |
Sine Weighted Moving Average |
| 对称加权移动平均 | swma |
Symmetric Weighted Moving Average |
| 斐波那契加权移动平均 | fwma |
Fibonacci's Weighted Moving Average |
| 帕斯卡加权移动平均 | pwma |
Pascal's Weighted Moving Average |
| Kaufman 自适应均线 | kama |
Kaufman's Adaptive Moving Average |
| 可变指数动态均线 | vidya |
Variable Index Dynamic Average |
| Wilder 移动平均 | rma |
WildeR's Moving Average |
| Jurik 移动平均 | jma |
Jurik Moving Average |
| ALMA | alma |
Arnaud Legoux Moving Average |
| MAMA | mama |
MESA Adaptive Moving Average |
| MAVP | mavp |
Moving Average with Variable Period |
| McGinley 动态 | mcgd |
McGinley Dynamic |
| 超级趋势 | supertrend |
Supertrend |
| 通用移动平均 | ma |
Generic Moving Average Selector |
| Holt-Winter 移动平均 | hwma |
Holt-Winter Moving Average |
| 超级平滑滤波器 | ssf |
Ehler's Super Smoother Filter |
| 彩虹移动平均 | rainbow |
Rainbow Moving Average |
| 马德里均线带 | mmar |
Madrid Moving Average Ribbon |
| 一目均衡表 | ichimoku |
Ichimoku Kinkō Hyō |
| HT 瞬时趋势线 | ht_trendline |
Hilbert Transform Instantaneous Trendline |
| 甘氏高低激活器 | hilo |
Gann High-Low Activator |
| 时间序列预测 | tsf |
Time Series Forecast |
| 线性回归 | linreg |
Linear Regression |
| 线性回归角度 | linregangle |
Linear Regression Angle |
| 线性回归截距 | linregintercept |
Linear Regression Intercept |
| 线性回归斜率 | linregslope |
Linear Regression Slope |
| 平均价格 | avgprice |
Average Price (OHLC/4) |
| 中位价格 | medprice |
Median Price (H+L)/2 |
| 典型价格 | typprice |
Typical Price (H+L+C)/3 |
| 加权收盘价 | wcp |
Weighted Closing Price |
| 高低平均 | hl2 |
High-Low Average |
| 高低收平均 | hlc3 |
High-Low-Close Average |
| 开高低收平均 | ohlc4 |
Open-High-Low-Close Average |
| 中点 | midpoint |
Midpoint |
| 中间价 | midprice |
Midprice |
Performance — 绩效(3)
| 指标 | 函数 | 说明 |
|---|---|---|
| 回撤 | drawdown |
Draw Down |
| 对数收益 | log_return |
Log Return |
| 百分比收益 | percent_return |
Percent Return |
Statistics — 统计(14)
| 指标 | 函数 | 说明 |
|---|---|---|
| 标准差 | stdev |
Standard Deviation |
| 方差 | variance |
Variance |
| 标准误差 | stderr |
Standard Error |
| 平均绝对偏差 | mad |
Mean Absolute Deviation |
| 均值偏差 | md |
Mean Deviation |
| 中位数 | median |
Median |
| 分位数 | quantile |
Quantile |
| 偏度 | skew |
Skew |
| 峰度 | kurtosis |
Kurtosis |
| Z 分数 | zscore |
Z Score |
| 熵 | entropy |
Entropy |
| Beta | beta |
Beta(相对基准波动率) |
| 皮尔逊相关系数 | correl |
Pearson Correlation Coefficient |
| TOS 标准差 | tos_stdevall |
Think or Swim Standard Deviation All |
Trend — 趋势(26)
| 指标 | 函数 | 说明 |
|---|---|---|
| ADX | adx |
Average Directional Movement Index |
| ADXR | adxr |
ADX Rating |
| 方向指数 | dx |
Directional Index |
| 正向运动 | plus_dm |
Plus Directional Movement |
| 负向运动 | minus_dm |
Minus Directional Movement |
| Aroon | aroon |
Aroon & Aroon Oscillator |
| PSAR | psar |
Parabolic Stop and Reverse |
| PSAR 扩展 | sarext |
Parabolic SAR Extended |
| 去趋势价格振荡器 | dpo |
Detrended Price Oscillator |
| 波动指数 | chop |
Choppiness Index |
| 垂直水平过滤器 | vhf |
Vertical Horizontal Filter |
| 漩涡指标 | vortex |
Vortex |
| Q Stick | qstick |
Q Stick |
| 趋势信号 | tsignals |
Trend Signals |
| 交叉信号 | xsignals |
Cross Signals |
| AMAT | amat |
Archer Moving Averages Trends |
| 衰减 | decay |
Decay(线性衰减) |
| 指数衰减 | edecay |
Exponential Decay |
| 递增 | increasing |
Increasing |
| 递减 | decreasing |
Decreasing |
| 长跑 | long_run |
Long Run |
| 短跑 | short_run |
Short Run |
| 价格最大 | pmax |
Price Max |
| TTM 趋势 | ttm_trend |
TTM Trend |
| 中枢位范围 | cpr |
Central Pivot Range(4 种方法) |
| 钱德 Kroll 止损 | cksp |
Chande Kroll Stop |
Volatility — 波动率(18)
| 指标 | 函数 | 说明 |
|---|---|---|
| 平均真实波幅 | atr |
Average True Range |
| 标准化 ATR | natr |
Normalized Average True Range |
| 真实波幅 | true_range |
True Range |
| 布林带 | bbands |
Bollinger Bands |
| 肯特纳通道 | kc |
Keltner Channel |
| 唐奇安通道 | donchian |
Donchian Channel |
| 加速带 | accbands |
Acceleration Bands |
| Holt-Winter 通道 | hwc |
Holt-Winter Channel |
| 吊灯止损 | ce |
Chandelier Exit |
| 历史波动率 | hvol |
Historical Volatility(年化) |
| 年化波动率 | avolume |
Annualised Volatility |
| 相对波动率指数 | rvi |
Relative Volatility Index |
| 质量指数 | massi |
Mass Index |
| Chaikin 波动率 | cvi |
Chaikins Volatility |
| 价格距离 | pdist |
Price Distance |
| 艾尔德温度计 | thermo |
Elder's Thermometer |
| 溃疡指数 | ui |
Ulcer Index |
| 偏差 | aberration |
Aberration |
Volume — 成交量(20)
| 指标 | 函数 | 说明 |
|---|---|---|
| OBV | obv |
On-Balance Volume |
| AOBV | aobv |
Archer On-Balance Volume |
| 累积/派发线 | ad |
Accumulation/Distribution Index |
| 累积/派发振荡器 | adosc |
Accumulation/Distribution Oscillator |
| Chaikin 资金流 | cmf |
Chaikin Money Flow |
| 艾尔德力度指数 | efi |
Elder's Force Index |
| 易动性 | eom |
Ease of Movement |
| EMV | emv |
Ease of Movement (EMV) |
| Klinger 成交量振荡器 | kvo |
Klinger Volume Oscillator |
| 市场便利指数 | marketfi |
Market Facilitation Index |
| 负成交量指数 | nvi |
Negative Volume Index |
| 正成交量指数 | pvi |
Positive Volume Index |
| 价格成交量 | pvol |
Price-Volume |
| 价格成交量排名 | pvr |
Price Volume Rank |
| 价格成交量趋势 | pvt |
Price Volume Trend |
| 成交量流指标 | vfi |
Volume Flow Indicator |
| 成交量振荡器 | vosc |
Volume Oscillator |
| 成交量分布 | vp |
Volume Profile |
| Williams 累积/派发 | wad |
Williams Accumulation/Distribution |
Math — 数学(31)
| 指标 | 函数 | 说明 |
|---|---|---|
| 加法 | add |
两序列逐元素相加 |
| 减法 | sub |
两序列逐元素相减 |
| 乘法 | mult |
两序列逐元素相乘 |
| 除法 | div |
两序列逐元素相除 |
| 滚动最大值 | rolling_max / max |
滚动窗口最大值 |
| 滚动最小值 | rolling_min / min |
滚动窗口最小值 |
| 滚动求和 | rolling_sum / sum |
滚动窗口求和 |
| 最大索引 | maxindex |
滚动最大值索引 |
| 最小索引 | minindex |
滚动最小值索引 |
| 最小最大值 | minmax |
滚动最小值和最大值 |
| 最小最大索引 | minmaxindex |
滚动最小值/最大值索引 |
| 正弦 | sin |
Sine |
| 余弦 | cos |
Cosine |
| 正切 | tan |
Tangent |
| 反正弦 | asin |
Inverse Sine |
| 反余弦 | acos |
Inverse Cosine |
| 反正切 | atan |
Inverse Tangent |
| 双曲正弦 | sinh |
Hyperbolic Sine |
| 双曲余弦 | cosh |
Hyperbolic Cosine |
| 双曲正切 | tanh |
Hyperbolic Tangent |
| 指数 | exp |
Exponential |
| 自然对数 | ln |
Natural Logarithm |
| 以10为底对数 | log10 |
Logarithm Base 10 |
| 平方根 | sqrt |
Square Root |
| 上取整 | ceil |
Ceiling |
| 下取整 | floor |
Floor |
| 绝对值 | npabs |
Absolute Value |
| 四舍五入 | npround |
Round |
| 截断 | trunc |
Truncate |
| 转角度 | todeg |
弧度转角度 |
| 转弧度 | torad |
角度转弧度 |
使用方式
在策略中通过 TaIndicator 直接调用任意指标:
from pyeventbt.indicators import TaIndicator
ta = TaIndicator(bars)
# 趋势指标
ta.sma(length=50)
ta.ema(length=20)
ta.macd()
ta.supertrend(length=7, multiplier=3)
ta.adx(length=14)
# 波动率指标
ta.atr(length=14)
ta.bbands(length=20, std=2)
ta.kc(length=20)
# 动量指标
ta.rsi(length=14)
ta.stoch()
ta.cci(length=20)
ta.willr(length=14)
# 蜡烛图形态
ta.cdl_pattern(name="engulfing")
ta.cdl_doji()
ta.ha()
# 成交量指标
ta.obv()
ta.mfi(length=14)
# 读取指标值
current_rsi = ta.last('RSI_14')
current_sma = ta.last('SMA_50')
许可证
Apache 2.0
作者
由 Martí Castany 为社区倾心打造 ❤️