@[TOC]量化策略入门1-如何利用聚宽(JoinQuant)下载金融数据
前言
量化策略入门系列文章是本人学习股票量化笔记,最终输出结果希望是一个可在本地运行的回测框架,包含数据获取,数据处理,策略回测等。
本文主要为了介绍如何利用聚宽(JoinQuant)的数据接口下载金融数据。主要针对量价数据(开盘价,收盘价,最高价,最低价,成交量等)。
使用宽聚(JoinQuant)的体验
宽聚(JoinQuant)提供了数据接口,可以方便的下载股票数据。使用下来唯一缺点是每日可下载数据量有限,每天最多可下载100万条(可通过申请多个账号解决)。不过,总体来看确实很方便,也没有找到更合适的数据源,暂且先用这个平台。
如何下载数据
具体流程如下
注册宽聚账号
不多赘述
申请数据权限
在主页即有相应入口
调用API下载数据
通过get_price()方法可实现获取行情数据,具体文档如下亦可在链接中查看
get_price(security, start_date=None, end_date=None, frequency='daily', fields=None, skip_paused=False, fq='pre', count=None, panel=True, fill_paused=True)
需要的数据是全部股票从2010年1月1号到最新交易日股票的开盘价,收盘价,最高价,最低价,成交量等,其实现思路是写一个for循环历遍所有日期,并用以上代码查询当时股票数据。当然,有些日期非交易日,这种情况返回的数据很小(40-50KB),可以在文件夹里很容易识别出并删除。具体代码如下。
from jqdatasdk import *
import pandas as pd
from datetime import datetime, timedeltaauth('宽聚账号','宽聚密码') all_sec = list(get_all_securities(types=['stock']).index)
print(all_sec)def load_price(all_sec, start, end=):print(start)df = pd.DataFrame(get_price(all_sec, start_date=start, end_date=end, fields=['open', 'close', 'high', 'low', 'factor', 'volume', 'money']).values)df.columns = ['date', 'code', 'open', 'close', 'high', 'low', 'factor', 'volume', 'money']df.index = df.iloc[:, 1].valuesdel df['code']df.to_csv('.....')all_date = []start = '2010-01-01'
end = '2020-08-21'datestart = datetime.strptime(start, '%Y-%m-%d')
dateend = datetime.strptime(end, '%Y-%m-%d')while datestart < dateend:datestart += timedelta(days=1)all_date.append(datestart.strftime('%Y-%m-%d'))
print(all_date)for day in all_date:load_price(all_sec, start=day, end=day)
下载完数据如下。
在相应文件夹里为:
每个csv文件里为:
数据处理
以上我们已经获得了量化分析所需的基础数据,以每天一个csv形式存储,但是这样的存储方式并不利于数据调取。我们希望得到的数据形式是一个csv中包含所有股票在2010年1月1日到最近一个交易日的某项数据,如收盘价,如下图所示为历史收盘价信息。
我们可以通过调取之前每日行情信息的csv,之后合并相关数据得到,具体代码如下。
import pandas as pd
import osroot = '每日行情csv所在文件夹地址'def combine_data(root, keyword=None):df_data = []flag=0for dirpath, dirnames, filenames in os.walk(root):for filepath in filenames:address = os.path.join(dirpath, filepath)#过滤部分命名错误的文件if address[-21:-19] != '._':if flag==0:df = pd.read_csv(address, index_col=[0])df_data = pd.DataFrame(columns=list(df.index))date = df['date'][1]df_data.loc[date] = df[keyword]else:df = pd.read_csv(address, index_col=[0])date = df['date'][1]df_data.loc[date] = df[keyword]flag=1df_data.sort_index(ascending = True, inplace = True)df_data.to_csv('全部历史行情csv所在文件夹地址')print(df_data)for word in ['open', 'close', 'high', 'low', 'factor', 'volume','money']:combine_data(root, keyword=word)
总结
以上就完成了基本每日行情数据的获取,通过计算对收盘价历史信息表等进行计算,可以很容易得到为收益表,为之后回测打下基础。计划会陆续介绍基于本文数据做策略回测,下载整理基本面数据,行业中性化等。
谢谢观看,欢迎指正。