转载的别人的资料,yuzhucu@CSDN

# -*- coding:utf-8 -*-

####################################################################################################################

'''

程序:Wind股票数据下载

功能:从Wind终端或者Wind资讯量化接口个人免费版中下载股票相关数据,保存至本地MySQL数据库,以进一步加工处理和分析

创建时间:2016/01/15 V1.01 创建版本,Python2.7

更新历史:2017/01/06 V1.02 从本地文件读取股票代码列表;升级到Python3.5版本

2017/01/07 V1.03 封装为函数,便于调试和代码管理

2017/01/08 V1.04 封装为类,为后续完善功能准备。自动从Wind中获取股票列表,独立运行;增加日志和参数处理

环境和类库:使用Python 3.5及第三方库pandas、WindPy、sqlalchemy

数据库:MySQL 5.7.16

Wind资讯量化接口 个人版(免费),可从Wind官网或大奖章网站下载安装,注册即可使用

作者:yuzhucu

'''

####################################################################################################################

import pandas as pd

from WindPy import *

from sqlalchemy import create_engine

import datetime,time

import os

class WindStock():

def getCurrentTime(self):

# 获取当前时间

return time.strftime('[%Y-%m-%d %H:%M:%S]', time.localtime(time.time()))

def AStockHisData(self,symbols,start_date,end_date,step=0):

'''

逐个股票代码查询行情数据

wsd代码可以借助 WindNavigator自动生成copy即可使用;时间参数不设,默认取当前日期,可能是非交易日没数据;

只有一个时间参数时,默认作为为起始时间,结束时间默认为当前日期;如设置两个时间参数则依次为起止时间

'''

print(self.getCurrentTime(),": Download A Stock Starting:")

for symbol in symbols:

w.start()

try:

#stock=w.wsd(symbol,'trade_code,open,high,low,close,volume,amt',start_date,end_date)

'''

wsd代码可以借助 WindNavigator自动生成copy即可使用;

时间参数不设,默认取当前日期,可能是非交易日没数据;

只有一个时间参数,默认为起始时间到最新;如设置两个时间参数则依次为起止时间

'''

stock=w.wsd(symbol, "trade_code,open,high,low,close,pre_close,volume,amt,dealnum,chg,pct_chg,vwap, adjfactor,close2,turn,free_turn,oi,oi_chg,pre_settle,settle,chg_settlement,pct_chg_settlement, lastradeday_s,last_trade_day,rel_ipo_chg,rel_ipo_pct_chg,susp_reason,close3, pe_ttm,val_pe_deducted_ttm,pe_lyr,pb_lf,ps_ttm,ps_lyr,dividendyield2,ev,mkt_cap_ard,pb_mrq,pcf_ocf_ttm,pcf_ncf_ttm,pcf_ocflyr,pcf_nflyr,trade_status", start_date,end_date)

index_data = pd.DataFrame()

index_data['trade_date']=stock.Times

stock.Data[0]=symbol

index_data['stock_code']=stock.Data[0]

#index_data['stock_code'] =symbol

index_data['open'] =stock.Data[1]

index_data['high'] =stock.Data[2]

index_data['low'] =stock.Data[3]

index_data['close']=stock.Data[4]

index_data['pre_close']=stock.Data[5]

index_data['volume']=stock.Data[6]

index_data['amt']=stock.Data[7]

index_data['dealnum']=stock.Data[8]

index_data['chg']=stock.Data[9]

index_data['pct_chg']=stock.Data[10]

#index_data['pct_chg']=index_data['pct_chg']/100

index_data['vwap']=stock.Data[11]

index_data['adj_factor']=stock.Data[12]

index_data['close2']=stock.Data[13]

index_data['turn']=stock.Data[14]

index_data['free_turn']=stock.Data[15]

index_data['oi']=stock.Data[16]

index_data['oi_chg']=stock.Data[17]

index_data['pre_settle']=stock.Data[18]

