コード例 #1
0
def data_alltogether_wande():
    """
    :return: 所有股票roe,pe情况
    """
    index = [
        '总市值', 'PE', 'PE预测', '年化收益率_100weeks', '年化收益率_2years', '预测净利润', 'ROE',
        '预测ROE', '评级', '预测目标价格', '收盘价', '成交量'
    ]
    w.start()

    with open('src/Source/wande.txt', 'r') as f:
        l = f.readlines()
    while '\n' in l:
        l.remove('\n')
    for i in l:
        i = i.replace('\n', '')
        i = i.replace('2020-04-19', datetime.now().strftime("%Y-%m-%d"))
        x = eval(i).Data
        y = pd.DataFrame()
        for j in range(len(index)):
            y[index[j]] = x[j + 2]
        y.to_csv('Data/Stock_Data/' + x[0][0] + '.csv',
                 index=False,
                 encoding='utf-8-sig')
    w.stop()
コード例 #2
0
ファイル: wind_data.py プロジェクト: Allen1203/pyktrader
def import_data_from_wind(d_start, d_end, file_folder='C:\\dev\\src\\ktlib\\data3\\', freq='d', contracts=[]):
    df = load_live_cont(d_start, d_end)
    contList = [str(inst) for inst in df.index]
    startDates = df.start_date
    endDates = df.expiry
    fields = 'open,close,high,low,volume,oi'
    if len(contracts) !=0:
        contList = contracts
    #w.start()
    for cont in contList:
        if cont[1].isalpha(): key = cont[:2]
        else: key = cont[:1]
        ex = 'SH'
        for exch in product_code.keys():
            if key in product_code[exch]:
                ex = exch
        ticker = cont + '.' + ex
        mth = int(cont[-2:])
        if (key not in contMonth):
            continue
        if mth not in contMonth[key]:
            continue
        start_d = max(d_start, startDates.ix[cont])
        end_d = min(d_end, endDates.ix[cont])
        try:
            if freq == 'm':
                print "loading min data for ticker = %s" % ticker
                raw_data = w.wsi(ticker,fields,start_d,end_d)
                if len(raw_data.Data)>1:
                    outfile = file_folder + cont+'_min.csv'
                    output={'datetime':raw_data.Times, 
                        'open':raw_data.Data[2],
                        'close':raw_data.Data[3],
                        'high':raw_data.Data[4],
                        'low':raw_data.Data[5],
                        'volume':raw_data.Data[6],
                        'openInterest':raw_data.Data[7]}
                    dump2csvfile(output,outfile)
                else:
                    print "no min data obtained for ticker=%s" % ticker
            else:
                print "loading daily data for ticker = %s" % ticker
                raw_data = w.wsd(ticker,fields,start_d,end_d)
                if len(raw_data.Data)>1:
                    outfile = file_folder + cont+'_daily.csv'
                    output={'datetime':raw_data.Times, 
                            'open':raw_data.Data[0],
                            'close':raw_data.Data[1],
                            'high':raw_data.Data[2],
                            'low':raw_data.Data[3],
                            'volume':raw_data.Data[4],
                            'openInterest':raw_data.Data[5]}
                    dump2csvfile(output,outfile)
                else:
                    print "no daily data obtained for ticker=%s" % ticker
        except ValueError:
            pass

    w.stop()
    return True
コード例 #3
0
 def __del__(self):
     try:
         w.stop()
     except AttributeError:
         pass
     except NameError:
         pass
コード例 #4
0
    def post(self):
        """
        json str:{"codes": "XT1522613.XT",
            "fields": "fund_setupdate,fund_maturitydate,fund_mgrcomp,fund_existingyear,fund_fundmanager", "options": ""}
        :return: 返回万得返回数据dict
        """
        args = receive_wss_parser.parse_args()
        logger.info('/wss/ args:%s', args)
        # codes = args['codes']
        # fields = args['fields']
        # options = args['options']
        if args['options'] == "":
            args['options'] = None
        if not w.isconnected():
            w.start()
        ret_data = None
        for nth in range(2):
            ret_data = w.wss(**args)
            error_code = ret_data.ErrorCode
            if error_code != 0:
                if nth == 0 and error_code == -40521010:
                    w.stop()
                    w.start()
                    logger.warning('尝试重新登陆成功,再次调用函数')
                    continue

                msg = ERROR_CODE_MSG_DIC.setdefault(error_code, "")
                logger.error('wss(%s) ErrorCode=%d %s' %
                             (args, error_code, msg))
                raise RequestError(msg, None, error_code)
            else:
                break
        else:
            if ret_data is None:
                msg = 'wst(%s) ret_data is None' % args
                logger.error(msg)
                raise RequestError(msg, None, 0)
        # 将 Data数据中所有 datetime date 类型的数据转换为 string
        data_len = len(ret_data.Data)
        logger.debug('ret_data.Data len:%d', data_len)
        logger.debug('ret_data.Codes : %s', ret_data.Codes)
        for n_data in range(data_len):
            data = ret_data.Data[n_data]
            data_len2 = len(data)
            if data_len2 > 0:
                if type(data[0]) in (datetime, date):
                    ret_data.Data[n_data] = [
                        format_2_date_str(dt) for dt in data
                    ]
                    logger.info('%d column["%s"]  date to str', n_data,
                                ret_data.Fields[n_data])
        # print('ret_data.Data:\n', ret_data.Data)
        # 组成 DataFrame
        ret_df = pd.DataFrame(ret_data.Data,
                              index=ret_data.Fields,
                              columns=ret_data.Codes)
        ret_dic = ret_df.to_dict()
        # print('ret_dic:\n', ret_dic)
        return ret_dic
コード例 #5
0
ファイル: wind_data.py プロジェクト: yzk19930501/pyktrader2
def get_wind_data(inst_list, start_date, end_date, save_loc='C:\\dev\\data\\', freq='m'):
    exch_map = {v: k for k, v in wind_exch_map.items()}
    for instID in inst_list:
        exch = misc.inst2exch(instID)
        ex = exch_map[exch]
        ticker = instID + '.' + ex
        product = misc.inst2product(instID)
        sdate = start_date
        edate = end_date
        stime = datetime.time(9, 0, 0)
        etime = datetime.time(15, 0, 0)
        if product in ['T', 'TF']:
            stime = datetime.time(9, 15, 0)
            etime = datetime.time(15, 15, 0)
        elif product in misc.night_session_markets:
            stime = datetime.time(21, 0, 0)
            sdate = misc.day_shift(sdate, '-1b')
        smin = datetime.datetime.combine(sdate, stime)
        emin = datetime.datetime.combine(edate, etime)
        fields = 'open,high,low,close,volume,oi'
        try:
            if freq == 'm':
                outfile = save_loc + instID + '_min.csv'
                if os.path.isfile(outfile):
                    continue
                raw_data = w.wsi(ticker, fields, smin, emin)
                if len(raw_data.Data) > 1:
                    output = {'datetime': raw_data.Times,
                              'open': raw_data.Data[0],
                              'high': raw_data.Data[1],
                              'low': raw_data.Data[2],
                              'close': raw_data.Data[3],
                              'volume': raw_data.Data[4],
                              'openInterest': raw_data.Data[5]}
                    dump2csvfile(output, outfile)
                else:
                    print "no min data obtained for ticker=%s" % ticker
            elif freq == 'd':
                outfile = save_loc + instID + '_daily.csv'
                if os.path.isfile(outfile):
                    continue
                raw_data = w.wsd(ticker, fields, start_date, end_date)
                if len(raw_data.Data) > 1:
                    output = {'datetime': raw_data.Times,
                              'open': raw_data.Data[0],
                              'high': raw_data.Data[1],
                              'low': raw_data.Data[2],
                              'close': raw_data.Data[3],
                              'volume': raw_data.Data[4],
                              'openInterest': raw_data.Data[5]}
                    dump2csvfile(output, outfile)
            else:
                print "no daily data obtained for ticker=%s" % ticker
        except ValueError:
            pass
    w.stop()
    return True
コード例 #6
0
def get_wind_api():
    """ 登录Wind API """
    from WindPy import w
    w.start()  # 默认命令超时时间为120秒,如需设置超时时间可以加入waitTime参数
    if w.isconnected():  # 判断WindPy是否已经登录成功
        yield w
    else:
        _log.error("Wind API fail to be connected.")
    w.stop()
コード例 #7
0
    def sectorClassify(self, outPutPath):
        ''' 行业分类'''

        # 内置参数
        cnMarketDict = {
            u'industryType=1': u'申万行业一级',
            u'industryType=2': u'申万行业二级',
            u'industryType=3': u'申万行业三级'
        }
        mktFileNameDict = {
            u'industryType=1': u'industryType=1',
            u'industryType=2': u'industryType=2',
            u'industryType=3': u'industryType=3'
        }
        periodType = 'M'
        uniPeriodList = self.uniPeriodListDcit[periodType]
        periodList = self.periodListDcit[periodType]
        stockCodelist = copy.deepcopy(self.stockCodelist)
        colName = copy.deepcopy(stockCodelist)
        joinStockCode = u','.join(stockCodelist)
        indexTypeList = [i for i in cnMarketDict]
        w.start()  #下载数据
        for i in range(len(indexTypeList)):
            dataSet = {}
            tempDateRecord = []
            for p in range(len(uniPeriodList)):  # 周期迭代
                period = uniPeriodList[p]
                periodLocSer = pd.Series(periodList.loc[period])
                tempSlice = periodList.index.get_loc(period)
                if len(periodLocSer) >= 2:
                    stLoc = tempSlice.start
                    enLoc = tempSlice.stop - 1
                else:
                    stLoc = tempSlice
                    enLoc = tempSlice
                dateRange = [self.strDayList[stLoc], self.strDayList[enLoc]]
                # 下载数据
                downLoadFormula = 'w.wsd(joinStockCode, "industry_swcode", dateRange[-1], dateRange[-1],'
                result = eval(downLoadFormula + 'indexTypeList[i])')
                dataSet[period] = result
                tempDateRecord.append(dateRange[-1])
                print(period)
            print(u'%s全时间段下载完毕' % indexTypeList[i])  # 保存数据至csv文件
            strFilename = outPutPath + u'/' + cnMarketDict[indexTypeList[i]] + \
                          self.startDate + u'-' + str(self.lastTradeday) + u'.csv'
            self.processedFilenameDict[mktFileNameDict[
                indexTypeList[i]]] = strFilename
            csvFile = open(strFilename, u'w', newline=u'')
            csvWriter = csv.writer(csvFile)
            csvWriter.writerow(colName)  # 第一行股票代码
            for j in range(len(uniPeriodList)):  # 不同周期
                row = dataSet[uniPeriodList[j]].Data[0]  # j 时间段所有股票代码数据
                row.insert(0, tempDateRecord[j])
                csvWriter.writerow(row)
            csvFile.close()
        w.stop()  # 函数结束
コード例 #8
0
    def ifNewStock(self,
                   startTime=None,
                   endTime=None,
                   newStockDays=40,
                   tradeDaySource=u'Api'):
        '''
        对原始日线数据处理,生成是否是新股的boolean值
        用到交易所交易日--通过接口获取
        :return: 1 #新股(上市日期小于40或未上市), 0 #非新股
        '''
        volume = self._read_csv(u'volume_stocks', startTime, endTime)
        timeIndex = volume.index.astype(str)
        length1 = len(timeIndex)
        firstDate = timeIndex[0]
        primaryDate = pd.date_range(end=firstDate, periods=1000,
                                    freq=u'D').astype(str)[0]
        if tradeDaySource == u'Wind':
            from WindPy import w
            w.start()
            prevList = pd.Index(
                w.tdays(primaryDate, firstDate, u"").Data[0][:-1]).astype(str)
            w.stop()
        elif tradeDaySource == u'Api':
            prevList = pd.Index(
                self.APIeg.getTradeDate(start=primaryDate, end=firstDate))
        else:  # 从本地读取交易所交易日
            prevList = self._read_csv(u'tradeDay_stocks').index.astype(str)
        tradedayList = prevList.union(timeIndex)  # 整个交易日Index
        newStockDF = copy.deepcopy(volume)
        IPODf = self._read_csv(u'ipo_date_stocks')
        IPOSeries = IPODf.iloc[0]
        stockName = IPOSeries.index

        firstDateLoc = tradedayList.get_loc(firstDate)
        newTimeList = tradedayList[(firstDateLoc - newStockDays):]
        length2 = len(newTimeList)
        prevFirstDate = newTimeList[0]
        for i in range(len(stockName)):
            stock = stockName[i]
            ipoDate = IPOSeries[i]
            tempSeries = copy.deepcopy(
                pd.Series(np.zeros(length1), index=timeIndex))
            if ipoDate > prevFirstDate:
                newTimeListLoc = newTimeList.get_loc(ipoDate)
                unNewDateLoc = min(
                    len(newTimeList) - 1, newTimeListLoc + newStockDays)
                if unNewDateLoc <= length2 - 1 and unNewDateLoc >= newStockDays:
                    tempSeries[:newTimeListLoc] = 1
            newStockDF[stock] = pd.Series(tempSeries)
        newStockDF.to_csv(DataProcessing.CSV_PATH +
                          u'is_new_stock_%s_stocks.csv' % newStockDays)
コード例 #9
0
ファイル: importer.py プロジェクト: LittleHuaHua/qcc
    def start(self):
        '''the main function to perform all operations'''
        print('开始程序')
        w.start(60)
        #if cannot connect to wind, just stop
        if not w.isconnected():
            print('无法连接万德')
            print('程序结束')
            w.stop()
            return
        #otherwise
        print('万德已连接')
        print('开始处理数据')
        #期货行情

        today = datetime.now()
        print('今天是', today.strftime('%Y-%m-%d'))
        loop = asyncio.get_event_loop()
        exchanges = self.config['futures']['exchanges']
        for eid in dict.keys(exchanges):
            instruments = exchanges[eid]
            instrument = None
            for instrument in instruments:
                print('处理品种 ' + instrument + ' 交易所 ' + eid)
                items = []
                i = 0
                for i in range(today.month, today.month + 13, 1):
                    iid = instrument
                    if i > 12:
                        iid = iid + self.fix_instrument(str(today.year + 1)[2:] + \
                            pad_month(i % 12), eid)
                    else:
                        iid = iid + self.fix_instrument(str(today.year)[2:] + \
                            pad_month(i), eid)
                    iid = iid + '.' + eid
                    items.append(iid)

                tasks = []
                for item in items:
                    tasks.append(asyncio.ensure_future(self.process_item(w, item)))

                try:
                    loop.run_until_complete(asyncio.wait(tasks))
                except:
                    print('循环产生异常:处理品种' + instrument + '期货价格数据')
                finally:
                    print('完成品种 ' + instrument + ' 交易所 ' + eid)
        loop.close()
        print('程序结束')
        w.stop()
コード例 #10
0
    def post(self):
        """
        json str:{"begin_time": "2017-3-31", "end_time": "2017-3-31", "options": ""}
        :return: 返回万得返回数据dict
        """
        args = tdays_parser.parse_args()
        logger.info('/tdays/ args:%s', args)
        # begin_time = args['begin_time']
        # end_time = args['end_time']
        # options = args['options']
        if args['options'] == "":
            args['options'] = None
        if not w.isconnected():
            w.start()
        ret_data = None
        for nth in range(2):
            ret_data = w.tdays(**args)
            error_code = ret_data.ErrorCode
            if error_code != 0:
                if nth == 0 and error_code == -40521010:
                    w.stop()
                    w.start()
                    logger.warning('尝试重新登陆成功,再次调用函数')
                    continue

                msg = ERROR_CODE_MSG_DIC.setdefault(error_code, "")
                logger.error('tdays(%s) ErrorCode=%d %s' %
                             (args, error_code, msg))
                raise RequestError(msg, None, error_code)
            else:
                break
        else:
            if ret_data is None:
                msg = 'wst(%s) ret_data is None' % args
                logger.error(msg)
                raise RequestError(msg, None, 0)
        # 将 Data数据中所有 datetime date 类型的数据转换为 string
        if len(ret_data.Data) > 0 and len(ret_data.Data[0]) > 0:
            # date_str = format_datetime_to_str(ret_data.Data[0][0])
            # ret_df = pd.DataFrame({'date': [format_datetime_to_str(d) for d in ret_data.Data[0]]})
            # ret_df.index = [str(idx) for idx in ret_df.index]
            # ret_dic = {'date': [format_datetime_to_str(d) for d in ret_data.Data[0]]}
            ret_dic = [format_2_date_str(d) for d in ret_data.Data[0]]
        else:
            logger.warning('tdays(%s) No value return' % args)
            ret_dic = []
        # ret_dic = ret_df.to_dict()
        # print('tdays:\n', ret_dic)
        return ret_dic
コード例 #11
0
def main():

    w.start()

    windstock = WindStock()
    start_date = '20130520'
    end_date = '20170520'

    symbols = windstock.getAStockCodesWind(end_date)  #symbols类型为list?
    fm = pd.DataFrame(symbols)
    fm = fm.T
    print fm
    windstock.AStockHisData(symbols, start_date, end_date)

    #save the data into csv files

    w.stop()
コード例 #12
0
    def post(self):
        """
        json str:{"offset": "1", "begin_time": "2017-3-31", "options": ""}
        :return: 返回万得返回数据dict
        """
        args = tdays_offset_parser.parse_args()
        logger.info('/tdaysoffset/ args:%s', args)
        # offset = int(args['offset'])
        # begin_time = args['begin_time']
        # options = args['options']
        if args['options'] == "":
            args['options'] = None
        if not w.isconnected():
            w.start()
        ret_data = None
        for nth in range(2):
            ret_data = w.tdaysoffset(**args)
            error_code = ret_data.ErrorCode
            if error_code != 0:
                if nth == 0 and error_code == -40521010:
                    w.stop()
                    w.start()
                    logger.warning('尝试重新登陆成功,再次调用函数')
                    continue

                msg = ERROR_CODE_MSG_DIC.setdefault(error_code, "")
                logger.error('tdaysoffset("%s") ErrorCode=%d %s' %
                             (args, error_code, msg))
                raise RequestError(msg, None, error_code)
            else:
                break
        else:
            if ret_data is None:
                msg = 'wst(%s) ret_data is None' % args
                logger.error(msg)
                raise RequestError(msg, None, 0)
        # 将 Data数据中所有 datetime date 类型的数据转换为 string
        if len(ret_data.Data) > 0 and len(ret_data.Data[0]) > 0:
            date_str = format_2_date_str(ret_data.Data[0][0])
        else:
            logger.warning('tdaysoffset(%s) No value return' % args)
            date_str = ''
        ret_dic = {'Date': date_str}
        # print('offset:\n', ret_dic)
        return ret_dic
コード例 #13
0
def main():

    w.start()

    windstock = WindStock()
    start_date = '20160520'
    end_date = '20160729'

    #获取A股所有的股票代码
    symbols = windstock.getAStockCodesWind(end_date)
    #print "hello"

    fm = pd.DataFrame(symbols)
    fm = fm.T
    #print fm
    windstock.AStockHisData(symbols, start_date, end_date)

    #save the data into csv files

    w.stop()
コード例 #14
0
 def downloadSimpleData(self, simpleDataList):
     '''
     下载简单数据,比如ipo_date
     :param simpleDataList:
     :return:
     '''
     cnSimDict = {'ipo_date': u'ipo_date'}
     simFileNameDict = {'ipo_date': u'ipo_date'}
     # 设置参数
     startDate = copy.deepcopy(self.startDate)
     lastTradeday = copy.deepcopy(self.lastTradeday)
     stockCodelist = copy.deepcopy(self.stockCodelist)
     joinStockCode = u','.join(stockCodelist)
     colName = stockCodelist
     colName.insert(0, 'Date')
     # 下载数据
     w.start()
     for i in range(len(simpleDataList)):
         tempDf = pd.DataFrame()
         strFilename = os.getcwd() + u'/DownloadedData/OriginalData/' + cnSimDict[simpleDataList[i]] + \
                       startDate + u'-' + str(lastTradeday) + u'.csv'
         self.processedFilenameDict[simFileNameDict[
             simpleDataList[i]]] = strFilename
         csvFile = open(strFilename, 'w', newline='')
         csvWriter = csv.writer(csvFile)
         csvWriter.writerow(colName)
         if simpleDataList[i] in ['ipo_date']:  # ipo只需要最新时间的数据
             result = w.wsd(joinStockCode, simpleDataList[i],
                            str(lastTradeday), str(lastTradeday), "")
             row = [str(i.date()) for i in result.Data[0]]
             row.insert(0, str(lastTradeday))
         csvWriter.writerow(row)
         tempDf = tempDf.append([row])
         print(cnSimDict[simpleDataList[i]] + u'全时段数据下载完成')
     w.stop()
     print(u'简单数据下载完成')
コード例 #15
0
ファイル: wind_data.py プロジェクト: zx403413599/pyktrader
def import_data_from_wind(d_start,
                          d_end,
                          file_folder='C:\\dev\\src\\ktlib\\data3\\',
                          freq='d',
                          contracts=[]):
    df = load_live_cont(d_start, d_end)
    contList = [str(inst) for inst in df.index]
    startDates = df.start_date
    endDates = df.expiry
    fields = 'open,close,high,low,volume,oi'
    if len(contracts) != 0:
        contList = contracts
    #w.start()
    for cont in contList:
        if cont[1].isalpha(): key = cont[:2]
        else: key = cont[:1]
        ex = 'SH'
        for exch in product_code.keys():
            if key in product_code[exch]:
                ex = exch
        ticker = cont + '.' + ex
        mth = int(cont[-2:])
        if (key not in contMonth):
            continue
        if mth not in contMonth[key]:
            continue
        start_d = max(d_start, startDates.ix[cont])
        end_d = min(d_end, endDates.ix[cont])
        try:
            if freq == 'm':
                print "loading min data for ticker = %s" % ticker
                raw_data = w.wsi(ticker, fields, start_d, end_d)
                if len(raw_data.Data) > 1:
                    outfile = file_folder + cont + '_min.csv'
                    output = {
                        'datetime': raw_data.Times,
                        'open': raw_data.Data[2],
                        'close': raw_data.Data[3],
                        'high': raw_data.Data[4],
                        'low': raw_data.Data[5],
                        'volume': raw_data.Data[6],
                        'openInterest': raw_data.Data[7]
                    }
                    dump2csvfile(output, outfile)
                else:
                    print "no min data obtained for ticker=%s" % ticker
            else:
                print "loading daily data for ticker = %s" % ticker
                raw_data = w.wsd(ticker, fields, start_d, end_d)
                if len(raw_data.Data) > 1:
                    outfile = file_folder + cont + '_daily.csv'
                    output = {
                        'datetime': raw_data.Times,
                        'open': raw_data.Data[0],
                        'close': raw_data.Data[1],
                        'high': raw_data.Data[2],
                        'low': raw_data.Data[3],
                        'volume': raw_data.Data[4],
                        'openInterest': raw_data.Data[5]
                    }
                    dump2csvfile(output, outfile)
                else:
                    print "no daily data obtained for ticker=%s" % ticker
        except ValueError:
            pass

    w.stop()
    return True
コード例 #16
0
 def download_fundData(self, fundCodeList=[]):
     # 内置参数
     startDate = copy.deepcopy(self.startDate)
     endDate = copy.deepcopy(self.endDate)
     lastTradeday = copy.deepcopy(self.lastTradeday)
     cnIndexDict = {}
     for i in range(len(fundCodeList)):
         if fundCodeList[i][-3] == '.':
             cnIndexDict[fundCodeList[i]] = fundCodeList[i][:-3]
     # 设置指数数据
     w.start()
     # 指数数据下载
     fieldName = ["NAV_acc", "NAV_adj", "nav", u'fund_investobject']
     joinFieldName = ','.join(fieldName)
     fieldCNName = ['单位净值', '累计单位净值', '复权单位净值', u'投资目标']
     colName2 = copy.deepcopy(fieldCNName)
     colName2.insert(0, u'Date')
     for i in range(len(fundCodeList)):
         dataSet = {}
         # 按年下载数据
         yearNum = int(startDate.split(u'-')[0])
         yearTradedaySet = {}
         tempStartDate = startDate
         latestYearNum, lastEndDate = int(endDate.split(u'-')[0]), int(
             endDate.split(u'-')[2])
         while yearNum <= latestYearNum:
             if yearNum == int(latestYearNum):
                 tempEndDate = endDate
             else:
                 tempEndDate = str(yearNum) + u'-12-31'
             yearTradedayList = w.tdays(tempStartDate, tempEndDate,
                                        u"").Data[0]
             yearFirstTradeday = yearTradedayList[0].date()
             yearLastTradeday = yearTradedayList[-1].date()
             # 下载数据
             indexResult = w.wsd(fundCodeList[i], joinFieldName,
                                 str(yearFirstTradeday),
                                 str(yearLastTradeday), u"PriceAdj=F")
             dataSet[str(yearNum)] = indexResult
             yearTradedaySet[str(yearNum)] = yearTradedayList
             yearNum += int(1)
             tempStartDate = str(yearNum) + u'-01-01'
         print(cnIndexDict[fundCodeList[i]] + u'全时间段下载完毕')
         # 创建文件
         tempDf = pd.DataFrame()
         strFilename = os.getcwd() + u'/DownloadedData/OriginalData/' + cnIndexDict[fundCodeList[i]] + \
                       startDate + r'-' + str(lastTradeday) + u'.csv'
         # self.processedFilenameDict[indexFileNameDict[indexCodeList[i]]] = strFilename
         csvFile = open(strFilename, u'w', newline=u'')
         csvWriter = csv.writer(csvFile)
         csvWriter.writerow(colName2)  # 第一行股票代码
         for key in yearTradedaySet:  # 不同年
             csvTradedayList = yearTradedaySet[key]
             for j in range(len(csvTradedayList)):
                 row = [i[j] for i in dataSet[key].Data]  # j 时间段所有股票代码数据
                 row.insert(0, csvTradedayList[j].date())
                 csvWriter.writerow(row)
                 tempDf = tempDf.append([row])
         csvFile.close()
     w.stop()
     print(u'所有指数数据下载完毕')
コード例 #17
0
 def downloadIfSetor(self, sectorid=[]):
     # 内置参数
     startDate = copy.deepcopy(self.startDate)
     lastTradeday = copy.deepcopy(self.lastTradeday)
     stockCodelist = copy.deepcopy(self.stockCodelist)
     sectorCNDict = {
         u'1000006526000000': u'ST股判断条件',
         u'1000000090000000': u'沪深300判断条件',
         u'1000008491000000': u'中证500判断条件',
         u'1000000087000000': u'上证50判断条件',
         u'1000012163000000': u'中证1000判断条件'
     }
     sectorFileDict = {
         u'1000006526000000': u'is_be_st',
         u'1000000090000000': u'isHS300',
         u'1000008491000000': u'isZZ500',
         u'1000000087000000': u'isSZ50',
         u'1000012163000000': u'iszz1000'
     }
     # 设置1,0 判断条件
     w.start()
     if sectorid == []:
         sectorid = [
             u'1000006526000000', u'1000000090000000', u'1000008491000000',
             u'1000000087000000'
         ]
     colName = copy.deepcopy(stockCodelist)
     colName.insert(0, u'Date')
     # xx板块股票代码下载
     for q in range(len(sectorid)):
         periodType = 'M'
         dataSet = {}
         uniPeriodList = self.uniPeriodListDcit[periodType]
         periodList = self.periodListDcit[periodType]
         tempDateRecord = []
         for p in range(len(uniPeriodList)):  # 周期迭代
             period = uniPeriodList[p]
             periodLocSer = pd.Series(periodList.loc[period])
             tempSlice = periodList.index.get_loc(period)
             if len(periodLocSer) >= 2:
                 stLoc = tempSlice.start
                 enLoc = tempSlice.stop - 1
             else:
                 stLoc = tempSlice
                 enLoc = tempSlice
             dateRange = [self.strDayList[stLoc], self.strDayList[enLoc]]
             # 下载数据
             tempSTDataSet = w.wset(
                 u"sectorconstituent", u"date=" + dateRange[-1] +
                 u";sectorid=" + sectorid[q] + u";field=date,wind_code")
             stCode = tempSTDataSet.Data[1]
             tempStockCode = copy.deepcopy(stockCodelist)
             for j in range(len(tempStockCode)):
                 if stCode.count(tempStockCode[j]) == int(1):
                     tempStockCode[j] = 1
                 else:
                     tempStockCode[j] = 0
             dataSet[period] = tempStockCode
             tempDateRecord.append(dateRange[-1])
         print(sectorCNDict[sectorid[q]] + u'全时间段下载完毕')  # 保存数据至csv文件
         strFilename = os.getcwd() + u'/DownloadedData/OriginalData/' + sectorCNDict[sectorid[q]] + \
                       startDate + u'-' + str(lastTradeday) + u'.csv'
         self.processedFilenameDict[sectorFileDict[
             sectorid[q]]] = strFilename
         # 创建文件
         csvFile = open(strFilename, u'w', newline=u'')
         csvWriter = csv.writer(csvFile)
         csvWriter.writerow(colName)  # 第一行股票代码
         for j in range(len(uniPeriodList)):  # 不同周期
             row = dataSet[uniPeriodList[j]]  # j 时间段所有股票代码数据
             row.insert(0, tempDateRecord[j])
             csvWriter.writerow(row)
         csvFile.close()
     w.stop()
     print(u'所有板块数据下载完毕')
