(转自https://www.joinquant.com/view/community/detail/3375382b4751dc117d29c91bf82833af?type=2)
成功连接上jqdatasdk后最想做的一件事就是先把数据都下载下来,尤其是在聚宽对每日获取数据设限的条件下。本人使用的编程环境是Mac,目前还没有比Excel更适合本人的可视化工具,所以选择了保存为csv文件。不过还是真心希望小伙伴有比较好的sql可视化工具可以推荐给我[比心]。以下是代码部分:
首先是一个引用文件,里面保存了一些共用的代码部分
# 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)
if __name__ == '__main__':
main()
爱词霸
划词翻译
自动发声
自动添加生词本