wind 数据 python_从wind python接口获取数据并存储

转载的别人的资料,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()

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该系统主要是为了解决行业研究在提取公司财务数据以及进行财务数据分析时过于繁琐的问题。由于目前金融业使用wind较多,故本系统暂时采用了wind接口,通过自动化从wind提取相关公司财务数据并自动进行财务分析, 最后会将得到的结果以excel的形式输出到本地。 功能特点 提取数据。该系统目前主要整合了wind的python API接口,通过设定初始时间和结束时间及公司代码和名称,就可以直接通过wind的API提取财务数据。 覆盖全方位财务分析指标 盈利能力 毛利率 经营利润率(EBIT/net revenue) 净利率 ROA ROE ROIC(投入资本回报率) 销售费用率 管理费用率 财务费用率 销售期间费用率(三费加上研发/营业收入) 营运能力 总资产周转率(turnover=net revenue/assets) 固定资产周转率(net revenue/average net fixed assets) 营运资本周转率(net revenue/average working capital,here WC=current assets-current liabilities) 应收账款周转天数 应付账款周转天数 存货周转天数 营业周期(Operating cacle=应收账款周转天数+存货周转天数) 现金循环周期,又名净营业周期(Cash conversion cycle=应收账款周转天数+存货周转天数-应付账款周转天数) 流动性 流动比率(current ratio):流动资产/流动负债 速冻比率(quick ratio):(流动资产-存货)/流动负债 现金比率(Cash ratio):(现金+交易性金融资产)/流动负债 偿债能力 有息负债/净资产 有息负债/总资产 利息保障倍数(EBIT/Interest) 货币资金加上交易性金融资产/有息负债 货币资金/有息负债 估值水平 PE PB PE历史分位数 PB历史分位数 现金流数据 CFO/revenue CFO/average total assets CFO/average total equity CFO/operating income CF0/net income (CFO-perferred dividends)/weighted average number of common shares CFO/total debt(这里采用有息负债) CFO/cash paid for long-term assets(固定资产投资) CFO/cash long-term debt repayment CFO/dividend paid CFO/cash outflows from investing and financing activities (CFO+interest paid+taxes paid)/interest paid 信用水平 Z-score 成长性 营业收入同比 营业利润同比 净利润同比 归母净利润同比 扣非归母净利润同比 CFO同比
1 WINDPY接口说明 ................................................................................................. 1 1.1 WINDPY接口概述 ............................................................................................... 1 1.2 WINDPY接口安装 ............................................................................................... 2 1.2.1 WindPy对系统环境要求 ............................................................... 2 1.2.2 Python环境安装 .......................................................................... 2 1.2.3 正常WindPy接口安装 .................................................................. 3 1.2.4 特殊安装WindPy方式 .................................................................. 6 1.3 接口向导界面 ..................................................................................................... 6 1.4 WINDPY获取帮助途径 ....................................................................................... 7 1.4.1 本用户手册 .................................................................................... 7 1.4.2 量化交易群和R语言交流群 ........................................................... 7 1.5 WINDPY接口相关规范 ....................................................................................... 1 1.5.1 以下所有命令都有如下假设 ........................................................... 1 1.5.2 命令区分大小写,且“w.”不能省略 ............................................... 1 1.5.3 文以及单字节码和双字节码的问题 ............................................. 1 1.5.4 品种、指标、参数等引号内的部分不区分大小写 ........................... 1 1.5.5 参数支持list输入 ...................................................................... 1 1.5.6 时间、日期支持Python语言的时间、日期格式 ........................... 2 1.5.7 参数有缺省值的可以不用输入 .................................................... 2 1.5.8 可以带参数名输入 ......................................................................... 2 精于数据,一直进步 IV 1.5.9 Showblank参数 ........................................................................... 3 1.5.10 交易接口Showfields参数................................................ 3 1.5.11 ErrorCode定义 .................................................................... 3 2 WIND PY插件命令说明 ....................................................................................... 1 2.1 FROM WINDPY IMPORT *:装载WINDPY包 ..................................................... 1 2.2 W.START:启动WINDPY ..................................................................................... 1 2.3 W.STOP:停止WINDPY ....................................................................................... 2 2.4 W.ISCONNECTED:判断是否已经登录 .............................................................. 2 2.5 W.CANCELREQUEST:取消订阅 .......................................................................... 2 2.6 W.WSD:获取历史序列数据 .............................................................................. 3 2.7 W.WSI:获取分钟数据 ...................................................................................... 3 2.8 W.WST:获取日内TICK级别数据 .................................................................... 4 2.9 W.WSS:获历史截面数据 .................................................................................. 5 2.10 W.WSQ:获取和订阅实时行情数据 ................................................................. 5 2.11 W.WSET:获取板块、指数等成分数据 ........................................................... 6 2.12 W.WEQS:获取条件选股结果 ............................................................................ 7 2.13 W.WPF:获取资产管理、组合管理数据 ......................................................... 7 2.14 交易相关函数 ..................................................................................................... 8 2.14.1 w.tlogon交易登录 ............................................................... 8 2.14.2 w.tlogout交易登出 ............................................................. 9 2.14.3 w.torder委托下单 ............................................................. 10 2.14.4 w.tcancel撤销委托 ........................................................... 11 精于数据,一直进步 V 2.14.5 w.tquery交易查询 ............................................................. 12 2.15 W.TDAYS, W.TDAYSOFFSET,W.TDAYSCOUNT:日期函数 ............................... 14 2.15.1 w.tdays:返回区间内的日期序列 ....................................... 14 2.15.2 w.tdaysoffset:返回某个偏移值对应的日期 ................... 14 2.15.3 w.tdayscount:返回某个区间内日期数量 ......................... 15 3 WINPY插件函数体说明........................................................................................ 1 3.1 日期序列(WSD)................................................................................................. 1 3.2 历史截面数据(WSS) ........................................................................................ 3 3.3 分钟序列(WSI)................................................................................................. 3 3.4 日内跳价(WST)................................................................................................. 4 3.5 实时数据(WSQ)................................................................................................. 5 3.6 数据集(WSET) ..............................................
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值