如何快速的将日K线数据转换为周K线及月K线数据
在股票量化交易时,经常会使用到日K、周K及月K数据,那么我们如何利用日K的数据得到我们想要的周K及月K数据呢?
pandas中有一个专门处理周期的resample函数,可以很方便的对周期进行转换,下面以日K数据转化为周K及月K数据为例进行说明。
示例中使用的‘000001.XSHE.csv’文件,已上传至csdn资源中,可直接下载
导入数据
import pandas as pd
# 读取CSV文件
df = pd.read_csv('./000001.XSHE.csv')
# 显示前n行,默认是5
df.head()
date | open | close | high | low | volume | money | |
---|---|---|---|---|---|---|---|
0 | 2015/1/5 | 9.98 | 10.00 | 10.17 | 9.74 | 458099037 | 4.565388e+09 |
1 | 2015/1/6 | 9.90 | 9.85 | 10.23 | 9.71 | 346952496 | 3.453446e+09 |
2 | 2015/1/7 | 9.72 | 9.67 | 9.88 | 9.55 | 272274401 | 2.634796e+09 |
3 | 2015/1/8 | 9.68 | 9.34 | 9.72 | 9.30 | 225445502 | 2.128003e+09 |
4 | 2015/1/9 | 9.30 | 9.42 | 9.91 | 9.19 | 401736419 | 3.835378e+09 |
# 将交易日期字符串变为日期类型
df['date'] = pd.to_datetime(df['date'])
# 将日期列设为索引
df.set_index('date', inplace = True)
df.head(10)
open | close | high | low | volume | money | |
---|---|---|---|---|---|---|
date | ||||||
2015-01-05 | 9.98 | 10.00 | 10.17 | 9.74 | 458099037 | 4.565388e+09 |
2015-01-06 | 9.90 | 9.85 | 10.23 | 9.71 | 346952496 | 3.453446e+09 |
2015-01-07 | 9.72 | 9.67 | 9.88 | 9.55 | 272274401 | 2.634796e+09 |
2015-01-08 | 9.68 | 9.34 | 9.72 | 9.30 | 225445502 | 2.128003e+09 |
2015-01-09 | 9.30 | 9.42 | 9.91 | 9.19 | 401736419 | 3.835378e+09 |
2015-01-12 | 9.29 | 9.22 | 9.40 | 9.05 | 248759608 | 2.293105e+09 |
2015-01-13 | 9.15 | 9.17 | 9.30 | 9.12 | 130822538 | 1.204987e+09 |
2015-01-14 | 9.23 | 9.25 | 9.49 | 9.18 | 202274250 | 1.889297e+09 |
2015-01-15 | 9.27 | 9.58 | 9.58 | 9.19 | 198933635 | 1.868796e+09 |
2015-01-16 | 9.62 | 9.60 | 9.75 | 9.48 | 249168874 | 2.403346e+09 |
计算周K线数据,求每周的开盘价、收盘价、最大值、最小值
# 定义一个空的df
week_df = pd.DataFrame()
# 求每周的开盘价
week_df['open'] = df['open'].resample('W').first()
# 求每周的收盘价
week_df['close'] = df['close'].resample('W').last()
# 求每周的最大值
week_df['high'] = df['high'].resample('W').max()
# 求每周的最小值
week_df['low'] = df['low'].resample('W').min()
week_df.head(10)
open | close | high | low | |
---|---|---|---|---|
date | ||||
2015-01-11 | 9.98 | 9.42 | 10.23 | 9.19 |
2015-01-18 | 9.29 | 9.60 | 9.75 | 9.05 |
2015-01-25 | 8.75 | 8.99 | 9.14 | 8.47 |
2015-02-01 | 8.97 | 8.70 | 9.02 | 8.59 |
2015-02-08 | 8.49 | 8.44 | 9.01 | 8.37 |
2015-02-15 | 8.43 | 8.71 | 8.85 | 8.25 |
2015-02-22 | 8.71 | 8.74 | 8.81 | 8.57 |
2015-03-01 | 8.77 | 8.74 | 8.84 | 8.49 |
2015-03-08 | 8.76 | 8.39 | 8.80 | 8.30 |
2015-03-15 | 8.41 | 9.36 | 9.75 | 8.32 |
以上我们便通过股票的日K数据得到了周K数据。
定义周期转换函数,方便求周K与月K等数据
为了后续更方便的进行数据转换,我们可以直接封装一个函数,只需传输数据及想要转换的周期参数,即可得到相应周期的K线数据,函数定义如下:
def transfer_price_freq(data, time_freq):
"""
将数据转化为指定周期:开盘价(周期第一天)、收盘价(周期最后一天)、最高价(周期)、最低价(周期)
:param data:日数据,包含每天开盘价、收盘价、最高价、最低价
:param time_freq: 转换周期,周:‘W’,月:‘M’
:return:
"""
df_trans = pd.DataFrame()
df_trans['open'] = data['open'].resample(time_freq).first()
df_trans['close'] = data['close'].resample(time_freq).last()
df_trans['high'] = data['high'].resample(time_freq).max()
df_trans['low'] = data['low'].resample(time_freq).min()
return df_trans
# 我们传入df,及"M"参数即可得到月K数据
month_df = transfer_price_freq(df, 'M')
month_df.head()
open | close | high | low | |
---|---|---|---|---|
date | ||||
2015-01-31 | 9.98 | 8.70 | 10.23 | 8.47 |
2015-02-28 | 8.49 | 8.74 | 9.01 | 8.25 |
2015-03-31 | 8.76 | 9.83 | 10.37 | 8.30 |
2015-04-30 | 9.88 | 12.62 | 13.23 | 9.71 |
2015-05-31 | 12.62 | 11.58 | 12.78 | 11.32 |
同理如果我们有每分钟的股票数据,我们也可以通过该函数得到5分钟K线、10分钟K线、30分钟K线等。
如果内容对你有帮助,记得点赞、关注哦!也欢迎小伙伴们和我共同学习交流。
更多干货内容持续更新中…
也欢迎关注下方我的公众号,共同学习交流,获取更多学习资源。