BigQuant使用文档

对量化策略——“买入并持有” 进行本地回测

由small_q创建,最终由bq1fuwkt 被浏览 27 用户

问题描述

我是量化交易新手,想用 BigQuant SDK 对策略进行本地回测,应该如何实现?

P.S “本地回测” 功能因官方包发行版本不支持 mac 的原因,暂时仅支持 win / linux 平台

详细解答

示例策略——“买入并持有”

“买入并持有策略” 是最基础的量化策略。本地回测将用该策略作为示例策略

  1. 定义初始化函数 - 设置佣金费
from bigquant import bigtrader


def initialize(context: bigtrader.IContext):
    context.set_commission(equities_commission={
            "buy_cost": 0.0003,    # 买入佣金率
            "sell_cost": 0.0003,   # 卖出佣金率
            "min_cost": 5,          # 最小佣金
        }
    )
  • 关键说明
    • 也可以使用佣金模型来设置
from bigquant import bigtrader


def initialize(context: bigtrader.IContext):
    context.set_commission(equities_commission=bigtrader.PerOrder(
            buy_cost=0.0003,    # 买入佣金率
            sell_cost=0.0003,   # 卖出佣金率
            min_cost=5,          # 最小佣金
        )
    )

2. 定义数据处理函数——在第一个交易日买入

def handle_data(context: bigtrader.IContext, data: bigtrader.IBarData):
    # trading_day_index 是当前交易日的索引,0 表示第一个交易日

    if context.trading_day_index == 0:
      # 买入1000股平安银行(000001.SZ)
      context.order("000001.SZ", 1000)

      context.logger.info(f"在 {data.current_dt} 买入1000股平安银行")

策略回测

  1. 策略回测
performance = bigtrader.run(
    market=bigtrader.Market.CN_STOCK,       # 市场:中国A股
    frequency=bigtrader.Frequency.DAILY,    # 频率:日线
    instruments=["000001.SZ"],              # 交易标的:平安银行
    start_date="2024-01-01",                # 回测开始日期
    end_date="2024-12-31",                  # 回测结束日期
    capital_base=1000000,                   # 初始资金:100万
    initialize=initialize,                  # 传入初始化函数
    handle_data=handle_data,                # 传入数据处理函数
)
  1. 查看回测结果
print(performance.read_raw_perf())           # 获取原始性能数据
  • 关键说明
    • performance.get_stats():计算并返回关键的性能指标,包括收益率、风险指标等。

关键概念解释

initialize 函数

在回测开始前执行一次,用于设置策略参数(如佣金、滑点等)

handle_data 函数

每个交易日都会调用,用于编写交易逻辑

context.order()

下单函数,正数表示买入,负数表示卖出

performance.read_raw_perf()

获取原始性能数据

运行结果

更多资料

\

{link}