index_data['settle']=stock.Data[19]

index_data['chg_settlement']=stock.Data[20]

index_data['pct_chg_settlement']=stock.Data[21]

index_data['lastradeday_s']=stock.Data[22]

index_data['last_trade_day']=stock.Data[23]

index_data['rel_ipo_chg']=stock.Data[24]

index_data['rel_ipo_pct_chg']=stock.Data[25]

index_data['susp_reason']=stock.Data[26]

index_data['close3']=stock.Data[27]

index_data['pe_ttm']=stock.Data[28]

index_data['val_pe_deducted_ttm']=stock.Data[29]

index_data['pe_lyr']=stock.Data[30]

index_data['pb_lf']=stock.Data[31]

index_data['ps_ttm']=stock.Data[32]

index_data['ps_lyr']=stock.Data[33]

index_data['dividendyield2']=stock.Data[34]

index_data['ev']=stock.Data[35]

index_data['mkt_cap_ard']=stock.Data[36]

index_data['pb_mrq']=stock.Data[37]

index_data['pcf_ocf_ttm']=stock.Data[38]

index_data['pcf_ncf_ttm']=stock.Data[39]

index_data['pcf_ocflyr']=stock.Data[40]

index_data['pcf_ncflyr']=stock.Data[41]

index_data['trade_status']=stock.Data[42]

index_data['data_source']='Wind'

index_data['created_date']=time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))

index_data['updated_date']=time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))

index_data = index_data[index_data['open'] > 0]

#index_data.fillna(0)

try:

index_data.to_sql('stock_daily_data',engine,if_exists='append');

except Exception as e:

#如果写入数据库失败,写入日志表,便于后续分析处理

error_log=pd.DataFrame()

error_log['trade_date']=stock.Times

error_log['stock_code']=stock.Data[0]

error_log['start_date']=start_date

error_log['end_date']=end_date

error_log['status']=None

error_log['table']='stock_daily_data'

error_log['args']='Symbol: '+symbol+' From '+start_date+' To '+end_date

error_log['error_info']=e

error_log['created_date']=time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))

error_log.to_sql('stock_error_log',engine,if_exists='append')

print ( self.getCurrentTime(),": SQL Exception :%s" % (e) )

continue

w.start()

except Exception as e:

#如果读取处理失败,可能是网络中断、频繁访问被限、历史数据缺失等原因。写入相关信息到日志表,便于后续补充处理

error_log=pd.DataFrame()

error_log['trade_date']=stock.Times

error_log['stock_code']=stock.Data[0]

error_log['start_date']=start_date

error_log['end_date']=end_date

error_log['status']=None

error_log['table']='stock_daily_data'

error_log['args']='Symbol: '+symbol+' From '+start_date+' To '+end_date

error_log['error_info']=e

error_log['created_date']=time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))

error_log.to_sql('stock_error_log',engine,if_exists='append')

print ( self.getCurrentTime(),":index_data %s : Exception :%s" % (symbol,e) )

time.sleep(sleep_time)

w.start()

continue

print(self.getCurrentTime(),": Downloading [",symbol,"] From "+start_date+" to "+end_date)

print(self.getCurrentTime(),": Download A Stock Has Finished .")

def getAStockCodesFromCsv(self):

'''

获取股票代码清单,链接数据库

'''

file_path=os.path.join(os.getcwd(),'Stock.csv')

stock_code = pd.read_csv(filepath_or_buffer=file_path, encoding='gbk')

Code=stock_code.code

return Code

def getAStockCodesWind(end_date=time.strftime('%Y%m%d',time.localtime(time.time()))):

'''

通过wset数据集获取所有A股股票代码,深市代码为股票代码+SZ后缀,沪市代码为股票代码+SH后缀。

如设定日期参数,则获取参数指定日期所有A股代码,不指定日期参数则默认为当前日期

:return: 指定日期所有A股代码,不指定日期默认为最新日期

'''

