您好,我想与您分享PyBroker,这是一个免费开放的Python框架,我开发了用于创建算法交易策略,包括使用机器学习的算法交易策略。借助PyBroker,您可以轻松制定和微调交易规则,建立强大的ML模型并获得对策略绩效的宝贵见解。
PyBroker的一些关键特征包括:
- 一个内置NumPy并加速Numba的超快速测试引擎。
- 能够轻松地创建和执行多个工具的交易规则和模型。
- 从Alpaca和Yahoo Finance或your 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上找到其他示例和教程。谢谢您的阅读!