PyBroker:利用 Python 和机器学习助力算法交易

PyBroker:利用 Python 和机器学习助力算法交易

你是否希望借助 Python 和机器学习的力量来优化你的交易策略?那么你需要了解一下 PyBroker!这个 Python 框架专为开发算法交易策略而设计,尤其关注使用机器学习的策略。借助 PyBroker,你可以轻松创建和微调交易规则,构建强大的模型,并深入了解你的策略表现。

PyBroker 介绍

官方说明文档:

利用 PyBroker 进行量化投资

官方说明文档的github repo:https://github.com/akfamily/akquant 

 安装:

pip install lib-pybroker --upgrade

测试

# 导入所需的库和模块
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 = 100else: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))

将以上文件存为test.py

 执行python test.py 

输出信息

python test.py
Loading bar data...
Loaded bar data: 0:00:01Backtesting: 2020-01-31 00:00:00 to 2023-02-28 00:00:00Loading bar data...
Loaded bar data: 0:00:00Test 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:00Finished backtest: 0:00:09name        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

快速开始

在此处通过一个简单的例子来介绍如何使用 pybroker 来开发策略。

导入相关的模块和类

import pybroker as pb
from pybroker import Strategy, StrategyConfig, ExecContext
from pybroker.ext.data import AKShareprint(pb.__version__)
  1. 将 pybroker 模块导入为 pb,这是一个约定俗成的做法,方便后续使用。
  2. 从 pybroker 中导入 Strategy 和 StrategyConfig 类,以及 AKShare 数据源。
  3. Strategy 类是 pybroker 中的策略基类,所有的策略都需要继承该类。
  4. StrategyConfig 类是 pybroker 中的策略配置基类,所有的策略配置都需要继承该类。
  5. AKShare 类是 pybroker 中的数据源类,用于获取数据。
  6. pb.__version__ 属性用于获取 pybroker 的版本。

配置策略

config = StrategyConfig(initial_cash=500_000)
  1. 创建一个策略配置对象,该对象用于配置策略的一些参数。
  2. initial_cash 参数用于配置策略的初始资金,默认为 10 万。
strategy = Strategy(data_source=AKShare(),start_date='20220101',end_date='20230916',config=config
)
  1. 创建一个策略对象,该对象用于运行策略。
  2. AKShare() 参数用于配置策略的数据源,该数据源为 akshare。
  3. 20220101 参数用于配置策略的开始日期。
  4. 20230916 参数用于配置策略的结束日期。
  5. config 参数用于配置策略的配置对象。
  6. strategy 对象用于运行策略。
  7. strategy 对象的 config 属性用于获取策略的配置对象。

定义规则

def buy_low(ctx: ExecContext):# 如果当前已经持有仓位,则不再买入。if ctx.long_pos():return# 如果当前的收盘价小于前一天的最低价,则下单买入。if ctx.bars >= 2 and ctx.close[-1] < ctx.low[-2]:# 计算买入的股票数量,该数量为当前资金的 25%。ctx.buy_shares = ctx.calc_target_shares(0.25)# 设置买入的限价,该限价为当前收盘价减去 0.01。ctx.buy_limit_price = ctx.close[-1] - 0.01# 设置持有仓位的时间,该时间为 3 个交易日。ctx.hold_bars = 3
  1. 定义一个名为 buy_low 的函数,该函数用于判断是否需要买入。
  2. ctx 参数是一个上下文对象,该对象包含了策略运行时的一些数据。
  3. ctx.long_pos() 方法用于判断是否已经持有仓位。
  4. ctx.bars 属性用于获取当前的交易日。

运行策略

可以通过调用 strategy.backtest() 方法来进行策略回测:

strategy.add_execution(fn=buy_low, symbols=['000001', '600000'])
result = strategy.backtest()

查看订单

print(result.orders)

 print(result.orders)type  symbol       date  shares  limit_price  fill_price  fees
id
1     buy  600000 2020-02-04   47125          NaN       10.61   0.0
2    sell  600000 2020-02-05   47125          NaN       10.68   0.0
3     buy  600000 2020-02-06   46774          NaN       10.76   0.0
4    sell  600000 2020-02-07   46774          NaN       10.79   0.0
5     buy  600000 2020-02-10   46473          NaN       10.78   0.0
..    ...     ...        ...     ...          ...         ...   ...
743   buy  600000 2023-02-22   64372          NaN        7.26   0.0
744  sell  600000 2023-02-23   64372          NaN        7.26   0.0
745   buy  600000 2023-02-24   64906          NaN        7.22   0.0
746  sell  600000 2023-02-27   64906          NaN        7.18   0.0
747   buy  600000 2023-02-28   65087          NaN        7.17   0.0[747 rows x 7 columns]

