在股票量化交易时,经常会使用到日K、周K及月K数据,那么我们如何利用日K的数据得到我们想要的周K及月K数据呢?
pandas中有一个专门处理周期的resample函数,可以很方便的对周期进行转换,下面以日K数据转化为周K及月K数据为例进行说明。
示例中使用的‘00000XSHcsv’文件,已上传至csdn资源中,可直接下载
导入数据
import pandas as pd
# 读取CSV文件
df = pd.read_csv("./000001.XSHE.csv")
# 显示前n行,默认是5
df.head()
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)
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)
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()
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线等。
更多干货内容持续更新中…
文章为作者独立观点,不代表股票交易接口观点