PyBroker 介绍
你是否希望借助 Python 和机器学习的力量来优化您的交易策略?
那么你需要了解一下 PyBroker!这个 Python 框架专为开发算法交易策略而设计,
尤其关注使用机器学习的策略。借助 PyBroker,你可以轻松创建和微调交易规则,
构建强大的模型,并深入了解你的策略表现。
PyBroker 项目 GitHub 地址
PyBroker 英文文档地址:点击进入英文文档
PyBroker 中文文档地址:点击进入中文文档
安装
pip install lib-pybroker --upgrade
环境配置
PyBroker 支持在 Windows、macOS 和 Linux 中的
Python 3.9(建议使用 Python 3.11)及以上版本使用。
策略示例
demo.py |
---|
| # 导入所需的库和模块
import pybroker as pb
from pybroker import Strategy, ExecContext
from pybroker.ext.data import AKShare
# 定义全局参数 "stock_code"(股票代码)、"percent"(持仓百分比)和 "stop_profit_pct"(止盈百分比)
pb.param(name='stock_code', value='600000')
pb.param(name='percent', value=1)
pb.param(name='stop_loss_pct', value=10)
pb.param(name='stop_profit_pct', value=10)
# 初始化 AKShare 数据源
akshare = AKShare()
# 使用 AKShare 数据源查询特定股票(由 "stock_code" 参数指定)在指定日期范围内的数据
df = akshare.query(symbols=[pb.param(name='stock_code')], start_date='20200131', end_date='20230228')
# 定义交易策略:如果当前没有持有该股票,则买入股票,并设置止盈点位
def buy_with_stop_loss(ctx: ExecContext):
pos = ctx.long_pos()
if not pos:
# 计算目标股票数量,根据 "percent" 参数确定应购买的股票数量
ctx.buy_shares = ctx.calc_target_shares(pb.param(name='percent'))
ctx.hold_bars = 100
else:
ctx.sell_shares = pos.shares
# 设置止盈点位,根据 "stop_profit_pct" 参数确定止盈点位
ctx.stop_profit_pct = pb.param(name='stop_profit_pct')
# 创建策略配置,初始资金为 500000
my_config = pb.StrategyConfig(initial_cash=500000)
# 使用配置、数据源、起始日期、结束日期,以及刚才定义的交易策略创建策略对象
strategy = Strategy(akshare, start_date='20200131', end_date='20230228', config=my_config)
# 添加执行策略,设置股票代码和要执行的函数
strategy.add_execution(fn=buy_with_stop_loss, symbols=[pb.param(name='stock_code')])
# 执行回测,并打印出回测结果的度量值(四舍五入到小数点后四位)
result = strategy.backtest()
print(result.metrics_df.round(4))
|
shell |
---|
| Loading bar data...
Loaded bar data: 0:00:00
Backtesting: 2020-01-31 00:00:00 to 2023-02-28 00:00:00
Loading bar data...
Loaded bar data: 0:00:00
Test split: 2020-02-03 00:00:00 to 2023-02-28 00:00:00
100% (748 of 748) |######################| Elapsed Time: 0:00:00 Time: 0:00:00
Finished backtest: 0:00:03
name value
0 trade_count 373.0000
1 initial_market_value 500000.0000
2 end_market_value 467328.0900
3 total_pnl -33322.7800
4 unrealized_pnl 650.8700
5 total_return_pct -6.6646
6 total_profit 530528.5100
7 total_loss -563851.2900
8 total_fees 0.0000
9 max_drawdown -113004.2700
10 max_drawdown_pct -20.2704
11 win_rate 45.9215
12 loss_rate 54.0785
13 winning_trades 152.0000
14 losing_trades 179.0000
15 avg_pnl -89.3372
16 avg_return_pct -0.0160
17 avg_trade_bars 1.0000
18 avg_profit 3490.3191
19 avg_profit_pct 0.6958
20 avg_winning_trade_bars 1.0000
21 avg_loss -3150.0072
22 avg_loss_pct -0.6241
23 avg_losing_trade_bars 1.0000
24 largest_win 31157.9400
25 largest_win_pct 5.9200
26 largest_win_bars 1.0000
27 largest_loss -12682.6000
28 largest_loss_pct -2.3100
29 largest_loss_bars 1.0000
30 max_wins 8.0000
31 max_losses 7.0000
32 sharpe -0.0132
33 sortino -0.0231
34 profit_factor 0.9638
35 ulcer_index 1.7639
36 upi -0.0039
37 equity_r2 0.5876
38 std_error 27448.1177
|