楼主: wl142857
4030 0

[讨论交流] 【量化杂谈之基础篇8】时间与周期 [推广有奖]

  • 0关注
  • 34粉丝

硕士生

69%

还不是VIP/贵宾

-

威望
0
论坛币
201 个
通用积分
0
学术水平
11 点
热心指数
12 点
信用等级
8 点
经验
7085 点
帖子
84
精华
0
在线时间
281 小时
注册时间
2009-2-22
最后登录
2020-6-24

楼主
wl142857 发表于 2016-3-19 10:38:07 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

量化杂谈之基础篇系列文章:

基础篇1:https://bbs.pinggu.org/thread-4145710-1-1.html

基础篇2:https://bbs.pinggu.org/thread-4154818-1-1.html

基础篇3:https://bbs.pinggu.org/thread-4164534-1-1.html

基础篇4:https://bbs.pinggu.org/thread-4172585-1-1.html

基础篇5:https://bbs.pinggu.org/thread-4191475-1-1.html

基础篇6:https://bbs.pinggu.org/thread-4409589-1-1.html

基础篇7:https://bbs.pinggu.org/thread-4451050-1-1.html


今天我们来谈一下量化投资中涉及到的关于时间和周期的一些问题。


在前面的讲解中,大家应该还记得量化中的数据主要有两种:一种是tick数据,另一种则是bars数据。bars数据理解起来较为简单,它就是K线中蜡状图所包含的最高、最低、开盘、收盘等数据;bars数据是与周期有关的,如日K中看到的一根bar就是以1d为周期。对于什么是tick数据,我想大家可能还不太明白,下面我们对它的含义做了一个浅显的解释。


什么是Tick

在国内,tick是一种snapshot,它指的是间隔很短的时间(毫秒)对交易流数据进行快照。tick数据也包含了开盘价、最高价、最低价、最新价、成交量、成交额这些字段,需要注意的是这些数据是从开盘作为起始时间点计算的。这种tick数据可以理解为更加高频的bars数据,它并不能反映真实的订单成交情况,相邻的tick与tick数据之间可能发生了多笔成交事件。


真实的tick是把orderbook每一次变化的结果在成交价附近取一个快照记录下来,只要在交易委托book上最优买卖单的状态发生变化,那么就会产生一条tick数据。这里的状态改变指的是增加、减少订单数量,改变订单价格,订单成交等。


Bars周期的变换

Bars数据是与周期有关的,那么自然就产生了一个问题,如何将短周期的bars变换为长周期的bars数据。

我们以日线和周线为例来讲解周期变换的过程,周线中的各数据指标与日线指标之间的关系如下:

周线【close】= 本周最后一个交易日线【close】

周线【open] = 本周最后一个交易日线【open】

周线的【high】= max(本周所有日线【high】)

周线的【low】= min(本周所有日线【low】)

周线的【volume】= sum(本周所有日线【volume】)


在pandas函数中,使用resample能够非常方便地完成周期转换的工作。resample方法中有两个参数,一个参数是重采样的周期period,另一个参数是重采样的方法how。使用resample需要注意的是series中的index必须是 datetimeIndex。


下面的代码完整地展现了bars周期转换的实现方法。

  1. import pandas as pd
  2. import tushare as ts

  3. def convert_period(bars, period):
  4.     ''' convert bars to low freq bars'''
  5.     if not isinstance(bars.index,pd.DatetimeIndex):
  6.     bars.index = pd.DatetimeIndex(bars.index).to_datetime()
  7.     nbars = pd.DataFrame()
  8.     nbars['open'] = bars['open'].resample(period,how = 'first')
  9.     nbars['high'] = bars['high'].resample(period,how = 'max')
  10.     nbars['low'] = bars['low'].resample(period,how = 'min')
  11.     nbars['close'] = bars['close'].resample(period,how = 'last')
  12.     nbars['volume'] = bars['volume'].resample(period,how = 'sum')
  13.     return nbars
  14.    
  15. if __name__ == '__main__':
  16.     bars_60m = ts.get_hist_data('600848', ktype='60')
  17.     bars_1d = ts.get_h_data('002337', start='2015-01-01', end='2015-03-16')
  18.     convert_period(bars_1d,'W')
  19.     convert_period(bars_60m,'D')
复制代码

时间周期编码

从前面的讨论我们知道,任何bars数据都是内含周期的,于是便产生了一个问题:如何区分相同时间但不同周期的bars数据。我们需要一种通用的方法对时间周期进行编码,使得同一交易品种在不同时间周期的数据具有唯一性。编码的方式可以采用时间戳+周期自定义id的形式进行,实现该编码变换比较简单,大家有兴趣可以自己练习。



我的微信公众号:会掘金的小鹿(NuggetsRoad)
是时候关注一波了!

qrcode_for_gh_03dc7b049a2e_344.jpg



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:基础篇 Dataframe Resample datetime instance 文章 开盘 收盘

已有 1 人评分论坛币 收起 理由
fantuanxiaot + 33 精彩帖子

总评分: 论坛币 + 33   查看全部评分

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

本版微信群
加好友,备注jr
拉您进交流群
GMT+8, 2025-12-9 13:36