Python量化策略入门1

您所在的位置:网站首页 wind下载数据需要付费吗 Python量化策略入门1

Python量化策略入门1

2024-06-17 03:17| 来源: 网络整理| 查看: 265

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

前言

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

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

使用宽聚(JoinQuant)的体验

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

如何下载数据

具体流程如下

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

不多赘述

申请数据权限

在主页即有相应入口

在这里插入图片描述 在这里插入图片描述

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

下载完数据如下。

在相应文件夹里为: 在这里插入图片描述 每个csv文件里为: 在这里插入图片描述

数据处理

以上我们已经获得了量化分析所需的基础数据,以每天一个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) 总结

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

谢谢观看,欢迎指正。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3