w.start()

#加日期参数取最指定日期股票代码

#stockCodes=w.wset("sectorconstituent","date="+end_date+";sectorid=a001010100000000;field=wind_code")

#不加日期参数取最新股票代码

stockCodes=w.wset("sectorconstituent","sectorid=a001010100000000;field=wind_code")

return stockCodes.Data[0]

#return stockCodes

def main():

'''

主调函数,可以通过参数调整实现分批下载

'''

global engine,sleep_time,symbols

sleep_time=5

windStock=WindStock()

engine = create_engine('mysql://root:root@localhost/invest?charset=utf8')

#start_date='20100101'

#end_date='20131231'

#symbols=windStock.getAStockCodesFromCsv()#通过文件获取股票代码

#symbols=windStock.getAStockCodesWind()

#通过Wind API获取股票代码,默认取最新的,可以指定取历史某一日所有A股代码

#symbols=['000001.SZ', '000002.SZ', '000004.SZ']#通过直接赋值获取股票代码用于测试

#print (symbols)

#windStock.AStockHisData(symbols,start_date,end_date)

for i in range(2013,1990,-1):

start_date=str(i)+'0101'

end_date=str(i)+'1231'

print (start_date,end_date,'Starting')

symbols=windStock.getAStockCodesWind()

windStock.AStockHisData(symbols,start_date,end_date)

print (start_date,end_date,'Finished')

def test():

'''

测试脚本,新增和优化功能时使用

'''

symbol='000001.SZ'

start_date='20170101'

end_date='20170109'

#w.start();

#stock=w.wsd(symbol,'trade_code,open,high,low,close')

#stock=w.wsd(symbol, "trade_status,open,high,low,close,pre_close,volume,amt,dealnum,chg,pct_chg,vwap, adjfactor,close2,turn,free_turn,oi,oi_chg,pre_settle,settle,chg_settlement,pct_chg_settlement, lastradeday_s,last_trade_day,rel_ipo_chg,rel_ipo_pct_chg,susp_reason,close3, pe_ttm,val_pe_deducted_ttm,pe_lyr,pb_lf,ps_ttm,ps_lyr,dividendyield2,ev,mkt_cap_ard,pb_mrq,pcf_ocf_ttm,pcf_ncf_ttm,pcf_ocflyr,pcf_nflyr", start_date,end_date)

#stock=w.wsd("000001.SZ", "pre_close,open,high,low,close,volume,amt,dealnum,chg,pct_chg,vwap,adjfactor,close2,turn,free_turn,oi,oi_chg,pre_settle,settle,chg_settlement,pct_chg_settlement,lastradeday_s,last_trade_day,rel_ipo_chg,rel_ipo_pct_chg,trade_status,susp_reason,close3", "2016-12-09", "2017-01-07", "adjDate=0")

#print (stock)

for i in range(2014,1990,-1):

start_date=str(i)+'0101'

end_date=str(i)+'1231'

print (start_date,end_date)

if __name__ == "__main__":

main()

