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

金融数据获取

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:

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

计算5日均线:

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

为者常成,行者常至