胡远锋 发表于 2023-7-4 18:16:39

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

代码 | https://github.com/edtechre/pybroker
文档 | https://www.pybroker.com
PyBroker是一个开源Python框架,设计时考虑了机器学习,并撑持使用您最喜欢的机器学习框架训练机器学习模型。PyBroker旨在辅佐开发者开发算法交易策略,出格是基于机器学习的策略。使用PyBroker可以轻松创建和微调交易策略,并构建强大的机器学习模型来实现更好的交易绩效。
特性


[*]基于NumPy构建的超快速回测引擎,并使用Numba加速。
[*]轻松创建和执行跨多个东西的交易法则和模型。
[*]可访谒来自Alpaca和Yahoo Finance的历史数据,也撑持使用自定义数据接口。
[*]可使用Walkforward Analysis方式训练和回测模型,模拟策略在实际交易中的表示。
[*]使用随机引导法提供更准确的交易指标,以提高可靠性。
[*]缓存下载的数据、指标和模型,以加快开发过程。
[*]通过并行计算实现更快的性能。
[*]撑持对资产进行排名,自定义头寸,设置止损。
PyBroker使用Walkforward Analysis方式进行训练和回测。这种方式会将历史数据分成多个时间窗口,并模拟现实世界中使用新数据执行和从头训练策略的过程。模型首先在最早的时间窗口长进行训练,并在该时间窗口的测试数据长进行评估。随着算法向前移动以评估下一个时间窗口,来自前一个窗口的测试数据被添加到训练数据中。这个过程会反复进行,直到所有时间窗口都被评估完毕。这种算法可以有效地验证策略的可靠性,避免过拟合问题,并提高其在真实市场中的表示。

http://pic4.zhimg.com/v2-d97bedf905fc7d8804a3b3a71e48f4fb_b.jpg
安装

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常识,助力量化投资。致力于将机器学习更好地应用于量化交易。

龙一品 发表于 2023-7-4 18:17:39

qlib:那我是什么

cfxtdjlb 发表于 2023-7-4 18:18:32

可以看成一个循环进行多次 &lt;单次简单时序数据训练&gt;的脚本?

小米衣服 发表于 2023-7-4 18:19:08

糟糕了,我成替身了[大笑]
页: [1]
查看完整版本: PyBroker:为机器学习而生的量化回测框架