查看持仓

print(result.positions)

输出:

 print(result.positions)long_shares  short_shares  close     equity  market_value  margin  unrealized_pnl
symbol date
600000 2020-02-04        47125             0  10.66  502352.50     502352.50     0.0         2356.252020-02-06        46774             0  10.79  504691.46     504691.46     0.0         1403.222020-02-10        46473             0  10.77  500514.21     500514.21     0.0         -464.732020-02-12        46815             0  10.86  508410.90     508410.90     0.0         1872.602020-02-14        47032             0  10.86  510767.52     510767.52     0.0         2351.60
...                        ...           ...    ...        ...           ...     ...             ...2023-02-16        64908             0   7.19  466688.52     466688.52     0.0        -1947.242023-02-20        64638             0   7.26  469271.88     469271.88     0.0         3231.902023-02-22        64372             0   7.24  466053.28     466053.28     0.0        -1287.442023-02-24        64906             0   7.18  466025.08     466025.08     0.0        -2596.242023-02-28        65087             0   7.18  467324.66     467324.66     0.0          650.87[374 rows x 7 columns]

查看投资组合

print(result.portfolio)

print(result.portfolio)
                 cash     equity  margin  market_value       pnl  unrealized_pnl  fees
date
2020-02-03  500000.00  500000.00     0.0     500000.00      0.00             0.0   0.0
2020-02-04       3.75  502356.25     0.0     502356.25   2356.25             0.0   0.0
2020-02-05  503298.75  503298.75     0.0     503298.75   3298.75             0.0   0.0
2020-02-06      10.51  504701.97     0.0     504701.97   4701.97             0.0   0.0
2020-02-07  504701.97  504701.97     0.0     504701.97   4701.97             0.0   0.0
...               ...        ...     ...           ...       ...             ...   ...
2023-02-22    1932.74  467986.02     0.0     467986.02 -32013.98             0.0   0.0
2023-02-23  469273.46  469273.46     0.0     469273.46 -30726.54             0.0   0.0
2023-02-24     652.14  466677.22     0.0     466677.22 -33322.78             0.0   0.0
2023-02-27  466677.22  466677.22     0.0     466677.22 -33322.78             0.0   0.0
2023-02-28       3.43  467328.09     0.0     467328.09 -32671.91             0.0   0.0
 

查看交易

print(result.trades)
print(result.trades)type  symbol entry_date  exit_date  entry   exit  ...   agg_pnl  bars  pnl_per_bar  stop   mae   mfe
id                                                     ...
1    long  600000 2020-02-04 2020-02-05  10.61  10.68  ...   3298.75     1      3298.75  None -0.13  0.13
2    long  600000 2020-02-06 2020-02-07  10.76  10.79  ...   4701.97     1      1403.22  None -0.11  0.10
3    long  600000 2020-02-10 2020-02-11  10.78  10.86  ...   8419.81     1      3717.84  None -0.07  0.08
4    long  600000 2020-02-12 2020-02-13  10.82  10.82  ...   8419.81     1         0.00  None -0.06  0.06
5    long  600000 2020-02-14 2020-02-17  10.81  11.04  ...  19237.17     1     10817.36  None -0.07  0.23
..    ...     ...        ...        ...    ...    ...  ...       ...   ...          ...   ...   ...   ...
369  long  600000 2023-02-14 2023-02-15   7.24   7.22  ... -31362.12     1     -1298.16  None -0.02  0.02
370  long  600000 2023-02-16 2023-02-17   7.22   7.18  ... -33958.44     1     -2596.32  None -0.04  0.04
371  long  600000 2023-02-20 2023-02-21   7.21   7.26  ... -30726.54     1      3231.90  None -0.06  0.06
372  long  600000 2023-02-22 2023-02-23   7.26   7.26  ... -30726.54     1         0.00  None -0.02  0.03
373  long  600000 2023-02-24 2023-02-27   7.22   7.18  ... -33322.78     1     -2596.24  None -0.04  0.04

 其它:多个股票组合策略

多个股票组合投资,比如600000和600001两只股票(当然后来知道600001不交易了,后来换成了000001股票)

pb.param(name='stock_code', value='600000')
pb.param(name='stock_code2', value='600001')pb.param(name='stock_code'),pb.param(name='stock_code2')

