def importBars(self, instrument, fromDateTime, toDateTime, extra=[]): """从万得获取股票数据存入数据库,extra为字符串列表,包含了除指定字段之外的额外字段""" w.start() for i in range(0, len(instrument)): data = w.wsd(instrument[i], "open,close,low,high,volume,adjfactor,trade_status", fromDateTime, toDateTime, "") data2 = w.wsd(instrument[i], extra, fromDateTime, toDateTime, "") starttime = datetime.now() for k in range(0, len(data.Times)): if not True: bar_ = bar.BasicBar(dateTime=data.Times[k], open_=data.Data[0][k], high=data.Data[3][k], low=data.Data[2][k], close=data.Data[1][k], volume=data.Data[4][k], adjClose=data.Data[5][k] * data.Data[1][k], frequency=bar.Frequency.DAY) else: extrabar = {} if data.Data[6][k] == u'交易': extrabar['trade_status'] = 1 else: extrabar['trade_status'] = 0 for x in range(0, len(extra)): extrabar[extra[x]] = data2.Data[x][k] try: bar_ = bar.BasicBar(dateTime=data.Times[k], open_=data.Data[0][k], high=data.Data[3][k], low=data.Data[2][k], close=data.Data[1][k], volume=data.Data[4][k], adjClose=data.Data[5][k] * data.Data[1][k], frequency=bar.Frequency.DAY, extra=extrabar) except Exception: continue self.addBar(instrument[i], bar_, bar_.getFrequency()) endtime = datetime.now() print('Using pgfeed.importBars() to insert bar of ' + instrument[i]) # print endtime - starttime w.stop()
def getBars(self, instrument, frequency, timezone=None, fromDateTime=None, toDateTime=None): instrument = normalize_instrument(instrument) sql = "select bar.timestamp, bar.open, bar.high, bar.low, bar.close, bar.volume, bar.adj_close, bar.frequency" \ " from bar join instrument on (bar.instrument_id = instrument.instrument_id)" \ " where instrument.name = ? and bar.frequency = ?" args = [instrument, frequency] if fromDateTime is not None: sql += " and bar.timestamp >= ?" args.append(dt.datetime_to_timestamp(fromDateTime)) if toDateTime is not None: sql += " and bar.timestamp <= ?" args.append(dt.datetime_to_timestamp(toDateTime)) sql += " order by bar.timestamp asc" cursor = self.__connection.cursor() cursor.execute(sql, args) ret = [] for row in cursor: dateTime = dt.timestamp_to_datetime(row[0]) if timezone: dateTime = dt.localize(dateTime, timezone) ret.append( bar.BasicBar(dateTime, row[1], row[2], row[3], row[4], row[5], row[6], row[7])) cursor.close() return ret
def parseBar(self, csvRowDict): dateTime = self.__parseDateTime(csvRowDict["Date Time"]) close = float(csvRowDict["Close"]) open_ = float(csvRowDict["Open"]) high = float(csvRowDict["High"]) low = float(csvRowDict["Low"]) volume = float(csvRowDict["Volume"]) return bar.BasicBar(dateTime, open_, high, low, close, volume, None, self.__frequency)
def getGrouped(self): """Return the grouped value.""" ret = bar.BasicBar( self.getDateTime(), self.__open, self.__high, self.__low, self.__close, self.__volume, self.__adjClose, self.__frequency ) ret.setUseAdjustedValue(self.__useAdjValue) return ret
def importBars(self, instrument, fromDateTime, toDateTime, extra=[]): """从万得获取股票数据存入数据库,extra为字符串列表,包含了除指定字段之外的额外字段""" w.start() for i in range(0, len(instrument)): data = w.wsd(instrument[i], "open,close,low,high,volume,adjfactor", fromDateTime, toDateTime, "") data2 = w.wsd(instrument[i], extra, fromDateTime, toDateTime, "") # data = w.wsd(codes[i], "open,close,high,low", dt_start, dt_end, "Fill=Previous") for k in range(0, len(data.Times)): if not True: bar_ = bar.BasicBar(dateTime=data.Times[k], open_=data.Data[0][k], high=data.Data[3][k], low=data.Data[2][k], close=data.Data[1][k], volume=data.Data[4][k], adjClose=data.Data[5][k] * data.Data[1][k], frequency=bar.Frequency.DAY) else: extrabar = {} for x in range(0, len(extra)): extrabar[extra[x]] = data2.Data[x][k] bar_ = bar.BasicBar(dateTime=data.Times[k], open_=data.Data[0][k], high=data.Data[3][k], low=data.Data[2][k], close=data.Data[1][k], volume=data.Data[4][k], adjClose=data.Data[5][k] * data.Data[1][k], frequency=bar.Frequency.DAY, extra=extrabar) self.addBar(instrument[i], bar_, bar_.getFrequency()) print 'INSERT BAR OF ' + instrument[i] w.stop()
def parseBar(self, csvRowDict): dateTime = self.__parseDate(csvRowDict["Date"]) close = float(csvRowDict["Close"]) open_ = float(csvRowDict["Open"]) high = float(csvRowDict["High"]) low = float(csvRowDict["Low"]) volume = float(csvRowDict["Volume"]) adjClose = None if self.__sanitize: open_, high, low, close = common.sanitize_ohlc( open_, high, low, close) return bar.BasicBar(dateTime, open_, high, low, close, volume, adjClose, self.__frequency)
def getBars(self, instrument, frequency, timezone=None, fromDateTime=None, toDateTime=None, extra=None): instrument = normalize_instrument(instrument) sql = "select bar.timestamp, bar.open, bar.high, bar.low, bar.close, bar.volume, bar.adj_close, bar.frequency{extra}" \ " from bar join instrument on (bar.instrument_id = instrument.instrument_id)" \ " where instrument.name = %s and bar.frequency = %s" extraFieldsString = '' if extra is None: extra = [] for i in range(0, len(extra)): extraFieldsString = extraFieldsString + ", " + "bar." + extra[i] args = [instrument, frequency] if fromDateTime is not None: sql += " and bar.timestamp >= %s" args.append(dt.datetime_to_timestamp(fromDateTime)) if toDateTime is not None: sql += " and bar.timestamp <= %s" args.append(dt.datetime_to_timestamp(toDateTime)) sql += " order by bar.timestamp asc" cursor = self.__connection.cursor() cursor.execute(sql.format(extra=extraFieldsString), args) self.__connection.commit() ret = [] for row in cursor: dateTime = dt.timestamp_to_datetime(row[0]) if timezone: dateTime = dt.localize(dateTime, timezone) extraRow = {} for i in range(0, len(extra)): extraRow[extra[i]] = row[8 + i] ret.append( bar.BasicBar(dateTime, row[1], row[2], row[3], row[4], row[5], row[6], row[7], extra=extraRow)) cursor.close() return ret
def getNextBars(self): preCurrentDT = self.__currentDatetime # while self.__currentDatetime is None or preCurrentDT is None or preCurrentDT >= self.__currentDatetime: data = w.wsq(self.__instruments, "rt_last,rt_last_vol") time.sleep(1) # preCurrentDT = self.__currentDatetime self.__currentDatetime = data.Times[0] barList = [ bar.BasicBar(dateTime=self.__currentDatetime, open_=data.Data[0][i], close=data.Data[0][i], high=data.Data[0][i], low=data.Data[0][i], adjClose=data.Data[0][i], volume=data.Data[1][i], frequency=self.__frequence) for i in range(len(self.__instruments)) ] bars = {key: value for key, value in zip(self.__instruments, barList)} self.__currentBars = bars return bar.Bars(bars)
def importBarsFromCSV(self, filename, instrument): data = pd.read_csv(filename, encoding='gbk') for k in range(0, len(data)): extrabar = {} if data.iloc[k]['TRADE_STATUS'] == u'交易': extrabar['trade_status'] = 1 else: extrabar['trade_status'] = 0 # try:datetime.strptime(data.iloc[k]['DATE'], "%Y-%m-%d %H:%M:%S") bar_ = bar.BasicBar( dateTime=datetime.strptime(data.iloc[k]['DATE'][0:19], "%Y-%m-%d %H:%M:%S"), open_=data.iloc[k]['OPEN'], high=data.iloc[k]['HIGH'], low=data.iloc[k]['LOW'], close=data.iloc[k]['CLOSE'], volume=data.iloc[k]['VOLUME'], adjClose=data.iloc[k]['ADJFACTOR'] * data.iloc[k]['CLOSE'], frequency=bar.Frequency.DAY, extra=extrabar) # except Exception: # continue self.addBar(instrument, bar_, bar_.getFrequency())