wind python接口_从wind python接口获取数据并存储相关推荐

  1. 微信小程序实名认证接口_人脸核身接口整理

    一.微信小程序实名认证接口_人脸核身接口整理 开场一个字: 悲观.目前实名接口,人脸识别接口开放度不高."实名信息授权"已经回收. 二.人脸核身接口 1.使用条件 需要现申请通过才 ...

  2. wind金融数据接口python_从wind python接口获取数据并存储

    转载的别人的资料,yuzhucu@CSDN # -*- coding:utf-8 -*- ####################################################### ...

  3. cuda编程python接口_混合编程[python+cpp+cuda]

    很多时候,我们是基于python进行模型的设计和运行,可是基于python本身的速度问题,使得原生态python代码无法满足生产需求,不过我们可以借助其他编程语言来缓解python开发的性能瓶颈.这里 ...

  4. python调用钉钉接口_关于钉钉接口使用Python,Post 500报错

    我用Python来处理钉钉的接口 现在遇到一个问题,get请求都是能用的,post数据就会报500错误 我使用的接口是(获取用户待审批数量) https://open-doc.dingtalk.com ...

  5. python可以爬取wind数据库吗_如何利用Python来爬取近百万条数据?数据库会炸吧?...

    2.页面分析 发现一共有88万多个问题,再看一下页面的列表规律,我们按照每页最大显示50个问题,一共有17776页,数据非常大 1).页面列表的构建 整个的stackoverflow上关于Python ...

  6. 简单几段python代码_如何用python跑一段鸿蒙最简单代码?

    首先,鸿蒙并不支持python,HarmonyOS代码开发支持多语言,包括Java.XML(Extensible Markup Language).C/C++ . JS(JavaScript).CSS ...

  7. python缓冲区_如何在Python中使用Google的协议缓冲区

    python缓冲区 When people who speak different languages get together and talk, they try to use a languag ...

  8. python 串口_如何使用Python开发串口通讯上位机(一)

    用Python开发串口通讯型上位机,其实并非最优解,本系列更新只为个人学习与总结.如果有C语言底子,嵌入式层面的上位机开发,C++ Builder,C#才是更加好用的利器. 1 什么是上位机 从事过嵌 ...

  9. 哪个专业学python语言_想学Python编程?你真的适合吗?

    原标题:想学Python编程?你真的适合吗? 有的人说我想学什么.我想干什么,很多时候都是头脑发热,单凭一腔热血,可是这样的路即便走上去你又能坚持多久呢?所以,每每有人问我学Python编程怎么样,我 ...

最新文章

  1. 实例教程:1小时学会Python
  2. centos6.5卸载java_删除CentOS6.5系统自带的jdk
  3. Java 冒泡排序的实现
  4. 下列哪一项不是计算机网络的典型应用,09级计算机信息网络试卷A
  5. 如何轻松记忆Linux文件系统层次结构
  6. QQ号终于可以当传家宝了!没车没房的,就留几个游戏账号给儿子吧?
  7. 获取当前html的名字,c#获取当前页面名字
  8. vue 获取本地的json文件内容
  9. 机器学习数学基础:学习线性代数,千万不要误入歧途!推荐一个正确学习路线
  10. 瑞利信道的多普勒谱的原理与MATLAB仿真
  11. Linux安装MySQL提示缺少libaio.so.1包问题
  12. SSIS(简单数据抽取过程介绍)
  13. 手机问卷调查报告 html,关于手机的问卷调查调研报告.doc
  14. FPGA设计——verilog实现乒乓操作并modelsim仿真
  15. 安卓P 自动调节亮度打开的状态下,手动拖动亮度条后,自动调节亮度失效
  16. 使用长角牛演示:防止ARP协议被攻击原理和配置
  17. 手机报彩信易操作平台
  18. Android的识花软件推荐,形色、苗叔、花伴侣三大主流识花软件全面评测
  19. Effective-Java 谨慎使用流并行
  20. 计算机房系统进入方法,学校机房电脑系统恢复的方法

热门文章

  1. linux根据端口查询PID
  2. 【DBN分类】基于麻雀算法优化深度置信网络SSA-DBN实现数据分类附matlab代码
  3. php搜索功能实现,PHP 搜索查询功能实现
  4. azure不支持哪些语句 sql_Azure SQL数据库已经支持JSON
  5. Excel VBA 宏自动创建表格
  6. VEGAS Movie Studio渲染时该选什么格式好?
  7. 看华为eLTE-IoT如何联接高效工业物联网
  8. SAP的Smartform 自建页格式:SPAD <转载>
  9. catia如何整列加工_汽车线束中大截面积导线的加工工艺解析
  10. 龙腾国产液晶面板15寸LCD工控显示屏M150GNN2 R1 规格书