输出:

pb.param(name='stock_code'),pb.param(name='stock_code2')
('600000', '600001')

投资组合运行策略

最终是使用了600001和000001两只股票的组合来做例子:

# 导入所需的库和模块
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='stock_code2', value='000001')
pb.param(name='percent', value=0.5)
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'), pb.param(name='stock_code2')], 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 = 100else: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'), pb.param(name='stock_code2')])
# 执行回测,并打印出回测结果的度量值(四舍五入到小数点后四位)
result = strategy.backtest()
print(result.metrics_df.round(4))# 查看结果
print(result.metrics_df)  # 查看绩效
print(result.orders)  # 查看订单
print(result.positions)  # 查看持仓
print(result.portfolio)  # 查看投资组合
print(result.trades)  # 查看交易

查看结果 

>>> print(result.metrics_df)  # 查看绩效name          value
0              trade_count     746.000000
1     initial_market_value  500000.000000
2         end_market_value  467291.140000
3                total_pnl  -33884.120000
4           unrealized_pnl    1175.260000
5         total_return_pct      -6.776824
6             total_profit  948882.400000
7               total_loss -982766.520000
8               total_fees       0.000000
9             max_drawdown -197100.720000
10        max_drawdown_pct     -32.257853
11                win_rate      45.285714
12               loss_rate      54.714286
13          winning_trades     317.000000
14           losing_trades     383.000000
15                 avg_pnl     -45.421072
16          avg_return_pct      -0.013338
17          avg_trade_bars       1.000000
18              avg_profit    2993.319874
19          avg_profit_pct       1.166530
20  avg_winning_trade_bars       1.000000
21                avg_loss   -2565.970026
22            avg_loss_pct      -0.991488
23   avg_losing_trade_bars       1.000000
24             largest_win   22902.000000
25         largest_win_pct       8.610000
26        largest_win_bars       1.000000
27            largest_loss  -14081.490000
28        largest_loss_pct      -4.830000
29       largest_loss_bars       1.000000
30                max_wins      10.000000
31              max_losses      14.000000
32                  sharpe      -0.009205
33                 sortino      -0.015332
34           profit_factor       0.975002
35             ulcer_index       2.528958
36                     upi      -0.001950
37               equity_r2       0.421268
38               std_error   46080.037348
>>> print(result.orders)  # 查看订单type  symbol       date  shares  limit_price  fill_price  fees
id
1      buy  000001 2020-02-04   17869          NaN       14.34   0.0
2      buy  600000 2020-02-04   22974          NaN       10.61   0.0
3     sell  000001 2020-02-05   17869          NaN       14.60   0.0
4     sell  600000 2020-02-05   22974          NaN       10.68   0.0
5      buy  000001 2020-02-06   17301          NaN       14.69   0.0
...    ...     ...        ...     ...          ...         ...   ...
1490   buy  600000 2023-02-24   32486          NaN        7.22   0.0
1491  sell  000001 2023-02-27   16717          NaN       13.78   0.0
1492  sell  600000 2023-02-27   32486          NaN        7.18   0.0
1493   buy  000001 2023-02-28   17023          NaN       13.73   0.0
1494   buy  600000 2023-02-28   32411          NaN        7.17   0.0[1494 rows x 7 columns]
>>> print(result.positions)  # 查看持仓long_shares  short_shares  close     equity  market_value  margin  unrealized_pnl
symbol date
600000 2020-02-04        22974             0  10.66  244902.84     244902.84     0.0         1148.70
000001 2020-02-04        17869             0  14.60  260887.40     260887.40     0.0         4645.94
600000 2020-02-06        23429             0  10.79  252798.91     252798.91     0.0          702.87
000001 2020-02-06        17301             0  14.77  255535.77     255535.77     0.0         1384.08
600000 2020-02-10        23229             0  10.77  250176.33     250176.33     0.0         -232.29
...                        ...           ...    ...        ...           ...     ...             ...
000001 2023-02-22        16587             0  14.02  232549.74     232549.74     0.0         -165.87
600000 2023-02-24        32486             0   7.18  233249.48     233249.48     0.0        -1299.44
000001 2023-02-24        16717             0  13.86  231697.62     231697.62     0.0        -1003.02
600000 2023-02-28        32411             0   7.18  232710.98     232710.98     0.0          324.11
000001 2023-02-28        17023             0  13.78  234576.94     234576.94     0.0          851.15[748 rows x 7 columns]
>>> print(result.portfolio)  # 查看投资组合cash     equity  margin  market_value       pnl  unrealized_pnl  fees
date
2020-02-03  500000.00  500000.00     0.0     500000.00      0.00             0.0   0.0
2020-02-04       4.40  505794.64     0.0     505794.64   5794.64             0.0   0.0
2020-02-05  506254.12  506254.12     0.0     506254.12   6254.12             0.0   0.0
2020-02-06       6.39  508341.07     0.0     508341.07   8341.07             0.0   0.0
2020-02-07  504534.85  504534.85     0.0     504534.85   4534.85             0.0   0.0
...               ...        ...     ...           ...       ...             ...   ...
2023-02-22    2134.33  466957.75     0.0     466957.75 -33042.25             0.0   0.0
2023-02-23  469755.70  469755.70     0.0     469755.70 -30244.30             0.0   0.0
2023-02-24    2506.14  467453.24     0.0     467453.24 -32546.76             0.0   0.0
2023-02-27  466115.88  466115.88     0.0     466115.88 -33884.12             0.0   0.0
2023-02-28       3.22  467291.14     0.0     467291.14 -32708.86             0.0   0.0[748 rows x 7 columns]
>>> print(result.trades)  # 查看交易type  symbol entry_date  exit_date  entry   exit  ...   agg_pnl  bars  pnl_per_bar  stop   mae   mfe
id                                                     ...
1    long  000001 2020-02-04 2020-02-05  14.34  14.60  ...   4645.94     1      4645.94  None -0.32  0.32
2    long  600000 2020-02-04 2020-02-05  10.61  10.68  ...   6254.12     1      1608.18  None -0.13  0.13
3    long  000001 2020-02-06 2020-02-07  14.69  14.55  ...   3831.98     1     -2422.14  None -0.18  0.18
4    long  600000 2020-02-06 2020-02-07  10.76  10.79  ...   4534.85     1       702.87  None -0.11  0.10
5    long  000001 2020-02-10 2020-02-11  14.42  14.75  ...  10228.67     1      5693.82  None -0.12  0.33
..    ...     ...        ...        ...    ...    ...  ...       ...   ...          ...   ...   ...   ...
742  long  600000 2023-02-20 2023-02-21   7.21   7.26  ... -32234.74     1      1555.70  None -0.06  0.06
743  long  000001 2023-02-22 2023-02-23  14.03  14.15  ... -30244.30     1      1990.44  None -0.09  0.12
744  long  600000 2023-02-22 2023-02-23   7.26   7.26  ... -30244.30     1         0.00  None -0.02  0.03
745  long  000001 2023-02-24 2023-02-27  13.92  13.78  ... -32584.68     1     -2340.38  None -0.14  0.11
746  long  600000 2023-02-24 2023-02-27   7.22   7.18  ... -33884.12     1     -1299.44  None -0.04  0.04[746 rows x 15 columns]

