返回列表 发布新帖

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

2680 2
发表于 2024-2-22 20:34:43 | 显示全部楼层 阅读模式

实现效果

企业微信截图_17086051665869.png

代码分享

# coding:gbk

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


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

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

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

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

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

    # 打印股票列表
    print(f"{bar_date}Top 50 stocks by growth rate:")
    print(top_50_stocks)

不清楚的内容可添加下方助理微信咨询,有其他 QMT 小技巧想学习的吗?欢迎在下方留言,笔者将根据大家的留言持续更新哦!

欢迎和我一起加入迅投组建的 QMT 实战交流社群,交流群内有许多做量化交易的高手和大佬,具有良好的分享和互助氛围。且迅投官方会不定期为多次分享、乐于助人的群友申请送投研专业版的机会。

只需扫描下方的二维码,名额有限,限时加入。一起分享见解、交换信息、并共同进步,就像群友说的:“就算周末,晚上也有地方沟通交流!”

企业微信截图_17235220909173.png

评论2

心如止水
发表于 2024-3-29 10:54:35 | 显示全部楼层
还有其他想学习的 QMT 小技巧吗?欢迎大家在下方留言,版主将根据大家的留言持续更新哦!
*******0889
发表于 2024-8-21 14:46:29 | 显示全部楼层
非常感谢

回复

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

客服专线

400-080-8112

用思考的速度交易,用真诚的态度合作,我们是认真的!
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2025 迅投QMT社区 版权所有 All Rights Reserved. 蜀ICP备19002686号-2
关灯 快速发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表