用机器学习的python algotrading
#python #machinelearning #algotrading

Github Link

您好,我想与您分享PyBroker,这是一个免费开放的Python框架,我开发了用于创建算法交易策略,包括使用机器学习的算法交易策略。借助PyBroker,您可以轻松制定和微调交易规则,建立强大的ML模型并获得对策略绩效的宝贵见解。

PyBroker的一些关键特征包括:

  • 一个内置NumPy并加速Numba的超快速测试引擎。
  • 能够轻松地创建和执行多个工具的交易规则和模型。
  • AlpacaYahoo Financeyour own data provider的历史数据访问。
  • 使用Walkforward Analysis训练和回测模型的选项,该选项模拟了该策略在实际交易过程中的执行方式。
  • 更可靠的交易指标,使用随机bootstrapping提供更准确的结果。
  • 下载数据,指标和模型的缓存以加快开发过程。
  • 平行化计算,可以更快地进行性能。

PyBroker的设计考虑了机器学习,并使用您喜欢的ML框架支持培训机器学习模型。此外,您可以使用Pybroker来编写基于规则的策略。

本文将展示一些有关如何实施和使用Pybroker实施和backtest交易策略的基本示例。

安装

要开始使用PyBroker,您可以使用pip安装库:

pip install lib-pybroker

,也可以克隆github存储库:

git clone https://github.com/edtechre/pybroker

基于规则的示例

以下是一种在新的10天高的策略中的一个示例,并保持了5天的位置:

    from pybroker import Strategy, YFinance, highest

    def exec_fn(ctx):
       # Require at least 20 bars (days) of data.
       if ctx.bars < 20:
          return
       # Get the rolling 10 day high.
       high_10d = ctx.indicator('high_10d')
       # Buy on a new 10 day high.
       if not ctx.long_pos() and high_10d[-1] > high_10d[-2]:
          ctx.buy_shares = 100
          # Hold the position for 5 days.
          ctx.hold_bars = 5
          # Set a stop loss of 2%.
          ctx.stop_loss_pct = 2

    strategy = Strategy(
        YFinance(), 
        start_date='1/1/2022', 
        end_date='1/1/2023'
    )
    strategy.add_execution(
       exec_fn, 
       ['AAPL', 'MSFT'], 
       indicators=highest('high_10d', 'close', period=10)
    )

    # Run the backtest.
    result = strategy.backtest()
    # Get metrics:
    result.metrics_df.round(2)

模型示例

一个下一个示例显示了如何使用20天的RSI训练线性回归模型,该模型可以预测第二天的返回,然后在交易策略中使用该模型:

    import pybroker
    import talib
    from pybroker import Strategy, YFinance
    from sklearn.linear_model import LinearRegression

    def train_slr(symbol, train_data, test_data):
        # Previous day close prices.
        train_prev_close = train_data['close'].shift(1)
        # Calculate daily returns.
        train_daily_returns = (
            (train_data['close'] - train_prev_close)
            / train_prev_close
        )
        # Predict next day's return.
        train_data['pred'] = train_daily_returns.shift(-1)
        train_data = train_data.dropna()
        # Train the LinearRegession model to predict
        # the next day's return given the 20-day RSI.
        X_train = train_data[['rsi_20']]
        y_train = train_data[['pred']]
        model = LinearRegression()
        model.fit(X_train, y_train)
        return model

    def exec_fn(ctx):
        preds = ctx.preds('slr')
        # Open a long position given the latest prediction.
        if not ctx.long_pos() and preds[-1] > 0:
            ctx.buy_shares = 100
        # Close the long position given the latest prediction.
        elif ctx.long_pos() and preds[-1] < 0:
            ctx.sell_all_shares()

    # Register a 20-day RSI indicator with PyBroker.
    rsi_20 = pybroker.indicator(
        'rsi_20', 
        lambda data: talib.RSI(data.close, timeperiod=20)
    )
    # Register the model and its training function
    # with PyBroker.
    model_slr = pybroker.model(
        'slr', train_slr, indicators=[rsi_20])
    strategy = Strategy(
        YFinance(), 
        start_date='1/1/2022', 
        end_date='1/1/2023'
    )
    strategy.add_execution(
        exec_fn, ['NVDA', 'AMD'], models=model_slr)

    # Run the backtest using a 50/50 train/test split.
    result = strategy.backtest(train_size=0.5)
    # Get metrics:
    result.metrics_df.round(2)

我们也不仅限于在Pybroker中构建线性回归模型。我们可以培训其他模型类型,例如梯度提升机器,神经网络或我们首选的ML框架选择的任何其他体系结构。

如果您有兴趣了解更多信息,则可以在Github page上找到其他示例和教程。谢谢您的阅读!