找回密码
 立即注册
查看: 825|回复: 3

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

[复制链接]

1

主题

2

回帖

22

积分

新手上路

积分
22
发表于 2023-7-4 18:16:39 | 显示全部楼层 |阅读模式
代码 | 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(&#39;high_10d&#39;)
    # 在新的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=&#39;1/1/2022&#39;, end_date=&#39;7/1/2022&#39;)

# 添加执行函数和相关参数
strategy.add_execution(
    exec_fn, [&#39;AAPL&#39;, &#39;MSFT&#39;], indicators=highest(&#39;high_10d&#39;, &#39;close&#39;, 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[[&#39;feature_1&#39;,&#39;feature_2&#39;]]
    y_train = train_data[[&#39;label&#39;]]
    model = LinearRegression()
    model.fit(X_train, y_train)
    ...
   
    return model

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

def exec_fn(ctx):
    preds = ctx.preds(&#39;my_model&#39;)
    # 基于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=&#39;1/1/2022&#39;, end_date=&#39;7/1/2022&#39;)
# 添加执行函数和相关参数,包罗使用的模型。
strategy.add_execution(exec_fn, [&#39;AAPL&#39;, &#39;MSFT&#39;], models=my_model)
# 在1分钟数据上运行5个窗口、50/50的训练和测试数据的向前走步分析(Walkforward Analysis)。
result = strategy.walkforward(timeframe=&#39;1m&#39;, windows=5, train_size=0.5)
「核桃量化」「公众号:nutquant」和「知乎:Spectator」分享AI常识,助力量化投资。致力于将机器学习更好地应用于量化交易。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

0

主题

1

回帖

0

积分

新手上路

积分
0
发表于 2023-7-4 18:17:39 | 显示全部楼层
qlib:那我是什么
回复

使用道具 举报

0

主题

4

回帖

9

积分

新手上路

积分
9
发表于 2023-7-4 18:18:32 | 显示全部楼层
可以看成一个循环进行多次 &lt;单次简单时序数据训练&gt;的脚本?
回复

使用道具 举报

0

主题

5

回帖

16

积分

新手上路

积分
16
发表于 2023-7-4 18:19:08 | 显示全部楼层
糟糕了,我成替身了[大笑]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|T9AI - 深度人工智能平台 ( 沪ICP备2023010006号 )

GMT+8, 2024-11-21 19:30 , Processed in 0.058649 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表