Beispiel #1
0
    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()
Beispiel #2
0
    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
Beispiel #3
0
 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)
Beispiel #4
0
 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
Beispiel #5
0
    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()
Beispiel #6
0
    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)
Beispiel #7
0
 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
Beispiel #8
0
    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)
Beispiel #9
0
 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())