Exemple #1
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
Exemple #2
0
    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
Exemple #4
0
    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)
Exemple #5
0
    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)
Exemple #6
0
 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)
Exemple #7
0
 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)
Exemple #8
0
    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))
Exemple #9
0
    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()
Exemple #12
0
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
Exemple #13
0
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
Exemple #14
0
    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
Exemple #15
0
    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)
Exemple #17
0
    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
Exemple #18
0
    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)))
Exemple #19
0
    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
Exemple #20
0
 def getValueAt(self, dateTime):
     return self.__getValueAtImpl(dt.datetime_to_timestamp(dateTime))
Exemple #21
0
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')
Exemple #22
0
 def getValueAt(self, dateTime):
     return self.__getValueAtImpl(dt.datetime_to_timestamp(dateTime))
def utcToLocal(utcDatetime):
    return timestamp_to_DateTimeLocal(dt.datetime_to_timestamp(utcDatetime))
Exemple #24
0
def datetime_to_tid(dateTime):
    unixTime = dt.datetime_to_timestamp(dt.as_utc(dateTime))
    return timestamp_to_tid(unixTime)
Exemple #25
0
    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)
Exemple #26
0
    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)
Exemple #27
0
def datetime_to_tid(dateTime):
    unixTime = dt.datetime_to_timestamp(dt.as_utc(dateTime))
    return timestamp_to_tid(unixTime)