最后的代码

 

# 导入所需的库和模块
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_codes', value=['600000', '000001'])
pb.param(name='percents', value=[0.5, 0.5])  # 持仓百分比,和为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 = 100else: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))# 查看结果
print(result.metrics_df)  # 查看绩效
print(result.orders)  # 查看订单
print(result.positions)  # 查看持仓
print(result.portfolio)  # 查看投资组合
print(result.trades)  # 查看交易

调试

股票组合运行策略发现还是只买单只股票

使用这个组合:

pb.param(name='stock_code', value='600000')
pb.param(name='stock_code2', value='600001')pb.param(name='stock_code'),pb.param(name='stock_code2')

发现订单、持仓、交易等信息里,只有600000股票,没有600001的信息。

后来改成600000和000001股票组合,发现策略运行正常

pb.param(name='stock_code', value='600000')
pb.param(name='stock_code2', value='000001')pb.param(name='stock_code'),pb.param(name='stock_code2')
print(result.positions)  # 查看持仓long_shares  short_shares  close     equity  market_value  margin  unrealized_pnl
symbol date
600000 2020-02-04        22974             0  10.66  244902.84     244902.84     0.0         1148.70
000001 2020-02-04        17869             0  14.60  260887.40     260887.40     0.0         4645.94
600000 2020-02-06        23429             0  10.79  252798.91     252798.91     0.0          702.87
000001 2020-02-06        17301             0  14.77  255535.77     255535.77     0.0         1384.08
600000 2020-02-10        23229             0  10.77  250176.33     250176.33     0.0         -232.29
...                        ...           ...    ...        ...           ...     ...             ...
000001 2023-02-22        16587             0  14.02  232549.74     232549.74     0.0         -165.87
600000 2023-02-24        32486             0   7.18  233249.48     233249.48     0.0        -1299.44
000001 2023-02-24        16717             0  13.86  231697.62     231697.62     0.0        -1003.02
600000 2023-02-28        32411             0   7.18  232710.98     232710.98     0.0          324.11
000001 2023-02-28        17023             0  13.78  234576.94     234576.94     0.0          851.15[748 rows x 7 columns]

