日频模拟交易
由qxiao创建,最终由qxiao 被浏览 7 用户
概述
模拟交易功能是 BigQuant 特有的量化服务,可以根据用户的策略每日为用户通过手机、email 等途径推送信号。目前支持日频模拟交易的品种有:股票、期货、可转债、基金。
前提条件
- 账户更新余额充足(如更新数据需要大于 1C 的资源)
- 已经有一个成功回测的策略
操作步骤
- 完成回测,绑定实盘日期
- 提交模拟交易定时任务
- 查看模拟交易
- 接收信号
- 分享策略至天梯
1. 完成回测
在 AIstudio 中完成策略回测,并在回测配置中绑定实盘起始日期。
# 基本面选股策略:非st,非科创板,非退市,非停牌,流通市值大于5亿元,净利润同比>30%;营业收入同比>30%;0<市盈率<50;市净率<5;非停牌;非ST;非新股;总市值从小到大排列
from bigquant import bigtrader, dai
def initialize(context: bigtrader.IContext):
"""初始化策略"""
# 设置手续费
context.set_commission(bigtrader.PerOrder(
buy_cost=0.0003,
sell_cost=0.0013,
min_cost=5
))
# 策略参数
rebalance_days = 5 # 每5个交易日调仓一次
stock_num = 20 # 每次选取20只股票
context.logger.info("开始计算基本面选股数据...")
# SQL 查询 - 基本面选股策略
# 使用子查询先计算增长率,然后在外层进行筛选
sql = """
SELECT
date,
instrument,
total_market_cap,
float_market_cap,
pe_ttm,
pb,
net_profit_growth_rate,
revenue_growth_rate,
1.0/$stock_num AS weight
FROM (
SELECT
date,
instrument,
total_market_cap,
float_market_cap,
pe_ttm,
pb,
net_profit_ttm,
operating_revenue_ttm,
st_status,
suspended,
list_sector,
list_days,
-- 计算净利润同比增长率(与250个交易日前相比)
(net_profit_ttm / m_lag(net_profit_ttm, 250) - 1) * 100 AS net_profit_growth_rate,
-- 计算营业收入同比增长率(与250个交易日前相比)
(operating_revenue_ttm / m_lag(operating_revenue_ttm, 250) - 1) * 100 AS revenue_growth_rate
FROM cn_stock_prefactors
) AS t
WHERE
-- 非ST股
st_status = 0
-- 非停牌
AND suspended = 0
-- 非科创板(科创板代码:list_sector = 3)
AND list_sector IN (1, 2)
-- 非新股(上市超过365天)
AND list_days > 365
-- 流通市值大于5亿元(单位:元)
AND float_market_cap > 500000000
-- 市盈率在0到50之间
AND pe_ttm > 0 AND pe_ttm < 50
-- 市净率小于5
AND pb > 0 AND pb < 5
-- 净利润同比增长率大于30%
AND net_profit_growth_rate > 30
-- 营业收入同比增长率大于30%
AND revenue_growth_rate > 30
ORDER BY date, total_market_cap ASC
"""
# 查询数据,为窗口函数预留时间缓冲(250个交易日约1年)
df = dai.query(
sql,
filters={"date": [
context.add_trading_days(context.start_date, -250),
context.end_date
]},
params={"stock_num": stock_num}
).df()
# 每天选取前N只股票(按总市值从小到大排列)
df = df.groupby('date').head(stock_num)
# 应用调仓计划
df = bigtrader.TradingDaysRebalance(
rebalance_days,
context=context
).select_rebalance_data(df)
# 保存到 context
context.data = df
context.logger.info(f"数据计算完成,共 {len(df)} 条记录")
# 运行回测
performance = bigtrader.run(
market=bigtrader.Market.CN_STOCK,
frequency=bigtrader.Frequency.DAILY,
start_date="2024-01-01",
end_date="2026-01-21",
capital_base=1000000,
initialize=initialize,
handle_data=bigtrader.HandleDataLib.handle_data_weight_based,
)
2. 提交模拟交易
提交模拟交易任务,任务名称可自定义。
3. 查看模拟交易
点击 AIstudio 左上角 BigQuant 图标,进入【我的策略】。
进入后可看到自己提交过的策略。
4. 接收信号
后续可通过网页、手机、电子邮箱来接收信号。手机接收信号需要关注并绑定 BigQuant 官方公众号。
5. 分享策略至天梯
完成模拟交易配置后,可将策略分享至天梯排行榜,与其他用户进行策略绩效比较。