对量化策略——“买入并持有” 进行本地回测
由small_q创建,最终由bq1fuwkt 被浏览 27 用户
问题描述
我是量化交易新手,想用 BigQuant SDK 对策略进行本地回测,应该如何实现?
P.S “本地回测” 功能因官方包发行版本不支持 mac 的原因,暂时仅支持 win / linux 平台
详细解答
示例策略——“买入并持有”
“买入并持有策略” 是最基础的量化策略。本地回测将用该策略作为示例策略
- 定义初始化函数 - 设置佣金费
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股平安银行")
策略回测
- 策略回测
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, # 传入数据处理函数
)
- 查看回测结果
print(performance.read_raw_perf()) # 获取原始性能数据
- 关键说明
- performance.get_stats():计算并返回关键的性能指标,包括收益率、风险指标等。
关键概念解释
initialize 函数
在回测开始前执行一次,用于设置策略参数(如佣金、滑点等)
handle_data 函数
每个交易日都会调用,用于编写交易逻辑
context.order()
下单函数,正数表示买入,负数表示卖出
performance.read_raw_perf()
获取原始性能数据
运行结果
更多资料
\