结论就是:可能600001邯郸钢铁这只股票有问题。查了一下,唐钢股份吸收合并邯郸钢铁、承德钒钛。所以没有600001这只股票了。所以才会有不交易的情况发生。刚开始用PyBroker,还以为是自己代码写错了。

当然最后学到的是这样写:

pb.param(name='stock_codes', value=['600000', '600001'])
pb.param(name='percents', value=[0.5, 0.5])  # 持仓百分比,和为1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/68472.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI论文】LlamaV-o1:重新思考大型语言模型(LLMs)中的逐步视觉推理方法

摘要&#xff1a;推理是解决复杂多步骤问题的基本能力&#xff0c;特别是在需要逐步顺序理解的视觉环境中尤为重要。现有的方法缺乏一个全面的视觉推理评估框架&#xff0c;并且不强调逐步解决问题。为此&#xff0c;我们通过三项关键贡献&#xff0c;提出了一个在大型语言模型…

【HTTP】详解

目录 HTTP 基本概念啥是HTTP&#xff0c;有什么用&#xff1f;一次HTTP请求的过程当你在浏览器中输入一个浏览器地址&#xff0c;它会发送什么 &#xff1f;---&#xff08;底层流程&#xff09;HTTP的协议头请求头&#xff08;对应客户端&#xff09;一些请求头请求方法 响应头…

EasyExcel - 行合并策略(二级列表)

&#x1f63c;前言&#xff1a;博主在工作中又遇到了新的excel导出挑战&#xff1a;需要导出多条文章及其下联合作者的信息&#xff0c;简单的来说是一个二级列表的数据结构。 &#x1f575;️‍♂️思路&#xff1a;excel导出实际上是一行一行的记录&#xff0c;再根据条件对其…

第9章:基于Vision Transformer(ViT)网络实现的迁移学习图像分类任务:早期秧苗图像识别

目录 1. ViT 模型 2. 早期秧苗分类 2.1 数据集 2.2 训练 2.3 训练结果 2.4 可视化网页推理 3. 下载 1. ViT 模型 视觉变换器&#xff08;ViT&#xff09;是一种神经网络架构&#xff0c;它将变换器架构的原理应用于视觉数据。最初&#xff0c;Transformers主要用于自然…

ros2-7.5 做一个自动巡检机器人

7.5.1 需求及设计 又到了小鱼老师带着做最佳实践项目了。需求&#xff1a;做一个在各个房间不断巡逻并记录图像的机器人。 到达目标点后首先通过语音播放到达目标点信息&#xff0c; 再通过摄像头拍摄一张图片保存到本地。 7.5.2 编写巡检控制节点 在chapt7_ws/src下新建功…

OpenHarmony API 设计规范

OpenHarmony API 设计规范 修订记录 版本作者时间更新内容v0.1&#xff0c;试运行版OpenHarmony API SIG2022年11月初版发布 目的 API是软件实现者提供给使用者在编程界面上的定义&#xff0c;API在很大程度上体现了软件实体的能力范围。 同时&#xff0c;API定义的好坏极…

【React】新建React项目

目录 create-react-app基础运用React核心依赖React 核心思想&#xff1a;数据驱动React 采用 MVC体系package.jsonindex.html好书推荐 官方提供了快速构建React 项目的脚手架&#xff1a; create-react-app &#xff0c;目前使用它安装默认是19版本&#xff0c;我们这里降为18…

Linux手写FrameBuffer任意引脚驱动spi屏幕

一、硬件设备 开发板&#xff1a;香橙派 5Plus&#xff0c;cpu&#xff1a;RK3588&#xff0c;带有 40pin 外接引脚。 屏幕&#xff1a;SPI 协议 0.96 寸 OLED。 二、需求 主要是想给板子增加一个可视化的监视器&#xff0c;并且主页面可调。 平时跑个模型或者服务&#xff0c;…

网络安全构成要素

