Python量化策略入门1-如何利用聚宽(JoinQuant)下载金融数据

@[TOC]量化策略入门1-如何利用聚宽(JoinQuant)下载金融数据

前言

量化策略入门系列文章是本人学习股票量化笔记,最终输出结果希望是一个可在本地运行的回测框架,包含数据获取,数据处理,策略回测等。

本文主要为了介绍如何利用聚宽(JoinQuant)的数据接口下载金融数据。主要针对量价数据(开盘价,收盘价,最高价,最低价,成交量等)。

使用宽聚(JoinQuant)的体验

宽聚(JoinQuant)提供了数据接口,可以方便的下载股票数据。使用下来唯一缺点是每日可下载数据量有限,每天最多可下载100万条(可通过申请多个账号解决)。不过,总体来看确实很方便,也没有找到更合适的数据源,暂且先用这个平台。

如何下载数据

具体流程如下

注册宽聚账号
申请数据权限
调用API下载数据

注册宽聚账号

不多赘述

申请数据权限

在主页即有相应入口

Python量化策略入门1-如何利用聚宽(JoinQuant)下载金融数据_第1张图片
Python量化策略入门1-如何利用聚宽(JoinQuant)下载金融数据_第2张图片

调用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, 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)

下载完数据如下。

在相应文件夹里为:
Python量化策略入门1-如何利用聚宽(JoinQuant)下载金融数据_第3张图片
每个csv文件里为:
Python量化策略入门1-如何利用聚宽(JoinQuant)下载金融数据_第4张图片

数据处理

以上我们已经获得了量化分析所需的基础数据,以每天一个csv形式存储,但是这样的存储方式并不利于数据调取。我们希望得到的数据形式是一个csv中包含所有股票在2010年1月1日到最近一个交易日的某项数据,如收盘价,如下图所示为历史收盘价信息。
Python量化策略入门1-如何利用聚宽(JoinQuant)下载金融数据_第5张图片
我们可以通过调取之前每日行情信息的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)

总结

以上就完成了基本每日行情数据的获取,通过计算对收盘价历史信息表等进行计算,可以很容易得到为收益表,为之后回测打下基础。计划会陆续介绍基于本文数据做策略回测,下载整理基本面数据,行业中性化等。

谢谢观看,欢迎指正。

你可能感兴趣的:(Python量化入门教程,python)