返回列表 发布新帖
查看: 85|回复: 0

QMT策略回测中,在handlebar里,每天都取获取过去三天涨幅前50的品种

29

主题

70

回帖

257

积分

管理员

积分
257
发表于 2025-5-15 11:25:58 | 查看全部 |阅读模式
实现效果

代码分享
  1. # coding:gbk

  2. def init(C):
  3.     C.stock_list = C.get_stock_list_in_sector('沪深300')
  4.     return


  5. def handlebar(C):
  6.     #当前k线日期
  7.     bar_date = timetag_to_datetime(C.get_bar_timetag(C.barpos), '%Y%m%d%H%M%S')
  8.     #回测不需要订阅最新行情使用本地数据速度更快 指定subscribe参数为否. 如果回测多个品种 需要先下载对应周期历史数据
  9.     local_data = C.get_market_data_ex(['close'], C.stock_list, end_time = bar_date, period = C.period, count = 3)

  10.     # 初始化涨幅和日期范围存储结构
  11.     growth_rates = {}

  12.     for stock, df in local_data.items():
  13.         # 确保DataFrame是按日期排序的
  14.         df_sorted = df.sort_index()
  15.         # 计算涨幅:(最后一天的收盘价 - 第一天的收盘价) / 第一天的收盘价
  16.         if len(df_sorted) >= 2:  # 确保有至少两天的数据来计算涨幅
  17.             start_date = df_sorted.index[0]
  18.             end_date = df_sorted.index[-1]
  19.             growth_rate = (df_sorted['close'].iloc[-1] - df_sorted['close'].iloc[0]) / df_sorted['close'].iloc[0]
  20.             # 存储涨幅和日期范围
  21.             growth_rates[stock] = (growth_rate, start_date, end_date)

  22.     # 将股票根据涨幅进行排序,得到一个由(股票, (涨幅, 起始日期, 结束日期))组成的列表
  23.     sorted_growth_rates = sorted(growth_rates.items(), key=lambda x: x[1][0], reverse=True)

  24.     # 提取排序后的前50个股票的名称
  25.     top_50_stocks = [stock for stock, _ in sorted_growth_rates[:50]]

  26.     # 打印股票列表
  27.     print(f"{bar_date}Top 50 stocks by growth rate:")
  28.     print(top_50_stocks)
复制代码



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

投诉/建议联系

admin@discuz.vip

未经授权禁止转载,复制和建立镜像,
如有违反,追究法律责任
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2025 zeniquant 版权所有 All Rights Reserved. 粤ICP备2025409975号-1
关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表