一、防火墙 组织机构内部的网络与互联网相连时&#xff0c;为了避免域内受到非法访问的威胁&#xff0c;往往会设置防火墙。 使用NAT&#xff08;NAPT&#xff09;的情况下&#xff0c;由于限定了可以从外部访问的地址&#xff0c;因此也能起到防火墙的作用。 二、IDS入侵检…

React Native的现状与未来:从发展到展望

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

数据结构——链表(概念,类型,java实现、增删、优缺点)

我是一个计算机专业研0的学生卡蒙Camel&#x1f42b;&#x1f42b;&#x1f42b;&#xff08;刚保研&#xff09; 记录每天学习过程&#xff08;主要学习Java、python、人工智能&#xff09;&#xff0c;总结知识点&#xff08;内容来自&#xff1a;自我总结网上借鉴&#xff0…

app版本控制java后端接口版本管理

java api version 版本控制 java接口版本管理 1 自定义 AppVersionHandleMapping 自定义AppVersionHandleMapping实现RequestMappingHandlerMapping里面的方法 public class AppVersionHandleMapping extends RequestMappingHandlerMapping {Overrideprotected RequestCondit…

LRU 算法详解与 Java 的两种实现方式

LRU 算法详解与 Java 的两种实现方式 LRU 算法详解与 Java 的两种实现方式一、LRU 算法简介二、LRU 算法原理三、LRU 算法应用场景四、Java 实现 LRU 算法(一)基于 LinkedHashMap 实现(二)基于双向链表和 HashMap 实现五、总结LRU 算法详解与 Java 的两种实现方式 一、LRU…

基于 Python 的财经数据接口库:AKShare

AKShare 是基于 Python 的财经数据接口库&#xff0c;目的是实现对股票、期货、期权、基金、外汇、债券、指数、加密货币等金融产品的基本面数据、实时和历史行情数据、衍生数据从数据采集、数据清洗到数据落地的一套工具&#xff0c;主要用于学术研究目的。 安装 安装手册见…

在 macOS 上,用命令行连接 MySQL(/usr/local/mysql/bin/mysql -u root -p)

根据你提供的文件内容&#xff0c;MySQL 的安装路径是 /usr/local/mysql。要直接使用 mysql 命令&#xff0c;你需要找到 mysql 可执行文件的路径。 在 macOS 上&#xff0c;mysql 客户端通常位于 MySQL 安装目录的 bin 子目录中。因此&#xff0c;完整的路径应该是&#xff1…

【QT】: 初识 QWidget 控件 | QWidget 核心属性(API) | qrc 文件

&#x1f525; 目录 1. 控件概述 控件体系的发展阶段 2. QWidget 核心属性 2.1 核心属性概览2.2 用件可用&#xff08;Enabled&#xff09; 2.3 坐标系&#xff08;Geometry&#xff09; **实例 1: 控制按钮的位置**实例 2: 表白 程序 2.4 窗口标题&#xff08;windowTiltle&a…

通过外部链接启动 Flutter App(详细介绍及示例)

通过外部链接启动 Flutter App&#xff08;firebase_dynamic_links 和 app_links&#xff09; 详细介绍 通过外部链接启动flutter App 的使用及示例 在我们的APP中&#xff0c;经常有点击链接启动并进入APP的需求&#xff08;如果未安装跳转到应用商店&#xff09;。Android通…

git操作(Windows中GitHub)

使用git控制GitHub中的仓库版本&#xff0c;并在Windows桌面中创建与修改代码&#xff0c;与GitHub仓库进行同步。 创建自己的GitHub仓库 创建一个gen_code实验性仓库用来学习和验证git在Windows下的使用方法&#xff1a; gen_code仓库 注意&#xff0c;创建仓库时不要设置…

MySQL DCL 数据控制

文章目录 1.新建用户2.删除用户3.用户授权4.撤销用户权限5.查看用户权限6.修改用户密码7.权限类型参考文献 1.新建用户 连接到 MySQL 服务器后&#xff0c;管理员或特权用户可以使用 CREATE USER 语句创建新用户。 CREATE USER usernamehost IDENTIFIED BY password;-- 示例 …

python爬虫爬取淘宝商品比价||淘宝商品详情API接口

最近在学习北京理工大学的爬虫课程&#xff0c;其中一个实例是讲如何爬取淘宝商品信息&#xff0c;现整理如下&#xff1a; 功能描述&#xff1a;获取淘宝搜索页面的信息&#xff0c;提取其中的商品名称和价格 探讨&#xff1a;淘宝的搜索接口 翻页的处理 技术路线:requests…