@[TOC]量化策略入门1-如何利用聚宽(JoinQuant)下载金融数据
量化策略入门系列文章是本人学习股票量化笔记,最终输出结果希望是一个可在本地运行的回测框架,包含数据获取,数据处理,策略回测等。
本文主要为了介绍如何利用聚宽(JoinQuant)的数据接口下载金融数据。主要针对量价数据(开盘价,收盘价,最高价,最低价,成交量等)。
宽聚(JoinQuant)提供了数据接口,可以方便的下载股票数据。使用下来唯一缺点是每日可下载数据量有限,每天最多可下载100万条(可通过申请多个账号解决)。不过,总体来看确实很方便,也没有找到更合适的数据源,暂且先用这个平台。
具体流程如下
不多赘述
在主页即有相应入口
通过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, timedelta
auth('宽聚账号','宽聚密码')
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].values
del 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中包含所有股票在2010年1月1日到最近一个交易日的某项数据,如收盘价,如下图所示为历史收盘价信息。
我们可以通过调取之前每日行情信息的csv,之后合并相关数据得到,具体代码如下。
import pandas as pd
import os
root = '每日行情csv所在文件夹地址'
def combine_data(root, keyword=None):
df_data = []
flag=0
for 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=1
df_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)
以上就完成了基本每日行情数据的获取,通过计算对收盘价历史信息表等进行计算,可以很容易得到为收益表,为之后回测打下基础。计划会陆续介绍基于本文数据做策略回测,下载整理基本面数据,行业中性化等。
谢谢观看,欢迎指正。