BigQuant使用文档

日频模拟交易

由qxiao创建,最终由qxiao 被浏览 2 用户

概述

模拟交易功能是 BigQuant 特有的量化服务,可以根据用户的策略每日为用户通过手机、email 等途径推送信号。目前支持日频模拟交易的品种有:股票、期货、可转债、基金。

前提条件

  1. 账户更新余额充足(如更新数据需要大于 1C 的资源)
  2. 已经有一个成功回测的策略

操作步骤

  1. 完成回测,绑定实盘日期
  2. 提交模拟交易定时任务
  3. 查看模拟交易
  4. 接收信号
  5. 分享策略至天梯

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. 分享策略至天梯

完成模拟交易配置后,可将策略分享至天梯排行榜,与其他用户进行策略绩效比较。

{link}