千家信息网

在VNPY中策略中如何使用分钟线合成日K线

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍在VNPY中策略中如何使用分钟线合成日K线,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在论坛里面看到不少关于分钟合成日线的讨论,也试着实现了。这里是针对vnp
千家信息网最后更新 2026年11月04日在VNPY中策略中如何使用分钟线合成日K线

这篇文章主要介绍在VNPY中策略中如何使用分钟线合成日K线,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

在论坛里面看到不少关于分钟合成日线的讨论,也试着实现了。这里是针对vnpy2.0的,1.92其实基本也差不多。

  1. 这里把合成的日线HLOC信息放在pandas.DataFrame里面,因为日线分析的话,对运算时间要求不是特别高,DataFrame足矣

  2. 合成过程放在on_bar方法里面,对每个传入的分钟进行日线合并处理;

  3. 这里用了trading == False进行判断,就是只在策略初始化过程对于历史数据进行日线合并。在交易过程中,不对当天传入分钟数据进行处理。因为日线是长周期数据,放在程序启动时候调用使用就可以,不必要盘中分析,如果打算真要,注释掉这个就可以。

  4. 这里只是提供了这个DataFrame 放置日线数据,具体如何分析还是要看使用者了

定于dayFrame存储日线数据,在策略定义中插入全局变量

class *********Strategy(CtaTemplate):    author = "用Python的交易员"    import pandas as pd    dayFrame = pd.DataFrame(columns=['datetime', 'high', 'low', 'open', 'close'])

合并过程,在on_bar 方法中插入下面代码

def on_bar(self, bar: BarData):    """       """if self.trading == False:    # adjustedBarTime = bar.datetime + timedelta(hours = 5)    if self.dayFrame.empty:        # 如果dayFrame 为空,先加入一条        self.dayFrame = self.dayFrame.append({'datetime': bar.datetime.date(), 'high':bar.high_price, 'low': bar.low_price, 'open': bar.open_price, 'close': bar.close_price},                                   ignore_index=True)    else:        self.dayFrame = self.dayFrame.sort_values(['datetime']).reset_index(drop=True)        # 如果dayFrame 不为空,先按照日期排序,        if bar.datetime.date() in self.dayFrame['datetime'].values:            # 如果是已有日期,对比high,low更新,并使用新close            self.dayFrame.loc[self.dayFrame['datetime'] == bar.datetime.date(), 'high'] = \                max(max(self.dayFrame.loc[self.dayFrame['datetime'] == bar.datetime.date(), 'high'].values),bar.high_price)            self.dayFrame.loc[self.dayFrame['datetime'] == bar.datetime.date(), 'low'] = \                min(min(self.dayFrame.loc[self.dayFrame['datetime'] == bar.datetime.date(), 'low'].values),bar.low_price)            self.dayFrame.loc[self.dayFrame['datetime'] == bar.datetime.date(), 'close'] = bar.close_price        else:            # 如果是新的日期,新建一条            self.dayFrame = self.dayFrame.append(                {'datetime': bar.datetime.date(), 'high': bar.high_price, 'low': bar.low_price,                 'open': bar.open_price, 'close': bar.close_price},                ignore_index=True)

另外,这里默认就是自然日。如果想按照国内期货期货时间,就是晚上九点开盘时间就是第二天的话。有个取巧的方法,就是把bar时间加上5个小时,那么下午9点就变成明天1点,这样dataframe就会存储为下一天数据。而当天15点加上5点20点还是当天数据。

不过这样改很粗糙,只能支持国内时间和国内期货,如果服务器再其他时区,或者其他产品就另外分析。

修改方法,定义局部变量adjustedBarTime,是传入bar.datetime 时间加5;代替后面新增代码中所有用到bar.datetime地方。

周五时候想到一个问题,对于国内期货,周五晚上数据属于周一的,想想还真是头大,这里还要加上一天判断是否第二天是周六,如果是就要改到加两天,幸好一般节假日之前的交易日晚上无夜盘,不然更麻烦。

from datetime import datetime, timedeltaif self.trading == False:    adjustedBarTime = bar.datetime + timedelta(hours = 5)    if adjustedBarTime.weekday() is 5:        adjustedBarTime = adjustedBarTime + timedelta(days= 2)

会插入如下数据,按照初始化使用天数,就会有多少条,

以上是"在VNPY中策略中如何使用分钟线合成日K线"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

数据 时间 就是 策略 方法 期货 过程 分析 成日 日期 交易 代码 内容 变量 时候 篇文章 还是 二天 处理 存储 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 山东特亿宝互联网科技有限公司 互联网与科技金融数据 互联网金融与金融科技 青岛互联网科技公司 上海喔噻互联网科技 互联网 新科技 互联网科技博客 欧洲十大科技互联网公司 花神(南京)互联网科技有限公司 互联网科技公司有风险吗 搜狐科技互联网 互联网科技大奖都有哪些公司 健康食品互联网创新科技园项目 乌鲁木齐新华智原互联网科技学校 东莞新华互联网科技学校 企晟互联网信息科技有限公司 电子商务与互联网科技的关系 有人说阿里系是互联网科技企业 科技互联网企业在行动 武汉亿视互联网科技有限公司 小米移动互联网科技园 美国互联网保险保险科技 河南猎农互联网科技有限公司 佛山市拉法互联网科技有限公司 美国互联网科技实力 银行科技岗属于互联网吗 产业互联网科技服务公司 四川互联网展示科技馆设计 互联网科技接地气 广西科技产业互联网是什么
0