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

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

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

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

这里只是提供了这个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)

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

python k线合成_在VNPY中策略中,使用分钟线合成日K线相关推荐

  1. vnpy合成日k线周k线

    VNPY 使用k生成器BarGenerator合成日线数据 问题起因 vnpy合成k线原理 策略类Strategy ArrayManager BarGenerator Strategy.on_tick ...

  2. python k线合成_手把手教你写一个Python版的K线合成函数

    手把手教你写一个Python版的K线合成函数 在编写.使用策略时,经常会使用一些不常用的K线周期数据.然而交易所.数据源又没有提供这些周期的数据.只能通过使用已有周期的数据进行合成.合成算法已经有一个 ...

  3. python 链表倒数第k个节点_链表-删除单链表中倒数第k个节点

    题目 实现一个函数,一个可以删除单链表中倒数第k个节点 难度 简单 分析 本题比较简单,实现方法多种多样,这里提供一种方法 首先明确一点,在单链表中删除倒数第k个节点,需要找到他的前一个节点,让前一个 ...

  4. python计算对数收益率_为VNPY的K线序列管理工具ArrayManager增加对数收益率队列

    在做策略建模的时候,经常需要把K线转换为可以正态分布数据,这样可以使用那些很牛吼吼的数学模型进行挖掘. 实现很简单 c = ln(t1/t0) 如果我们考察单一投资品在总共 T 期内的表现,那应该用对 ...

  5. python交互式环境执行_如何在交互式环境中执行Python程序

    如何在交互式环境中执行Python程序 相信接触过Python的小伙伴们都知道运行Python脚本程序的方式有多种,目前主要的方式有:交互式环境运行.命令行窗口运行.开发工具上运行等,其中在不同C d ...

  6. python人工智能大数据_人工智能及大数据中的Python

    2016年,Python取代Java成为高校中最受欢迎的语言.2018年三大语言榜单中,Python陆续登上了IEEE.PYPL排行榜单之首.薪酬调查结果显示,Python开发人员是收入最高的开发人员 ...

  7. python使用作为转义字符_当需要在字符串中使用特殊字符时, Python使用()作为转义字符。...

    当需传统中国社会的"法制"意味着( ) 字符字符作为转义字符GPS信号接收机,根据接收卫星的信号频率,可分为 串中地面点的平面位置可用哪些方式表示 使用时使用缓和曲线需要的主点定位 ...

  8. python展示数据库视图_在Django的视图中使用数据库查询的方法

    在视图中也有笨方法可以从数据库中获取数据. 很简单: 用现有的任何 Python 类库执行一条 SQL 查询并对结果进行一些处理. 在本例的视图中,我们使用了 MySQLdb 类库(可以从 http: ...

  9. 如何用python实现地图定位_基于 PyQt5 实现地图中定位相片拍摄位置

    项目简介:本次项目主要学习了如何查找相片中的 Exif 信息,并通过 Exif 信息中的 GPS 数据在百度地图中进行定位标点,以确定相片的拍摄地点.本次实验的目的旨在通过包含 GPS 信息的相片进行 ...

  10. python如何输出结果_如何在python2.7中打印输出结果?

    我正在存储一些数据,如温度,湿度和强度,这是我的Arduino输出和输入为我的python2.7,我正在绘制图表的数据.我也想将Arduino输出存储到文本文件中,但是我无法这样做: 这是我的pyth ...

最新文章

  1. Linux下C++开发工具介绍
  2. mysql unsigned zerofill_Mysql中Unsigned和Zerofill数据型的使用(细节也很重要啊)
  3. ffmpeg综合应用示例(一)——摄像头直播
  4. 学python用什么教材-金融学专业学python用什么教材或课外资料比较好?
  5. 【IT笔试面试题整理】二叉树中和为某一值的路径--所有可能路径
  6. ubuntu 14.04 LTS(64bit) Anaconda2 + Theano(1.0.2) + Keras安装
  7. Wireshark数据包分析之数据包信息解读
  8. ZooKeeper官方文档学习笔记04-ZooKeeper的Java实例
  9. android studio 导入c,3.3、Android Studio 添加 C 和 C++ 项目
  10. 六石管理学: 头目们是如何忽略产品质量的
  11. 简述使用configurations.all统一androidx的版本
  12. 文科生学大数据分析吃力吗
  13. 如何结交阿里P9,腾讯T4这样的大佬?
  14. 自学Vue开发Dapp去中心化钱包(一)
  15. flink Table Api 理论篇
  16. CocosCreator知识库amp;amp;lt;二amp;amp;gt;关于TiledMap的系统学习教程(阶段性更新)
  17. XHR level2的新功能
  18. 面向服务框架WebServiceBPM系统
  19. Eclipse Web项目目录详解
  20. 微信小程序采用手风琴组件进行图纸检索

热门文章

  1. RichContentLabel使用注意
  2. listbox里面添加WrapPanel ,支持自适应换行
  3. DEDECMS首页调用单页文档内容并带过滤HTML的方法
  4. IE6 PNG 透明
  5. The binding handle is invalid 绑定句柄无效
  6. 第1章 Spark SQL概述
  7. Python中序列,列表,元组,字典及集合
  8. iOS商城demo、音乐播放器、视频通话、自定义搜索、转场动画等源码
  9. 【网络流24题】魔术球
  10. RedHat 6.4源码方式安装mysql5.5