温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-11-30 17:26:43 来源:亿速云 阅读:221 作者:小新 栏目:编程语言

这篇文章主要介绍在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, timedelta
if self.trading == False:
    adjustedBarTime = bar.datetime + timedelta(hours = 5)
    if adjustedBarTime.weekday() is 5:
        adjustedBarTime = adjustedBarTime + timedelta(days= 2)

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

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

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI