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 getBars(self, instrument, frequency, timezone=None, fromDateTime=None, toDateTime=None): instrument = normalize_instrument(instrument) sql = "SELECT date_mkt, price_open, price_max, price_min, price_close, cast(volume as unsigned) as volume, 0, 0 FROM cota_hist where symbol=%s" args = [instrument] if fromDateTime is not None: sql += " and cota_hist.date_mkt >= ?" args.append(dt.datetime_to_timestamp(fromDateTime)) if toDateTime is not None: sql += " and cota_hist.date_mkt <= ?" args.append(dt.datetime_to_timestamp(toDateTime)) sql += " order by cota_hist.date_mkt asc" cursor = self.__connection.cursor() cursor.execute(sql, [instrument]) ret = [] for row in cursor: #dateTime = dt.timestamp_to_datetime(row[0]) dateTime = row[0] #if timezone: # dateTime = dt.localize(dateTime, timezone) ret.append( bar.BasicBar(dateTime, float(row[1]), float(row[2]), float(row[3]), float(row[4]), row[5], row[6], row[7])) cursor.close() return ret
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 testTimeStampConversions(self): dateTime = datetime.datetime(2000, 1, 1) self.assertEqual( dt.timestamp_to_datetime(dt.datetime_to_timestamp(dateTime), False), dateTime) dateTime = dt.as_utc(datetime.datetime(2000, 1, 1, 1, 1)) self.assertEqual( dt.timestamp_to_datetime(dt.datetime_to_timestamp(dateTime), True), dateTime)
def testTimeStampConversionsWithMicroseconds(self): dateTime = datetime.datetime(2000, 1, 1, 1, 1, 1, microsecond=10) self.assertEqual( dt.timestamp_to_datetime(dt.datetime_to_timestamp(dateTime), False), dateTime) dateTime = dt.as_utc( datetime.datetime(2000, 1, 1, 1, 1, 1, microsecond=10)) self.assertEqual( dt.timestamp_to_datetime(dt.datetime_to_timestamp(dateTime), True), dateTime)
def onNewValue(self, dateTime, value): technical.EventWindow.onNewValue(self, dateTime, value) if value is not None: timestamp = dt.datetime_to_timestamp(dateTime) if len(self.__timestamps): assert(timestamp > self.__timestamps[-1]) self.__timestamps.append(timestamp)
def onNewValue(self, dateTime, value): technical.EventWindow.onNewValue(self, dateTime, value) if value is not None: timestamp = dt.datetime_to_timestamp(dateTime) if len(self.__timestamps): assert (timestamp > self.__timestamps[-1]) self.__timestamps.append(timestamp)
def doGetHistory(self): while not self.stopped(): endTimestamp = dt.datetime_to_timestamp(self.__nextBarClose) self.__updateNextBarClose() dicts = {} try: for indentifier in self.__identifiers: response = api.getKLineBar( indentifier, endTimestamp - self.__frequency * 2, self.__period, 100) if response is None: raise Exception("getKLineBar return None!") dicts[indentifier] = response break except: time.sleep(1) continue while not self.stopped(): barDict = {} for indentifier in self.__identifiers: response = dicts[indentifier] if len(response) == 0: break barDict[indentifier] = liveBar(response.pop(-1), self.__frequency) if len(barDict) == 0: break bars = bar.Bars(barDict) self.__queue.put((GetBarThread.ON_HISTORY_BARS, bars))
def addBar(self, instrument, bar, frequency): instrument = normalize_instrument(instrument) instrumentId = self.__getOrCreateInstrument(instrument) timeStamp = dt.datetime_to_timestamp(bar.getDateTime()) try: sql = "insert into bar (instrument_id, frequency, timestamp, open, high, low, close, volume, adj_close) values (?, ?, ?, ?, ?, ?, ?, ?, ?)" params = [ instrumentId, frequency, timeStamp, bar.getOpen(), bar.getHigh(), bar.getLow(), bar.getClose(), bar.getVolume(), bar.getAdjClose() ] self.__connection.execute(sql, params) except sqlite3.IntegrityError: sql = "update bar set open = ?, high = ?, low = ?, close = ?, volume = ?, adj_close = ?" \ " where instrument_id = ? and frequency = ? and timestamp = ?" params = [ bar.getOpen(), bar.getHigh(), bar.getLow(), bar.getClose(), bar.getVolume(), bar.getAdjClose(), instrumentId, frequency, timeStamp ] self.__connection.execute(sql, params)
def getLastValuesForInstrument(self, instrument, date): sql = "select b.timestamp, b.open, b.high, b.low, b.close, b.volume from bar b inner join instrument i on i.instrument_id=b.instrument_id where i.name=? and b.timestamp<=? order by b.timestamp desc" cursor = self.__connection.cursor() cursor.execute(sql, [instrument, dt.datetime_to_timestamp(date)]) ret = cursor.next() return (dt.timestamp_to_datetime(ret[0]), ret[1], ret[2], ret[3], ret[4], ret[5])
def persistOrders(self, username, orders): userId = self.getUserId(username) cursor = self.__connection.cursor() cursor.execute(self.__DELETE_ORDERS_SQL, [userId]) for o in orders.values(): parameters = [ userId, o.getId(), o.getAction(), o.getState(), o.getType(), o.getAllOrNone(), o.getAvgFillPrice(), o.getCommissions(), o.getFilled(), o.getGoodTillCanceled(), o.getInstrument(), o.getQuantity(), dt.datetime_to_timestamp(o.getSubmitDateTime()) ] if o.getType() == Order.Type.STOP: parameters.append(0) parameters.append(o.getStopPrice()) parameters.append(o.getStopHit()) elif o.getType() == Order.Type.MARKET: parameters.append(o.getFillOnClose()) parameters.append(o.stopLossValue if o.getAction() == Order.Action.BUY else 0) parameters.append(0) else: raise ("Unsupported order type") cursor.execute(self.__SAVE_ORDERS_SQL, parameters) cursor.close()
def get_slot_datetime(dateTime, frequency): ts = dt.datetime_to_timestamp(dateTime) slot = ts / frequency slotTs = (slot + 1) * frequency - 1 ret = dt.timestamp_to_datetime(slotTs, False) if not dt.datetime_is_naive(dateTime): ret = dt.localize(ret, dateTime.tzinfo) return ret
def getBars(self, instrument, frequency, timezone=None, fromDateTime=None, toDateTime=None): instrument = normalize_instrument(instrument) instrumentId = self.__getInstrumentID(instrument) args = [instrumentId] # write column and table name if frequency is bar.Frequency.DAY: sql = self.__get_day_bar_sql() elif frequency is bar.Frequency.MINUTE: min_table_id = self.__get_minute_table_id() sql = self.__get_minute_bar_sql(min_table_id) # write where condition if fromDateTime is not None: sql += ' and timestamp >= %d' args.append(dt.datetime_to_timestamp(fromDateTime)) if toDateTime is not None: sql += ' and timestamp <= %d' args.append(dt.datetime_to_timestamp(toDateTime)) # write order sql += ' order by timestamp' # substitute parameters sql = sql % tuple(args) ret = [] result = self.mysql.fetch(sql) for row in result: dateTime = dt.timestamp_to_datetime(row[0]) if timezone: dateTime = dt.localize(dateTime, timezone) if frequency is bar.Frequency.MINUTE: o, c = self.__split(row[1]) h, l = self.__split(row[2]) v = row[3] else: o, h, l, c, v = row[1], row[2], row[3], row[4], row[5] ret.append(bar.BasicBar(dateTime, o, h, l, c, v, c, frequency)) return ret
def __init__(self, dateTime, frequency): assert isinstance(frequency, int) assert frequency > 1 assert frequency < bar.Frequency.DAY ts = int(dt.datetime_to_timestamp(dateTime)) slot = int(ts / frequency) slotTs = slot * frequency self.__begin = dt.timestamp_to_datetime(slotTs, not dt.datetime_is_naive(dateTime)) if not dt.datetime_is_naive(dateTime): self.__begin = dt.localize(self.__begin, dateTime.tzinfo) self.__end = self.__begin + datetime.timedelta(seconds=frequency)
def addBar(self, instrument, bar, frequency): instrument = normalize_instrument(instrument) instrumentId = self.__getOrCreateInstrument(instrument) timeStamp = dt.datetime_to_timestamp(bar.getDateTime()) try: sql = "insert into bar (instrument_id, frequency, timestamp, open, high, low, close, volume, adj_close) values (?, ?, ?, ?, ?, ?, ?, ?, ?)" params = [instrumentId, frequency, timeStamp, bar.getOpen(), bar.getHigh(), bar.getLow(), bar.getClose(), bar.getVolume(), bar.getAdjClose()] self.__connection.execute(sql, params) except sqlite3.IntegrityError: sql = "update bar set open = ?, high = ?, low = ?, close = ?, volume = ?, adj_close = ?" \ " where instrument_id = ? and frequency = ? and timestamp = ?" params = [bar.getOpen(), bar.getHigh(), bar.getLow(), bar.getClose(), bar.getVolume(), bar.getAdjClose(), instrumentId, frequency, timeStamp] self.__connection.execute(sql, params)
def __init__(self, dateTime, frequency): super(IntraDayRange, self).__init__() assert isinstance(frequency, int) assert frequency > 1 assert frequency < bar.Frequency.DAY ts = int(dt.datetime_to_timestamp(dateTime)) # slot = ts / frequency # 从31分开始计算 # slotTs = slot * frequency self.__begin = dt.timestamp_to_datetime( ts, not dt.datetime_is_naive(dateTime)) if not dt.datetime_is_naive(dateTime): self.__begin = dt.localize(self.__begin, dateTime.tzinfo) self.__end = self.__begin + \ datetime.timedelta(seconds=(frequency - bar.Frequency.MINUTE)) # 获取最后一个bar数据时截止 self.isFirtstCheckingNearly = True
def addTrade(self, dateTime, tid, price, amount): # To avoid collisions. if dateTime == self.__lastDateTime: dateTime += datetime.timedelta(microseconds=len(self.__events)) self.__lastDateTime = dateTime eventDict = { "data": { "id": tid, "price": price, "amount": amount, "microtimestamp": int(dt.datetime_to_timestamp(dateTime) * 1e6), "type": 0, }, "channel": "live_trades_btcusd", } self.__events.append( (wsclient.WebSocketClient.Event.TRADE, wsclient.Trade(eventDict)))
def doCall(self): endTimestamp = dt.datetime_to_timestamp(self.__nextBarClose) barDict = {} for indentifier in self.__identifiers: try: response = api.getKLineBar(indentifier, endTimestamp - self.__frequency, self.__period) if response is None: raise Exception("getKLineBar return None!") # logger.debug(response) barDict[indentifier] = liveBar(response[-1], self.__frequency) except: time.sleep(1) return False if len(barDict): bars = bar.Bars(barDict) self.__queue.put((GetBarThread.ON_BARS, bars)) self.__updateNextBarClose() return True return False
def getValueAt(self, dateTime): return self.__getValueAtImpl(dt.datetime_to_timestamp(dateTime))
import hbClient as hbc import json from liveApi.liveUtils import * from pyalgotrade.utils import dt import datetime import os broker = hbc.hbTradeClient() client = broker.getClient() sdate = dt.localize(datetime.datetime(2018, 2, 3, 22, 16), localTz) edate = dt.localize(datetime.datetime(2018, 2, 4, 15, 00), localTz) stime = int(dt.datetime_to_timestamp(sdate)) sdir = 'tradeOrders-%s' % sdate.strftime('%m%d_%H%M') print stime, sdate, sdir try: os.mkdir(sdir) except: pass @hbc.tryForever def getTradeOrder(x): symbol = x['base-currency'] + x['quote-currency'] tradeInfo = client.get( '/v1/order/orders', **{ 'symbol': symbol, 'states': 'partial-canceled,filled', 'types': 'buy-limit,sell-limit', 'start-date': sdate.strftime('%Y-%m-%d'), 'end-date': edate.strftime('%Y-%m-%d')
def utcToLocal(utcDatetime): return timestamp_to_DateTimeLocal(dt.datetime_to_timestamp(utcDatetime))
def datetime_to_tid(dateTime): unixTime = dt.datetime_to_timestamp(dt.as_utc(dateTime)) return timestamp_to_tid(unixTime)
def testTimeStampConversionsWithMicroseconds(self): dateTime = datetime.datetime(2000, 1, 1, 1, 1, 1, microsecond=10) self.assertEqual(dt.timestamp_to_datetime(dt.datetime_to_timestamp(dateTime), False), dateTime) dateTime = dt.as_utc(datetime.datetime(2000, 1, 1, 1, 1, 1, microsecond=10)) self.assertEqual(dt.timestamp_to_datetime(dt.datetime_to_timestamp(dateTime), True), dateTime)
def testTimeStampConversions(self): dateTime = datetime.datetime(2000, 1, 1) self.assertEqual(dt.timestamp_to_datetime(dt.datetime_to_timestamp(dateTime), False), dateTime) dateTime = dt.as_utc(datetime.datetime(2000, 1, 1, 1, 1)) self.assertEqual(dt.timestamp_to_datetime(dt.datetime_to_timestamp(dateTime), True), dateTime)