使用python来合成K线数据
前言
量化程序中不免需要将行情数据合成自己所需要的周期级别,比如我有一堆周期为1分钟的原始数据,现在需要将它合成5分钟、10分钟、15分钟…等等周期级别的K线行情,那么需要怎么做呢?接下来直接进入主题!!!
提示:以下是本篇文章正文内容,下面案例可供参考
一、源数据
举个栗子里面的元素分别代表着 时间、合约、开、高、低、收、成交量、持仓量
二、使用步骤
1.引入库
import pandas as pd
2.数据格式
将数据类型转成上面二维数组的格式类型,然后将它转成DataFrame格式,方法如下,当然如果你的源数据是存在CSV文件中的,可以将它直接读取成DataFrame格式,我这边是从数据库中取出来的所以就存成数组的格式了# min1List ==> 源数据
# colums ==> 因为DataFrame是一种表格型数据结构,所以我们这边给它加一个列名,方便我们后面对它进行处理
colums = ['Time', 'Contract', 'Open', 'High', 'Low', 'Close', 'Volume', 'OpenInterest']
datas = pd.DataFrame(min1List, columns=colums)
# 下面这行是将时间转成datetime类型,因为我们需要将时间作为索引来使用,不转换格式在合成数据时会报错的
datas['Time'] = pd.to_datetime(datas['Time'])
datas.set_index('Time', inplace=True)
然后我们的datas输出结果如下图
2.合成
一切准备就绪,接下来我们合成数据,这里我是合成的15min的,如果想要合成别的也可以更改resample后的参数如’D’, ‘B’,‘30min’,参数网上有很多更详细的说明
def synthesis(datas):
df15min = datas.resample('15min', closed='right',label='right').agg({
'Contract': 'first',
'Open': 'first',
'High': 'max',
'Low': 'min',
'Close': 'last',
'Volume': 'sum',
'OpenInterest': 'sum'
}).dropna()
return df15min
好了这就完事了
还有一点要提的就是resample后closed和label这个参数,要取决于你合成的数据是要向前合成还是向后合成了,比如我将right改成left,那么结果又不一样了
好了大功告成,该入库的入库,该导出文件的导出文件