数字量化系统之分析股票行情数据

金融数据获取

1、安装tushare

pip install tushare

2、获取股票数据

get_k_data(coe, start, end, ktype)

3、时序数据操作

pd.to_datetime():数据类型转换为时间类型

重采样

• 将时间序列从一个频率转换到另一个频率的过程。
• reample(freq).sum(), resampe(freq).mean(),resample(freq).last()...
• freq:基础频率

MA5:5日均线，表示将过去五日的数据加起来求平均值。

• rolling(window).func()
• window:窗口大小
• func: 滚动统计操作的函数

rolling(5).mean()

二、代码实战

import os
import pandas as pd
import matplotlib.pyplot as plt
import tushare as ts

# 股票编码
stock_code = '600519'

# 结果保存路劲
output_path = './output'
if not os.path.exists(output_path):
os.makedirs(output_path)

# 获取数据
def collect_data():
"""
获取数据
"""
stock_df = ts.get_k_data(code=stock_code, start='2010-01-01', end='2015-01-01', ktype=60)
return stock_df

def process_data(stock_df):
"""
数据处理
"""
stock_df['date'] = pd.to_datetime(stock_df['date'])
stock_df.set_index('date', inplace=True)
resampled_stock_df = stock_df.resample('D').last()
resampled_stock_df = resampled_stock_df.dropna(inplace=True)
return resampled_stock_df

def analyze_data(stock_df):
"""
分析数据
"""
stock_df['MA 5'] = stock_df['close'].rolling(window=5).mean()
stock_df['MA 30'] = stock_df['close'].rolling(window=30).mean()
stock_df['MA 60'] = stock_df['close'].rolling(window=60).mean()

return stock_df

def save_plot_results(stock_ext_df):
"""
结果展示（将5、30、60日均线画在一张图中）
"""
stock_ext_df.to_csv(os.path.join(output_path, 'stock_ext.csv'))
#pd数据可以直接调用plot方法画图
stock_ext_df[['close', 'MA 5', 'MA 30', 'MA 60']].plot()
plt.tight_layout()
plt.savefig(os.path.join(output_path, 'stock_ext.png'))
plt.show()

def main():
#数据获取
stock_df = collect_data()

# 处理数据
pro_stock_df = process_data(stock_df)

# 数据分析
stock_ext_df = analyze_data(pro_stock_df)

save_plot_results()

if __name__ == '__main__':
main()

知识点

• 金融数据获取 tushare
• 时序数据重采样 resample
• 时序数据滚动 rolling