返回列表 发布新帖

日线周期取分笔数据回测示例

2273 2
发表于 2023-12-27 13:55:45 | 显示全部楼层 阅读模式
#coding:gbk

"""
在日线周期回测 每天取当日的分笔 遍历判断买卖点
运行前需要先下载对应时间段的分笔数据
注意点: 分笔数据中的价格时不复权的 要手动复权后 在发对应价格的买卖信号 前复权时除以之后的复权因子 后复权时乘以之后复权因子
"""

def init(C):
    C.stock = C.stockcode + '.' + C.market
    div_dict = C.get_divid_factors(C.stock, '')
    C.div_dict = {timetag_to_datetime(i, "%Y%m%d") : div_dict[i][-1] for i in div_dict}


def handlebar(C):
    d = C.barpos
    t = C.get_bar_timetag(d)
    bar_date = timetag_to_datetime(t, "%Y%m%d")
    #示例 对20231121日的分笔遍历
    stock = C.stock
    #print(bar_date)
    if bar_date == '20231121':
        tick_data = C.get_market_data_ex([], [stock], period = 'tick', start_time = bar_date + '093000', end_time = bar_date + '145700', subscribe = False)
        if stock not in tick_data or len(tick_data[stock]) == 0:
            print(bar_date, f"未取到分笔数据 请检查是否下载过")
            return
        tick_data = tick_data[stock]
        bought = False
        for i in tick_data.index:
            stime = tick_data.loc[i, 'stime'].split('.')[0]
            current_price = tick_data.loc[i, 'lastPrice']
            pre_price = tick_data.loc[i, 'lastClose']
            open_price = tick_data.loc[i, 'open']
            high_price = tick_data.loc[i, 'high']
            low_price = tick_data.loc[i, 'low']
            #可以打印各期数值
            print(stime, f"昨收 {pre_price} 开盘价 {open_price} 当前价 {current_price} 最高价 {high_price} 最低价 {low_price}")
            #示例买入条件
            if not bought and current_price > open_price + 0.01:
                #如果后边除权过 对价格除权
                if stock in C.div_dict:
                    div_factor = 1
                    for date in C.div_dict:
                        if date >= bar_date:
                            div_factor *= C.div_dict[date]
                    if div_factor > 1:
                        print(f"对价格除权 除权因子 {div_factor}")
                        buy_price = round(current_price / div_factor,2)
                else:
                    buy_price = current_price
                msg =f"{stime} {buy_price} 买入 10000股"
                print(msg)
                passorder(23, 1101, 'test', stock, 11, buy_price, 10000, C)
                bought = True

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

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

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

企业微信截图_17235220909173.png

评论2

Liwu楼主
发表于 2023-12-27 13:57:13 | 显示全部楼层
要注意:
1 取分笔数据前要先下载到本地.
2 分笔数据时不复权的价格, 需要手动除复权因子
*******6371
发表于 2024-5-26 18:39:41 | 显示全部楼层

[quote][size=2][color=#999999]Liwu 发表于 2023-12-27 13:57[/color][/size] 要注意: 1 取分笔数据前要先下载到本地. 2 分笔数据时不复权的价格, 需要手动除复权因子 ...[/quote]

image.png请教一下楼主,按你上面的例子,回测模式下,这个时间打印出来不是按回测时间来标注的,一直是同一个值,这个需要如何解决?

回复

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

客服专线

400-080-8112

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