2021-03-06

本文介绍了如何通过Python编程,利用jqdatasdk库从聚宽平台获取股票或指数的历史日价格数据,并将其保存为CSV文件。文章提供了获取股票代码、检查已有数据并补充缺失数据的代码示例,适用于需要批量下载金融数据的场景。
摘要由CSDN通过智能技术生成
【转载】 获取jqdatasdk数据到本地并保存为csv文件 - Chris_Lau - JoinQuant
成功连接上jqdatasdk后最想做的一件事就是先把数据都下载下来,尤其是在聚宽对每日获取数据设限的条件下。本人使用的编程环境是Mac,目前还没有比Excel更适合本人的可视化工具,所以选择了保存为csv文件。以下是代码部分:

首先是一个引用文件,里面保存了一些共用的代码部分

# escape_list中的都是没有数据的股票或指数
escape_list = ['399940.XSHE', '399984.XSHE', '000765.XSHE'] 
orig = {"index": 'data_index_orig/', "stock": "data_stock_orig/"}

# 获取股票或指数代码
def get_codes(key, data_path):
    f_codes = data_path + codes_list
    if os.path.isfile(f_codes):
        with open(f_codes, 'r') as f:
            code_set = f.readline()
            code_set = code_set.strip('\n').split(',')
    else:
        code_set = get_all_securities(key).index.tolist()
        with open(f_codes, 'w') as f:
            f.writelines(','.join(code_set))
    return code_set

以下是实际的获取数据代码

# -*- coding: utf-8 -*-
#!/usr/bin/env python3

import pdb
import csv
import datetime
import data_util

import os.path as path
import pandas as pd

from jqdatasdk import *
auth('######', '###')


date_format = '%Y-%m-%d'

# 获取股票或指数的日牌价,只补齐没有下载的
def get_code_price(code, data_path=None):
    print("获取"+code+"的牌价")
    filename = data_path + code + '.csv'

    if path.isfile(filename):
        # 需要计算已有文件应该适用什么起止时间
        pre_price = pd.read_csv(filename, header=0, index_col=0)
        pre_price.index = pd.to_datetime(pre_price.index)
        dates = pre_price.index.tolist()
        startdate = (dates[-1] + datetime.timedelta(days=1)).strftime(date_format)
    else:
        startdate = "2005-01-01"
        pre_price = pd.DataFrame(columns=['open', 'close', 'high', 'low', 'volume', 'money'])
    enddate = (datetime.date.today() - datetime.timedelta(days=1)).strftime(date_format)
    price = get_price(code, start_date=startdate, end_date=enddate)
    if not pre_price.empty:
        price = pd.concat([pre_price, price], axis=0)
    price.to_csv(filename, header=True, date_format="%Y-%m-%d")


def main():
    # 编写代码时只用index的,正式测试的时候需要做成包含stock的列表型的
    # 后期用dict,key为index,value为DATA_INDEX_ORIG

    # 不知道字典是不是这么写的
    
    for key, data_path in data_util.orig.items():
        if not data_path:
            assert "Don't exist the directory."
            continue

        code_set = data_util.get_codes(key, data_path)
        nums = len(code_set)

        # 获取指数牌价
        print('Start to load index price for #{} indexes.'.format(nums))
        for code in code_set:
            if code not in data_util.escape_list:
                get_code_price(code, data_path=data_path)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值