コード例 #18
0
ファイル: ok_getTradeData.py プロジェクト: cwx1611/test
'''
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from WindPy import w
import pymysql

w.start();

def saveTradeDate(tradeDates):
    if tradeDates.ErrorCode!=0:
        print('error code:'+str(tradeDates.ErrorCode)+'\n');
        return();
    print('Data length:',len(tradeDates.Data[0]))
    conn=pymysql.connect(host='192.168.10.222',port='3306',user='******',passwd='cc2718281828',db='AMGMH',charset='utf8')
    cur=conn.cursor()
    for i in range(0,len(tradeDates.Data[0])):
        strTemp=''
        #if len(tradeDates.Times)>1:
        #    strTemp=str(tradeDates.Times[i])+' '
        for k in range(0, len(tradeDates.Fields)):
            strTemp=strTemp+str(tradeDates.Data[k][i])+' '
            sta=cur.execute('insert into TDays values('+'\'SHE\','+str(tradeDates.Data[k][i])+')')
            print(sta)
        print(strTemp)
        
        
tradeDate = w.tdays('2016-03-25', '2016-12-31', 'TradingCalendar=SZSE')
saveTradeDate(tradeDate)
w.stop();

コード例 #19
0
def main():
    book = xw.Book.caller()
    """爬取农业部数据"""
    today = datetime.date.today()
    #获取当月第一天
    firstmonthday = datetime.datetime(today.year, today.month, 1)
    #获取当年第一天
    firstday = datetime.datetime(today.year, 1, 1)
    oneday = datetime.timedelta(days=1)
    all = {}  #存放所有爬取的网页链接,key为日期,value为链接
    url = 'http://www.scs.moa.gov.cn/scxxfb/'

    #爬取主页
    response = requests.get(url)
    content = response.content
    page = etree.HTML(content)
    data = page.find('.//div[@class="sj_e_tonzhi_list"]')

    for i in data:
        infos = i.findall('.//li')
        for info in infos:
            rrr = info.find('.//a')
            link = url + str(rrr.get('href'))
            date = re.findall(r'.\w+.t(\d+)\w+', link)
            all[date[0]] = str(link)

    for i in range(1, 13):
        url = 'http://www.scs.moa.gov.cn/scxxfb/index_' + str(i) + '.htm'
        response = requests.get(url)
        content = response.content
        page = etree.HTML(content)
        data = page.find('.//div[@class="sj_e_tonzhi_list"]')

        for i in data:
            infos = i.findall('.//li')
            for info in infos:
                rrr = info.find('.//a')
                link = 'http://www.scs.moa.gov.cn/scxxfb/' + str(
                    rrr.get('href'))
                date = re.findall(r'.\w+.t(\d+)\w+', link)
                all[date[0]] = str(link)

    #print(all)
    #爬取目标页、正则提取猪肉价格
    def price_get(link):
        response = requests.get(link)
        content = response.content
        page = etree.HTML(content)
        info = page.find('.//div[@class="TRS_Editor"]')
        text = info.find('.//p').text
        price = re.findall(r'猪肉\D+(\d+.\d+)元', text)
        return price

    price1 = {}  #存放猪肉价格,key为日期,value为价格

    #今天的价格,若未更新则为前一天价格
    while today.strftime('%Y%m%d') not in all.keys():
        today -= oneday
    else:
        d_p_price = price_get(str(all[today.strftime('%Y%m%d')]))
        price1[today.strftime('%Y%m%d')] = d_p_price

    #本月初价格,更新时间为本月第一个工作日
    while firstmonthday.strftime('%Y%m%d') not in all.keys():
        firstmonthday += oneday
    else:
        m_p_price = price_get(str(all[firstmonthday.strftime('%Y%m%d')]))
        price1[firstmonthday.strftime('%Y%m%d')] = m_p_price

    #本年初价格,更新时间为本年第一个工作日
    while firstday.strftime('%Y%m%d') not in all.keys():
        firstday += oneday
    else:
        y_p_price = price_get(str(all[firstday.strftime('%Y%m%d')]))
        price1[firstday.strftime('%Y%m%d')] = y_p_price

    #对应价格的列表
    #l=[price1[today.strftime('%Y%m%d')],price1[firstmonthday.strftime('%Y%m%d')],price1[firstday.strftime('%Y%m%d')]]

    print(price1)
    '''
    最终结果是price1是一个字典
    pric1e[today.strftime('%Y%m%d')]是今日价格
    price1[firstmonthday.strftime('%Y%m%d')]是本月初
    price1[firstday.strftime('%Y%m%d')]是本年初
    '''
    """爬取二元能繁母猪数据"""
    #百度云账号
    APP_ID = '#####'
    API_KEY = '########'
    SECRECT_KEY = '########'
    client = AipOcr(APP_ID, API_KEY, SECRECT_KEY)

    #爬取主页,获取目标网页链接
    url = 'http://sousuo.gov.cn/s.htm?q=%E4%BA%8C%E5%85%83%E6%AF%8D%E7%8C%AA%E9%94%80%E5%94%AE%E4%BB%B7%E6%A0%BC&t=govall&timetype=timeqb&mintime=&maxtime=&sort=pubtime&sortType=1&nocorrect='
    response = requests.get(url)
    content = response.content
    page = etree.HTML(content)
    table = page.find('.//h3[@class="res-title"]')
    channels = table.find('.//a')
    link = channels.get('href')
    #print(link)

    #爬取最新公告的标题
    html = requests.get(link)
    html.encoding = 'utf-8'
    text = html.text
    page1 = etree.HTML(text)
    info = page1.find('.//div[@class="article oneColumn pub_border"]')
    t = info.find('.//h1')
    title = t.text
    #print(title)

    #从公告标题中提取更新数据对应的日期
    datestr = title[len(title) - 14:len(title) - 9]
    date = '2020年' + datestr
    date1 = datetime.datetime.strptime(date, '%Y年%m月%d日')
    #print(date1)

    #爬取公告中的图片
    content1 = page1.find('.//div[@class="pages_content"]')
    channels1 = content1.find('.//img')
    link_img = channels1.get('src')
    links = str(link)
    pic_urls = links[:len(links) - 19] + link_img

    #调用百度api对图片进行文本识别,从中提取价格内容
    prices = client.basicGeneralUrl(pic_urls)
    r = prices['words_result']
    info = r[5]
    price = info['words']
    #print(price)

    #更新每周二元母猪价格
    pork_price = {}
    week = date1.strftime("%W")
    pork_price[week + '周'] = price  #存放每周二元母猪价格,key为周数,对应价格
    print(pork_price)
    """抓取wind数据 写入excel"""

    #链接到wind数据库
    w.start()
    w.isconnected()

    #统计仔猪数据
    ##download仔猪数据
    pig_baby_codes = ['############']  ###仔猪代码已打码
    pig_baby = w.edb(pig_baby_codes,
                     datetime.date.today() + datetime.timedelta(days=-5),
                     datetime.date.today(),
                     usedf=True,
                     ShowBlank=0)
    pig_baby = pig_baby[1]
    pig_baby.columns = ['###########']  ###仔猪地区标签已打码

    ##分地区统计仔猪数据
    pig_baby_mean = pd.DataFrame([])
    pig_baby_mean_names = ['##########']  ###仔猪分地区统计的地区标签已打码
    for i in range(1, 13, 2):
        pig_baby_mean[pig_baby_mean_names[int(
            (i - 1) /
            2)]] = (pig_baby.iloc[:, i - 1] + pig_baby.iloc[:, i]) / 2
    print(pig_baby_mean)

    #生猪
    ##download生猪数据
    pig_codes = ["###############"]  ###生猪代码已打码
    pig = w.edb(pig_codes,
                datetime.date.today() + datetime.timedelta(days=-4),
                datetime.date.today(),
                usedf=True,
                ShowBlank=0)
    pig = pig[1]
    pig.columns = ["###############"]  ###生猪地区标签已打码

    ##分地区统计仔猪数据
    pig_mean = pd.DataFrame(np.zeros((4, 5)))
    pig_mean_names = ["###########"]  ###生猪分地区统计的地区标签已打码
    pig_mean.columns = pig_mean_names
    print(pig_mean)
    pig_mean.index = pig.index[1:]
    for name in pig_mean_names:
        i = 0
        for n in list(pig.columns):
            if name in n:
                pig_mean[name] = pig_mean[name] + pig[n]
                i += 1
        pig_mean[name] = pig_mean[name] / i

    print(pig_baby_mean)

    #统计玉米数据
    ##donload玉米价格
    corn_codes = ['S5005793']
    corn = w.edb(corn_codes,
                 datetime.date.today() + datetime.timedelta(days=-5),
                 datetime.date.today(),
                 usedf=True,
                 ShowBlank=0)
    corn = corn[1]
    corn.columns = ['现货价:玉米:平均价']
    corn = corn.T
    print(corn)

    #关闭Wind接口
    w.stop()

    #仔猪、生猪、猪肉、玉米价格汇总
    pig_baby_mean = pig_baby_mean.T
    pig_mean = pig_mean.T
    pig_baby_data = list(pig_baby_mean[pig_baby_mean.columns[-1]])
    pig_baby_data.append(np.mean(pig_baby_data))
    pig_data = list(pig_mean[pig_mean.columns[-1]])
    pig_data.append(np.mean(pig_data))
    corn_data = list(corn[corn.columns[-1]])
    pig_baby_data.extend(pig_data)
    pig_baby_data.extend(corn_data)
    pig_baby_data.append(float(price1[today.strftime('%Y%m%d')][0]))
    alldata = pig_baby_data
    print(alldata)

    #最近5日日期的一个list——days是datetime格式列表,days1是字符格式列表
    days = [
        datetime.datetime.today() + datetime.timedelta(days=-i)
        for i in range(5)
    ]
    days1 = [days[i].strftime('%Y-%m-%d') for i in range(5)]
    days.reverse()
    days1.reverse()
    print(days)

    #最近五周的一个list——week_nows
    week_list = {}
    today = datetime.date.today()
    weeks = today.strftime("%W")
    week_n = int(weeks)
    week_list[week_n] = week_n
    l = [week_list[week_n] - i for i in range(5)]
    for i in range(5):
        l[i] = str(l[i]) + '周'
    l.reverse()
    print(l)
    week_nows = l

    #链接到目标表格
    sht = book.sheets[0]

    #判断二元能繁母猪年度数据、月度数据是否要更新
    firstday_week = datetime.datetime(datetime.date.today().year,
                                      datetime.date.today().month,
                                      1).strftime("%W") + '周'
    if week_nows[-1] == '1周':
        sht.range('Q8').value = float(price)
    if week_nows[-1] == firstday_week:
        sht.range('P8').value = float(price)

    #判断仔猪、生猪、猪肉、玉米年度数据、月度数据是否要更新
    if days1[-1][6:] == '01-01':
        sht.range('Q11:Q25').options(transpose=True).value = alldata
    if days1[-1][9:] == '01':
        sht.range('P11:P25').options(transpose=True).value = alldata

    #更新主体数据(若今天数据已更新则不再更)
    ##二元能繁母猪
    if sht.range('K7').value == week_nows[-1]:
        pass
    else:
        sht.range('G8:J8').value = sht.range('H8:K8').value
        sht.range('K8').value = float(price)

    ##仔猪、生猪、猪肉、玉米
    if sht.range('K9').value.date() == days[-1].date():
        pass
    else:
        sht.range('G7:K7').value = week_nows
        sht.range('G9:K9').value = days1
        sht.range('G11:J25').value = sht.range('H11:K25').value
        sht.range('K11:K25').options(transpose=True).value = alldata
コード例 #20
0
def logout():
    if WDServer.isconnected():
        logout = WDServer.stop()
        print(colored("WDServer is disconnected successfully!", "green"))
    else:
        print(colored("WDServer is already disconnected!", "green"))
コード例 #21
0
ファイル: wind_data.py プロジェクト: zx403413599/pyktrader
def get_min_data(filename):
    file_folder = 'C:\\dev\\src\\ktlib\\data3\\'
    reader = csv.reader(file(filename, 'rb'))
    contList = []
    fields = 'open,close,high,low,volume,oi'
    contStart = []
    contEnd = []
    for line in reader:
        contList.append(line[0])
        contStart.append(line[1])
        contEnd.append(line[2])

    #w.start()
    for cont, startD, endD in zip(contList, contStart, contEnd):
        if cont[1].isalpha(): key = cont[:2]
        else: key = cont[:1]
        ex = 'SH'
        for exch in product_code.keys():
            if key in product_code[exch]:
                ex = exch

        ticker = cont + '.' + ex
        startmin = ""
        endMin = ""

        if ex == 'CFE':
            startMin = " 09:14:00"
            endMin = " 15:15:00"
        else:
            startMin = " 08:59:00"
            endMin = " 15:00:00"

        if ex == 'CFE':
            startMin = " 09:14:00"
            endMin = " 15:15:00"
        else:
            startMin = " 08:59:00"
            endMin = " 15:00:00"

        try:
            sdate = datetime.datetime.strptime(startD, "%Y/%m/%d")
            edate = datetime.datetime.strptime(endD, "%Y/%m/%d")
            sMin = datetime.datetime.strptime(startD + startMin,
                                              "%Y/%m/%d %H:%M:%S")
            eMin = datetime.datetime.strptime(endD + endMin,
                                              "%Y/%m/%d %H:%M:%S")
            print ticker, sMin, eMin
            if edate > datetime.date(2009, 1, 1):
                raw_data = w.wsi(ticker, fields, sMin, eMin)
                if len(raw_data.Data) > 1:
                    outfile = file_folder + cont + '_min.csv'
                    output = {
                        'datetime': raw_data.Times,
                        'open': raw_data.Data[0],
                        'close': raw_data.Data[1],
                        'high': raw_data.Data[2],
                        'low': raw_data.Data[3],
                        'volume': raw_data.Data[4],
                        'openInterest': raw_data.Data[5]
                    }
                    dump2csvfile(output, outfile)
                else:
                    print "no min data obtained for ticker=%s" % ticker

            raw_data = w.wsd(ticker, fields, sdate, edate)
            if len(raw_data.Data) > 1:
                outfile = file_folder + cont + '_daily.csv'
                output = {
                    'datetime': raw_data.Times,
                    'open': raw_data.Data[0],
                    'close': raw_data.Data[1],
                    'high': raw_data.Data[2],
                    'low': raw_data.Data[3],
                    'volume': raw_data.Data[4],
                    'openInterest': raw_data.Data[5]
                }
                dump2csvfile(output, outfile)
            else:
                print "no daily data obtained for ticker=%s" % ticker
        except ValueError:
            pass

    w.stop()
    return True
コード例 #22
0
def AShareEODDerivativeIndicator(timestr):
    w.start()
    w.isconnected()

    timey = timestr[0:4]
    timem = timestr[4:6]
    timed = timestr[6:8]
    date = datetime.datetime(int(timey), int(timem), int(timed))
    windds1 = w.wset('SectorConstituent', 'date=' + timestr + ';sector=全部A股')
    datac = windds1.Data[1]
    #datat=['000001.SZ','000002.SZ']

    date52b = date + datetime.timedelta(-364)
    startdate = str(date52b)
    windds6 = w.wss(datac, "latelyrd_bt", "tradeDate=" + timestr)

    lt = list(set(windds6.Data[0]))
    latelyrd = [[] for x in range(len(lt))]
    lty = list(set(windds6.Data[0]))
    for a in range(len(lt)):
        if lty[a].month != 12:
            lty[a] = datetime.datetime(lt[a].year - 1, 12, 31)

    for b in range(len(windds6.Codes)):
        for a in range(len(lt)):
            if windds6.Data[0][b] == lt[a]:
                latelyrd[a].append(windds6.Codes[b])
                break
    windds4 = w.wss(
        latelyrd[0],
        "pe,pb,pe_ttm,pcf_ocf,pcf_ocf_ttm,pcf_ncf,pcf_ncf_ttm,ps,ps_ttm,netprofit_ttm,np_belongto_parcomsh,net_cash_flows_oper_act,oper_rev,net_incr_cash_cash_equ_dm",
        "tradeDate=" + timestr + ";ruleType=10;unit=1;rptDate=" + str(lty[0]) +
        ";rptType=1;currencyType=")
    if (len(lt) > 1):
        for a in range(1, len(lt)):
            winddst = w.wss(
                latelyrd[a],
                "pe,pb,pe_ttm,pcf_ocf,pcf_ocf_ttm,pcf_ncf,pcf_ncf_ttm,ps,ps_ttm,netprofit_ttm,np_belongto_parcomsh,net_cash_flows_oper_act,oper_rev,net_incr_cash_cash_equ_dm",
                "tradeDate=" + timestr + ";ruleType=10;unit=1;rptDate=" +
                str(lty[a]) + ";rptType=1;currencyType=")
            windds4.Codes += winddst.Codes
            for b in range(len(winddst.Data)):
                windds4.Data[b] += winddst.Data[b]
    del winddst

    lt = list(set(windds6.Data[0]))
    latelyrd = [[] for x in range(len(lt))]
    for b in range(len(windds6.Codes)):
        for a in range(len(lt)):
            if windds6.Data[0][b] == lt[a]:
                latelyrd[a].append(windds6.Codes[b])
                break
    windds5 = w.wss(
        latelyrd[0], "wgsd_bps_new,total_shares,operatecashflow_ttm2,or_ttm2",
        "currencyType=;unit=1;tradeDate=" + timestr + ";rptDate=" + str(lt[0]))
    if (len(lt) > 1):
        for a in range(1, len(lt)):
            winddst = w.wss(
                latelyrd[a],
                "wgsd_bps_new,total_shares,operatecashflow_ttm2,or_ttm2",
                "currencyType=;unit=1;tradeDate=" + timestr + ";rptDate=" +
                str(lt[a]))
            windds5.Codes += winddst.Codes
            for b in range(len(winddst.Data)):
                windds5.Data[b] += winddst.Data[b]
    del winddst

    windds2 = w.wss(
        windds5.Codes,
        'ev,mkt_cap_float,high_per,low_per,turn,free_turn_n,total_shares,float_a_shares,free_float_shares',
        "unit=1;tradeDate=" + timestr + ";currencyType=;startDate=" +
        startdate + ";endDate=" + timestr + ";priceAdj=U")
    windds3 = w.wss(
        windds5.Codes,
        "high_per,low_per,maxupordown,high_date_per,low_date_per",
        "unit=1;tradeDate=" + timestr + ";currencyType=;startDate=" +
        startdate + ";endDate=" + timestr + ";priceAdj=B")

    windds7 = w.wss(
        latelyrd[0], "wgsd_cce",
        "unit=1;rptDate=" + str(lt[0]) + ";rptType=1;currencyType=")
    if (len(lt) > 1):
        for a in range(1, len(lt)):
            winddst = w.wss(
                latelyrd[a], "wgsd_cce",
                "unit=1;rptDate=" + str(lt[a]) + ";rptType=1;currencyType=")
            windds7.Codes += winddst.Codes
            for b in range(len(winddst.Data)):
                windds7.Data[b] += winddst.Data[b]
    del winddst

    windds8 = w.wss(
        latelyrd[0], "wgsd_cce", "unit=1;rptDate=" +
        str(datetime.datetime(lt[0].year - 1, lt[0].month, lt[0].day)) +
        ";rptType=1;currencyType=")
    if (len(lt) > 1):
        for a in range(1, len(lt)):
            winddst = w.wss(
                latelyrd[a], "wgsd_cce", "unit=1;rptDate=" +
                str(datetime.datetime(lt[a].year - 1, lt[a].month,
                                      lt[a].day)) + ";rptType=1;currencyType=")
            windds8.Codes += winddst.Codes
            for b in range(len(winddst.Data)):
                windds8.Data[b] += winddst.Data[b]
    del winddst


    dc1={'Ticker':windds5.Codes,'Date':[timestr]*len(datac),'MarketValue':windds2.Data[0], \
         'MarketValueFree':windds2.Data[1],'High52w':windds2.Data[2],'Low52w':windds2.Data[3] \
         ,'TurnOver':windds2.Data[4],'TurnOverFree':windds2.Data[5],'TotalShares':windds2.Data[6],
                'TotalSharesLT':windds2.Data[7],'TotalSharesFree':windds2.Data[8]}
    lhs = []
    for i in range(len(datac)):
        lhs.append(
            int(date == windds3.Data[3][i] or date == windds3.Data[4][i]))
    dc2 = {
        'AdjHigh52w': windds3.Data[0],
        'AdjLow52w': windds3.Data[1],
        'UpDownLimitStatus': windds3.Data[2],
        'LowestHighestStatus': lhs
    }

    dc3={'PE':windds4.Data[0],'PB':windds4.Data[1],'PE_ttm':windds4.Data[2],'PCF_ocf':windds4.Data[3] \
         ,'PCF_ocfttm':windds4.Data[4],'PCF_ncf':windds4.Data[5],'PCF_ncfttm':windds4.Data[6], \
         'PS':windds4.Data[7],'PS_ttm':windds4.Data[8],'NetProfit_parent_comp_ttm':windds4.Data[9], \
         'NetProfit_parent_comp_lyr':windds4.Data[10],'NetCashFlow_oper_act_lyr':windds4.Data[11], \
         'OperRev_lyr':windds4.Data[12],'NetIncrCash_cash_equ_lyr':windds4.Data[13]}
    lhs = []
    for i in range(len(datac)):
        lhs.append(windds5.Data[0][i] * windds5.Data[1][i])
    dc4 = {
        'NetAsset': lhs,
        'NetCashFlow_oper_act_ttm': windds5.Data[2],
        'OperRev_ttm': windds5.Data[3]
    }

    lhs = []
    for i in range(len(datac)):
        if windds7.Data[0][i] == None or windds8.Data[0][i] == None:
            lhs.append(None)
        else:
            lhs.append(windds7.Data[0][i] - windds8.Data[0][i])
    dc5 = {'NetIncrCash_cash_equ_ttm': lhs}
    df1 = pd.DataFrame(dc1)
    df2 = pd.DataFrame(dc2)
    df3 = pd.DataFrame(dc3)
    df4 = pd.DataFrame(dc4)
    df5 = pd.DataFrame(dc5)
    df = pd.concat([df1, df2], axis=1)
    df = pd.concat([df, df3], axis=1)
    df = pd.concat([df, df4], axis=1)
    df = pd.concat([df, df5], axis=1)
    df = df[[
        'Ticker', 'Date', 'MarketValue', 'MarketValueFree', 'High52w',
        'Low52w', 'TurnOver', 'TurnOverFree', 'TotalShares', 'TotalSharesLT',
        'TotalSharesFree', 'AdjHigh52w', 'AdjLow52w', 'UpDownLimitStatus',
        'LowestHighestStatus', 'PE', 'PB', 'PE_ttm', 'PCF_ocf', 'PCF_ocfttm',
        'PCF_ncf', 'PCF_ncfttm', 'PS', 'PS_ttm', 'NetProfit_parent_comp_ttm',
        'NetProfit_parent_comp_lyr', 'NetAsset', 'NetCashFlow_oper_act_ttm',
        'NetCashFlow_oper_act_lyr', 'OperRev_ttm', 'OperRev_lyr',
        'NetIncrCash_cash_equ_ttm', 'NetIncrCash_cash_equ_lyr'
    ]]
    df = df.sort_values(by="Ticker")
    print(df)
    w.stop()
    return df
コード例 #23
0
 def __del__(self):
     w.stop()
コード例 #24
0
def getWsd(security):
    w.start()
    data = w.wsd(security, "open,close,low,high,amt", 'LQ1')
    w.stop()
    return data
コード例 #25
0
    def post(self):
        """
        json str:{"codes": "600008.SH, "fields": "ask1,bid1,asize1,bsize1,volume,amt,pre_close,open,high,low,last",
            "begin_time": "2017-01-04", "end_time": "2017-02-28", "options": ""}
        :return: 返回万得返回数据dict
        """
        args = receive_wst_parser.parse_args()
        logger.info('/wst/ args:%s', args)
        # codes = args['codes']
        # fields = args['fields']
        # begin_time = args['begin_time']
        # end_time = args['end_time']
        # options = args['options']
        if args['options'] == "":
            args['options'] = None
        if not w.isconnected():
            w.start()
        ret_data = None
        for nth in range(2):
            ret_data = w.wst(**args)
            error_code = ret_data.ErrorCode
            if error_code != 0:
                if nth == 0 and error_code == -40521010:
                    w.stop()
                    w.start()
                    logger.warning('尝试重新登陆成功,再次调用函数')
                    continue

                msg = ERROR_CODE_MSG_DIC.setdefault(error_code, "")
                logger.error('wst(%s) ErrorCode=%d %s' %
                             (args, error_code, msg))
                raise RequestError(msg, None, error_code)
            else:
                break
        else:
            if ret_data is None:
                msg = 'wst(%s) ret_data is None' % args
                logger.error(msg)
                raise RequestError(msg, None, 0)
        # 将 Data数据中所有 datetime date 类型的数据转换为 string
        data_len = len(ret_data.Data)

        for n_data in range(data_len):
            data = ret_data.Data[n_data]
            data_len2 = len(data)
            if data_len2 > 0:
                # 取出第一个部位None的数据
                item_check = None
                for item_check in data:
                    if item_check is not None:
                        break
                # 进行类型检查,如果发现是 datetime, date 类型之一,则进行类型转换
                if item_check is not None and type(item_check) in (datetime,
                                                                   date):
                    ret_data.Data[n_data] = [
                        format_2_datetime_str(dt) for dt in data
                    ]
                    logger.info('%d column["%s"]  date to str', n_data,
                                ret_data.Fields[n_data])
        # 组成 DataFrame
        ret_df = pd.DataFrame(
            ret_data.Data,
            index=ret_data.Fields,
            columns=[format_2_datetime_str(dt) for dt in ret_data.Times])
        # print(ret_df)
        ret_dic = ret_df.to_dict()
        # print('ret_dic:\n', ret_dic)
        return ret_dic
コード例 #26
0
                                      MinuteMAFlag, NumAct, monthlist)
    if ActFlag != 0:  #Act标识可以进行操作
        ActualAmount = checkAmount(ActFlag, amount, LivePX, TodayMoney,
                                   TodayPos)  #计算真实应该交易的数量
        if ActualAmount != 0:
            # TodayMoney, TodayPos = Trade(ActFlag, ActualAmount, TaxRate, LivePX, TodayMoney, TodayPos)
            TodayMoney, TodayPos = SimulateTrade(Kind, AccountInfo, ActFlag,
                                                 ActualAmount, TaxRate, LivePX,
                                                 TodayMoney, TodayPos)  #模拟交易
            NumAct += 1  #当天交易次数加1
            LastACT = ActFlag  #更新ACT标识
            OriginMAFlag = MinuteMAFlag  #更新均线交叉标识
    PrintTradeLog(ActFlag, ActualAmount, TodayMoney, TodayPos, LogFile)

    time.sleep(interval)  #根据计算得到的时间间隔,暂停程序运行
ClosePX = w.wsd(Kind, "close", "ED0TD", date.today(),
                "Fill=Previous").Data[0][0]  # 获取获取今日收盘价
profit = calc_profit(Money, Pos, LastPX, TodayMoney, TodayPos, ClosePX,
                     OriginAsset)  # 计算资金/持仓变化
print("%s Summary of %s %s" % ('-' * 10, TodayDate, '-' * 10))  #分割线
DayFile = CheckDayFile(DayFileName, TodayDate)  #
PrintDayRecord(TodayDate, TodayMoney, TodayPos, ClosePX, profit, LastACT,
               DayFile)
#Money = TodayMoney
#Pos = TodayPos

LogFile.close()
DayFile.close()
w.stop()  #关闭Wind-Python接口

Plot_Live_MAProfit(LogFileName, DayFileName)  #根据记录的Day、Log文件绘图
コード例 #27
0
ファイル: getPrice.py プロジェクト: holonking/windTester
		for i in range(0,len(arrOpen)):
			po=arrOpen[i]
			if po==None or numpy.isnan(po): po=0
			ph=arrHigh[i]
			if ph==None or numpy.isnan(ph): ph=0
			pl=arrLow[i]
			if pl==None or numpy.isnan(pl): pl=0
			pc=arrClose[i]
			if pc==None or numpy.isnan(pc): pc=0
			pv=arrVolume[i]
			if pv==None or numpy.isnan(pv): pv=0

			strO=str(po)
			strH=str(ph)
			strL=str(pl)
			strC=str(pc)
			strV=str(pv)
			message="insert into dp values(%s,\"%s\",%s,%s,%s,%s,%s)"%(stock.split(".")[0],str(datei),strO,strH,strL,strC,strV)
			#print ("meswsage="+message)
			cur.execute(message)
			datei=datei+oneday
		#for i
	#for j

#if connect

conn.commit()

#close conenction
w.stop()
コード例 #28
0
    def download_marketData(self, indexNameList=[]):
        '''
        从WIND获取目标数据
        :param: startDate: 数据下载时间起点
        :return:数据csv文件
        '''
        # 内置参数
        cnMarketDict = {
            u'open': u'开盘价',
            'high': u'最高价',
            'low': u'最低价',
            'close': u'收盘价',
            'volume': u'成交量',
            'amt': u'成交额',
            'vwap': u'均价',
            'turn': u'换手率',
            'vol_ratio': u'量比',
            'pct_chg': '涨跌幅',
            'mkt_cap_ard': u'总市值',
            'mkt_cap_float': '流通市值',
            u'maxupordown': u'涨跌停',
            u'PB_LF': u'PB_LF',
            'PE_TTM': u'PE_TTM',
            'PS_TTM': u'PS_TTM',
            u'pb': u'pb'
        }
        mktFileNameDict = {
            u'open': u'open',
            'high': u'high',
            'low': u'low',
            'close': u'close',
            'volume': u'volume',
            'amt': u'amt',
            'vwap': u'vwap',
            'turn': u'turn',
            'vol_ratio': 'vol_ratio',
            u'pct_chg': 'pct_chg',
            'mkt_cap_ard': u'SZ_Total',
            'mkt_cap_float': u'SZ_LT',
            u'maxupordown': u'maxupordown',
            'PB_LF': u'PB_LF',
            'PE_TTM': u'PE_TTM',
            'PS_TTM': u'PS_TTM',
            u'pb': u'pb'
        }
        startDate = copy.deepcopy(self.startDate)
        lastTradeday = copy.deepcopy(self.lastTradeday)

        # 设置全市场数据参数
        w.start()
        defaultIndexNameList = [
            u'open', u'high', u'low', u'close', u'volume', u'turn'
        ]
        if indexNameList == []:
            indexNameList = defaultIndexNameList
        stockCodelist = copy.deepcopy(self.stockCodelist)
        joinStockCode = u','.join(stockCodelist)
        colName = copy.deepcopy(stockCodelist)
        colName.insert(0, u'Date')
        # 下载数据
        for i in range(len(indexNameList)):
            if indexNameList[i] in ['vol_ratio']:
                periodType = 'D'
            else:
                periodType = 'A'
            dataSet = {}
            dateRangeDict = {}
            uniPeriodList = self.uniPeriodListDcit[periodType]
            periodList = self.periodListDcit[periodType]
            for p in range(len(uniPeriodList)):  # 周期迭代
                period = uniPeriodList[p]
                periodLocSer = pd.Series(periodList.loc[period])
                tempSlice = periodList.index.get_loc(period)
                if len(periodLocSer) >= 2:
                    stLoc = tempSlice.start
                    enLoc = tempSlice.stop - 1
                else:
                    stLoc = tempSlice
                    enLoc = tempSlice
                dateRange = [self.strDayList[stLoc], self.strDayList[enLoc]]
                # 下载数据
                downLoadFormula = 'w.wsd(joinStockCode, indexNameList[i], dateRange[0], dateRange[-1],'
                if indexNameList[i] == u"mkt_cap_float":
                    result = eval(downLoadFormula +
                                  '"unit=1;currencyType=;PriceAdj=F")')
                elif indexNameList[i] == u"mkt_cap_ard":
                    result = eval(downLoadFormula + '"unit=1;PriceAdj=F")')
                elif indexNameList[i] in [u"pb"]:
                    result = eval(downLoadFormula + '"ruleType=3;PriceAdj=F")')
                elif indexNameList[i] in ['vol_ratio']:  # 逐天下载
                    result = eval(downLoadFormula +
                                  '"VolumeRatio_N=5;PriceAdj=F")')
                else:
                    result = eval(downLoadFormula +
                                  '"PriceAdj=F")')  # 普通行情数据,例如开盘价,换手率
                dataSet[period] = result
                dateRangeDict[period] = [stLoc, enLoc]
            print(cnMarketDict[indexNameList[i]] + u'全时间段下载完毕')  # 保存数据至csv文件
            strFilename = os.getcwd() + u'/DownloadedData/OriginalData/' + cnMarketDict[indexNameList[i]] + \
                          startDate + u'-' + str(lastTradeday) + u'.csv'
            self.processedFilenameDict[mktFileNameDict[
                indexNameList[i]]] = strFilename
            csvFile = open(strFilename, u'w', newline=u'')
            csvWriter = csv.writer(csvFile)
            csvWriter.writerow(colName)  # 第一行股票代码
            for key in uniPeriodList:  # 周期
                st = dateRangeDict[key][0]
                end = dateRangeDict[key][-1]
                csvTradedayList = self.strDayList[st:end + 1]
                for j in range(len(csvTradedayList)):  # 不同交易日
                    row = [i[j] for i in dataSet[key].Data]  # j 时间段所有股票代码数据
                    row.insert(0, csvTradedayList[j])
                    csvWriter.writerow(row)
            csvFile.close()
        w.stop()
        print(u'所有全市场数据下载完毕')
コード例 #29
0
ファイル: wind_data.py プロジェクト: Allen1203/pyktrader
def get_min_data(filename):
    file_folder = 'C:\\dev\\src\\ktlib\\data3\\'
    reader = csv.reader(file(filename, 'rb'))
    contList = []
    fields = 'open,close,high,low,volume,oi'
    contStart = []
    contEnd = []
    for line in reader:
        contList.append(line[0])
        contStart.append(line[1])
        contEnd.append(line[2])
    
    #w.start()
    for cont, startD, endD in zip(contList, contStart, contEnd):
        if cont[1].isalpha(): key = cont[:2]
        else: key = cont[:1]
        ex = 'SH'
        for exch in product_code.keys():
            if key in product_code[exch]:
                ex = exch
                
        ticker = cont + '.' + ex
        startmin = ""
        endMin = ""
        
        if ex == 'CFE':
            startMin = " 09:14:00"
            endMin = " 15:15:00"
        else:
            startMin = " 08:59:00"
            endMin = " 15:00:00"
            
        if ex == 'CFE':
            startMin = " 09:14:00"
            endMin = " 15:15:00"
        else:
            startMin = " 08:59:00"
            endMin = " 15:00:00"
            
        try:
            sdate = datetime.datetime.strptime(startD, "%Y/%m/%d")
            edate = datetime.datetime.strptime(endD, "%Y/%m/%d")
            sMin = datetime.datetime.strptime(startD + startMin, "%Y/%m/%d %H:%M:%S")
            eMin = datetime.datetime.strptime(endD + endMin, "%Y/%m/%d %H:%M:%S")
            print ticker, sMin, eMin
            if edate > datetime.date(2009,1,1):
                raw_data = w.wsi(ticker,fields,sMin,eMin)
                if len(raw_data.Data)>1:
                    outfile = file_folder + cont+'_min.csv'
                    output={'datetime':raw_data.Times, 
                        'open':raw_data.Data[0],
                        'close':raw_data.Data[1],
                        'high':raw_data.Data[2],
                        'low':raw_data.Data[3],
                        'volume':raw_data.Data[4],
                        'openInterest':raw_data.Data[5]}
                    dump2csvfile(output,outfile)
                else:
                    print "no min data obtained for ticker=%s" % ticker
            
            raw_data = w.wsd(ticker,fields,sdate,edate)
            if len(raw_data.Data)>1:
                outfile = file_folder + cont+'_daily.csv'
                output={'datetime':raw_data.Times, 
                        'open':raw_data.Data[0],
                        'close':raw_data.Data[1],
                        'high':raw_data.Data[2],
                        'low':raw_data.Data[3],
                        'volume':raw_data.Data[4],
                        'openInterest':raw_data.Data[5]}
                dump2csvfile(output,outfile)
            else:
                print "no daily data obtained for ticker=%s" % ticker
        except ValueError:
            pass

    w.stop()
    return True
コード例 #30
0
 def download_indexData(self, indexCodeList=[]):
     # 内置参数
     startDate = copy.deepcopy(self.startDate)
     endDate = copy.deepcopy(self.endDate)
     lastTradeday = copy.deepcopy(self.lastTradeday)
     cnIndexDict = {
         u"000016.SH": u'上证50指数',
         u"000905.SH": u'中证500指数',
         u"000001.SH": u'上证指数',
         u"000300.SH": u'沪深300指数',
         u"399005.SZ": u'中小板指数',
         u'000852.SH': u'中证1000',
         u"399001.SZ": u'深圳成指',
         u"399006.SZ": u'创业板',
         "399902.SZ": '中证流通',
         "SPBCNCOT.SPI": '标普中国债券指数',
         "NH0100.NHF": '南华商品指数',
         "049.CS": '中债银行间债券总财富(总值)指数',
         "884100.WI": '新三板指数',
         "885006.WI": u'混合债券型一级基金指数',
         "885007.WI": '长期纯债型基金指数',
         "885008.WI": '混合债券型二级基金指数'
     }
     indexFileNameDict = {
         u"000016.SH": u'sz50',
         u"000905.SH": u'zz500',
         u"000001.SH": u'szzs',
         u"000300.SH": u'hs300',
         u"399005.SZ": u'zxb',
         u'000852.SH': u'zz1000',
         u"399001.SZ": u'szcz',
         u"399006.SZ": u'cyb'
     }
     # 设置指数数据
     w.start()
     if indexCodeList == []:
         indexCodeList = [
             u"000016.SH", u"000905.SH", u"000001.SH", u"000300.SH",
             u"399005.SZ", u'000852.SH', u"399001.SZ", u"399006.SZ"
         ]
     # 指数数据下载
     fieldName = [u"open", u"high", u"low", u"close", u"volume"]
     # fieldName = [u"open", u"close"]
     joinFieldName = ','.join(fieldName)
     fieldCNName = [u'开盘', u'最高', u'最低', u'收盘', u'成交量']
     colName2 = copy.deepcopy(fieldCNName)
     colName2.insert(0, u'Date')
     for i in range(len(indexCodeList)):
         dataSet = {}
         # 按年下载数据
         yearNum = int(startDate.split(u'-')[0])
         yearTradedaySet = {}
         tempStartDate = startDate
         latestYearNum, lastEndDate = int(endDate.split(u'-')[0]), int(
             endDate.split(u'-')[2])
         while yearNum <= latestYearNum:
             if yearNum == int(latestYearNum):
                 tempEndDate = endDate
             else:
                 tempEndDate = str(yearNum) + u'-12-31'
             yearTradedayList = w.tdays(tempStartDate, tempEndDate,
                                        u"").Data[0]
             yearFirstTradeday = yearTradedayList[0].date()
             yearLastTradeday = yearTradedayList[-1].date()
             # 下载数据
             indexResult = w.wsd(indexCodeList[i], joinFieldName,
                                 str(yearFirstTradeday),
                                 str(yearLastTradeday), u"PriceAdj=F")
             dataSet[str(yearNum)] = indexResult
             yearTradedaySet[str(yearNum)] = yearTradedayList
             yearNum += int(1)
             tempStartDate = str(yearNum) + u'-01-01'
         print(cnIndexDict[indexCodeList[i]] + u'全时间段下载完毕')
         # 创建文件
         tempDf = pd.DataFrame()
         strFilename = os.getcwd() + u'/DownloadedData/OriginalData/' + cnIndexDict[indexCodeList[i]] + \
                       startDate + r'-' + str(lastTradeday) + u'.csv'
         self.processedFilenameDict[indexFileNameDict[
             indexCodeList[i]]] = strFilename
         csvFile = open(strFilename, u'w', newline=u'')
         csvWriter = csv.writer(csvFile)
         csvWriter.writerow(colName2)  # 第一行股票代码
         for key in yearTradedaySet:  # 不同年
             csvTradedayList = yearTradedaySet[key]
             for j in range(len(csvTradedayList)):
                 row = [i[j] for i in dataSet[key].Data]  # j 时间段所有股票代码数据
                 row.insert(0, csvTradedayList[j].date())
                 csvWriter.writerow(row)
                 tempDf = tempDf.append([row])
         csvFile.close()
     w.stop()
     print(u'所有指数数据下载完毕')
コード例 #31
0
"""
Created on Fri May  8 12:20:47 2020

@author: -
"""

import pandas as pd  # 用于数据处理
from WindPy import w  # 用于打开wind

import matplotlib.pyplot as plt  # 用于画图

#pd.read_excel("draw.xlsx",sheet_name='')
w.start()  # 用于打开wind

df1 = w.wsd("000001.SH", "close", "2019-01-01", "2019-12-31", usedf=True)[1]
df2 = w.wsd("000001.SH", "close", "2020-01-01", "2020-04-30", usedf=True)[1]

df = w.wsd("000001.SH", "close", "2019-01-01", "2020-04-30", usedf=True)[1]

#fig = plt.figure()
plt.plot(df1.index, df1.CLOSE)
plt.plot(df2.index, df2.CLOSE)

plt.plot(df.index[:-len(df2)], df.CLOSE.iloc[:-len(df2)])
plt.plot(df.index[len(df1):], df.CLOSE.iloc[len(df1):])
plt.show()

#plt.figure(figsize=(200, 80))

w.stop()  # 用于关闭wind
コード例 #32
0
 def __init__(self,
              stockCodelist=[],
              marketGroupCode=[],
              startDate=u'2017-09-08',
              endDate=[],
              *args):
     '''
     初始化参数
     '''
     self.startDate = startDate
     if startDate == []:
         self.startDate = str(datetime.date.today() -
                              datetime.timedelta(days=1))
     self.endDate = endDate
     if self.endDate == []:
         self.endDate = str(datetime.date.today())
         # self.endDate = datetime.date.today() - datetime.timedelta(days=1)
     self.marketGroupCode = marketGroupCode
     if self.marketGroupCode == []:
         self.marketGroupCode = 'a001010100000000'
     # 交易日数据获取
     w.start()
     self.tradedayList = w.tdays(self.startDate, self.endDate, u"").Data[0]
     self.strDayList = [str(i.date()) for i in self.tradedayList]
     tradedayDf = pd.DataFrame(self.tradedayList, index=self.tradedayList)
     tradedayDf.to_csv('tradedayList.csv')
     # 周期序列字典
     self.periodTypeList = ['D', 'W', 'M', 'A']
     self.uniPeriodListDcit = {
         i: toPeriodList(periodType=i, dailyList=self.tradedayList)[0]
         for i in self.periodTypeList
     }
     self.periodListDcit = {
         i: toPeriodList(periodType=i, dailyList=self.tradedayList)[1]
         for i in self.periodTypeList
     }
     self.lastTradeday = self.tradedayList[-1].date()
     self.processedFilenameDict = {}
     # stockCodelist 获取
     self.stockCodelist = stockCodelist
     if self.stockCodelist == []:
         # 取所有时间段股票代码
         periodType = 'A'  # 按年循环
         uniPeriodList = self.uniPeriodListDcit[periodType]
         periodList = self.periodListDcit[periodType]
         for p in range(len(uniPeriodList)):  # 周期迭代
             period = uniPeriodList[p]
             periodLocSer = pd.Series(periodList.loc[period])
             tempSlice = periodList.index.get_loc(period)
             if len(periodLocSer) >= 2:
                 stLoc = tempSlice.start
                 enLoc = tempSlice.stop - 1
             else:
                 stLoc = tempSlice
                 enLoc = tempSlice
             dateRange = [self.strDayList[stLoc], self.strDayList[enLoc]]
             yearStockCodelist = w.wset(
                 u"sectorconstituent",
                 u"date=" + dateRange[-1] + u";sectorid=" +
                 self.marketGroupCode + u";field=wind_code").Data[0]  # 年末
             if not p:  # 第一期
                 fianlStockCodelist = list(yearStockCodelist)
             else:
                 fianlStockCodelist = list(
                     set(fianlStockCodelist).union(set(yearStockCodelist)))
             fianlStockCodelist.sort()
         self.stockCodelist = fianlStockCodelist
         # csvFile1 = open(u'StockCodes' + self.strDayList[-1] + '.csv', u'w', newline=u'')
         # csvWriter = csv.writer(csvFile1)
         # csvWriter.writerow(self.stockCodelist)  # 第一行股票代码
         # csvFile1.close()
     w.stop()
コード例 #33
0
    def post(self):
        """
        json str:{"codes": "M0017126,M0017127,M0017128",
            "begin_time": "2016-11-10", "end_time": "2017-11-10", "options": "Fill=Previous"}
        :return: 返回万得返回数据dict
        """
        args = receive_edb_parser.parse_args()
        logger.info('/edb/ args:%s', args)
        codes = args['codes']
        # begin_time = args['begin_time']
        # end_time = args['end_time']
        # options = args['options']
        if args['options'] == "":
            args['options'] = None
        if not w.isconnected():
            w.start()
        ret_data = None
        for nth in range(2):
            ret_data = w.edb(**args)
            error_code = ret_data.ErrorCode
            if error_code != 0:
                if nth == 0 and error_code == -40521010:
                    w.stop()
                    w.start()
                    logger.warning('尝试重新登陆成功,再次调用函数')
                    continue

                msg = ERROR_CODE_MSG_DIC.setdefault(error_code, "")
                logger.error('wst(%s) ErrorCode=%d %s' %
                             (args, error_code, msg))
                raise RequestError(msg, None, error_code)
            else:
                break
        else:
            if ret_data is None:
                msg = 'wst(%s) ret_data is None' % args
                logger.error(msg)
                raise RequestError(msg, None, 0)

        # 将 Data数据中所有 datetime date 类型的数据转换为 string
        data_len = len(ret_data.Data)

        for n_data in range(data_len):
            data = ret_data.Data[n_data]
            data_len2 = len(data)
            if data_len2 > 0:
                # 取出第一个部位None的数据
                item_check = None
                for item_check in data:
                    if item_check is not None:
                        break
                # 进行类型检查,如果发现是 datetime, date 类型之一,则进行类型转换
                if item_check is not None and type(item_check) in (datetime,
                                                                   date):
                    ret_data.Data[n_data] = [
                        format_2_date_str(dt) for dt in data
                    ]
                    logger.info('%d column["%s"]  date to str', n_data,
                                ret_data.Fields[n_data])
        # 组成 DataFrame
        ret_df = pd.DataFrame(
            ret_data.Data,
            index=[xx.strip() for xx in codes.split(',')],
            columns=[format_2_date_str(dt) for dt in ret_data.Times])
        # print(ret_df)
        ret_dic = ret_df.to_dict()
        # print('ret_dic:\n', ret_dic)
        return ret_dic
コード例 #34
0
    def post(self):
        """
        json str:{"tablename": "sectorconstituent", "options": "date=2017-03-21;sectorid=1000023121000000"}
        :return: 返回万得返回数据dict
        """
        args = receive_wset_parser.parse_args()
        logger.info('/wset/ args:%s' % args)
        # print('args:%s' % args)
        # table_name = args['table_name']
        # options = args['options']
        if args['options'] == "":
            args['options'] = None
        if not w.isconnected():
            w.start()
        ret_data = None
        for nth in range(2):
            ret_data = w.wset(**args)
            error_code = ret_data.ErrorCode
            if error_code != 0:
                if nth == 0 and error_code == -40521010:
                    w.stop()
                    w.start()
                    logger.warning('尝试重新登陆成功,再次调用函数')
                    continue

                msg = ERROR_CODE_MSG_DIC.setdefault(error_code, "")
                logger.error('wset(%s) ErrorCode=%d %s' %
                             (args, error_code, msg))
                raise RequestError(msg, None, error_code)
            else:
                break
        else:
            if ret_data is None:
                msg = 'wst(%s) ret_data is None' % args
                logger.error(msg)
                raise RequestError(msg, None, 0)
        data_count = len(ret_data.Data)
        # if data_count > 0:
        # print('ret_data.Fields\n', ret_data.Fields)
        # ret_data.Data[0] = [format_2_date_str(dt) for dt in ret_data.Data[0]]
        # print('ret_data.Data\n', ret_data.Data)

        for n_data in range(data_count):
            data_list = ret_data.Data[n_data]
            data_list_len = len(data_list)
            if data_list_len > 0:
                # 取出第一个不为None的数据
                item_check = None
                for item_check in data_list:
                    if item_check is not None:
                        break
                # 进行类型检查,如果发现是 datetime, date 类型之一,则进行类型转换
                if item_check is not None and type(item_check) in (datetime,
                                                                   date):
                    ret_data.Data[n_data] = [
                        format_2_date_str(dt) for dt in data_list
                    ]
                    logger.debug('Data[%d] column["%s"]  date to str', n_data,
                                 ret_data.Fields[n_data])

        ret_df = pd.DataFrame(ret_data.Data,
                              index=ret_data.Fields,
                              columns=ret_data.Codes)
        # print('ret_df\n', ret_df)
        ret_dic = ret_df.to_dict()
        # print('ret_dic:\n', ret_dic)
        return ret_dic
コード例 #35
0
ファイル: indexlist.py プロジェクト: mu1902/Creeper
index = [
    '000300.SH', '716567.CSI', 'SPCLLHCP.SPI', 'h30089.CSI', '931079.CSI',
    '930606.CSI', '399998.SZ'
]

if __name__ == '__main__':
    date_str = datetime.date.today().strftime('%Y-%m-%d')
    return_df = pd.DataFrame()

    w.start()
    for idx in index:
        index_list = w.wset("indexconstituent",
                            "date=" + date_str + "windcode=" + idx)

        if index_list.ErrorCode == 0:
            tmp_df = pd.DataFrame(index_list.Data,
                                  index=index_list.Fields,
                                  columns=index_list.Codes).T
            tmp_df['index'] = idx
            return_df = return_df.append(tmp_df)
        else:
            print(index_list.Data)
            sys.exit(0)
    w.stop()

    print(return_df)

    writer = pd.ExcelWriter('indexlist.xlsx')
    return_df.to_excel(writer, sheet_name='indexlist')
    writer.save()
コード例 #36
0
def closeWind():
    '''
    关闭wind接口
    '''
    w.stop()