PyBroker:为机器学习而生的量化回测框架

代码 | https://github.com/edtechre/pybroker

文档 | https://www.pybroker.com

PyBroker是一个开源Python框架,设计时考虑了机器学习,并支持使用您最喜欢的机器学习框架训练机器学习模型。PyBroker旨在帮助开发者开发算法交易策略,特别是基于机器学习的策略。使用PyBroker可以轻松创建和微调交易策略,并构建强大的机器学习模型来实现更好的交易绩效。

特性

  • 基于NumPy构建的超快速回测引擎,并使用Numba加速。
  • 轻松创建和执行跨多个工具的交易规则和模型。
  • 可访问来自Alpaca和Yahoo Finance的历史数据,也支持使用自定义数据接口。
  • 可使用Walkforward Analysis方法训练和回测模型,模拟策略在实际交易中的表现。
  • 使用随机引导法提供更准确的交易指标,以提高可靠性。
  • 缓存下载的数据、指标和模型,以加快开发过程。
  • 通过并行计算实现更快的性能。
  • 支持对资产进行排名,自定义头寸,设置止损。

PyBroker使用Walkforward Analysis方法进行训练和回测。这种方法会将历史数据分成多个时间窗口,并模拟现实世界中使用新数据执行和重新训练策略的过程。模型首先在最早的时间窗口上进行训练,并在该时间窗口的测试数据上进行评估。随着算法向前移动以评估下一个时间窗口,来自前一个窗口的测试数据被添加到训练数据中。这个过程会重复进行,直到所有时间窗口都被评估完毕。这种算法可以有效地验证策略的可靠性,避免过拟合问题,并提高其在真实市场中的表现。

图片

安装

pip install lib-pybroker

示例

基于规则的策略:

# 导入需要的模块
from pybroker import Strategy, YFinance, highest

# 执行函数定义
def exec_fn(ctx):
    # 至少需要20天的数据。
    if ctx.bars < 20:
        return
    # 获取过去10天中的最高价。
    high_10d = ctx.indicator('high_10d')
    # 在新的10天高点时买入。
    if not ctx.long_pos() and high_10d[-1] > high_10d[-2]:
        ctx.buy_shares = 100
        # 持有该头寸2天。
        ctx.hold_bars = 2

# 创建策略实例
strategy = Strategy(YFinance(), start_date='1/1/2022', end_date='7/1/2022')

# 添加执行函数和相关参数
strategy.add_execution(
    exec_fn, ['AAPL''MSFT'], indicators=highest('high_10d''close', period=10))

# 回测并获取结果
result = strategy.backtest()

基于机器学习模型的策略:

import pybroker
from pybroker import Alpaca, Strategy

# 训练机器学习模型
def train_fn(train_data, test_data, ticker):
    # 使用train_data中存储的指标训练模型。
    
    from sklearn.linear_model import LinearRegression
    X_train = train_data[['feature_1','feature_2']]
    y_train = train_data[['label']]
    model = LinearRegression()
    model.fit(X_train, y_train)
    ...
    
    return model

# 注册模型及其训练函数到PyBroker中。
my_model = pybroker.model('my_model', train_fn, indicators=[...])

def exec_fn(ctx):
    preds = ctx.preds('my_model')
    # 基于my_model的最新预测信号开多头。
    if not ctx.long_pos() and preds[-1] > buy_threshold:
        ctx.buy_shares = 100
    # 基于my_model的最新预测信号平多头。
    elif ctx.long_pos() and preds[-1] < sell_threshold:
        ctx.sell_all_shares()

alpaca = Alpaca(api_key=..., api_secret=...)
strategy = Strategy(alpaca, start_date='1/1/2022', end_date='7/1/2022')
# 添加执行函数和相关参数,包括使用的模型。
strategy.add_execution(exec_fn, ['AAPL''MSFT'], models=my_model)
# 在1分钟数据上运行5个窗口、50/50的训练和测试数据的向前走步分析(Walkforward Analysis)。
result = strategy.walkforward(timeframe='1m', windows=5, train_size=0.5)

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/110958
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 4分钟前
下一篇 2分钟前

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注