Пример #1
0
def parseGSMstring(cmd, vals, text):
    Log.d("ParseGSM", "cmd=", cmd, "vals=", vals, "text=", text)
    if 'CMT' in cmd:
        global lastUsedPhNumb
        # Received SMS
        number = vals[0]
        curNumb = number
        lastUsedPhNumb = curNumb
        Log.i(
            "GSMParse",
            '---------- SMS got from %s with txt: \n %s \n --------------' %
            (number, text))
        if (number in ph_numb):
            HUB_send("sms," + number + "," + text)
        else:
            print('Unknown phone')
    elif 'CSQ' in cmd:
        csq = int(vals[0]) * 100 / 32
        print('Signal strength: %i ' % csq)
    elif 'CREG' in cmd:
        fParam = [
            'нет кода регистрации сети', 'есть код регистрации сети',
            'есть код регистрации сети + доп параметры'
        ]
        sParam = [
            'не зарегистрирован, поиска сети нет',
            'зарегистрирован, домашняя сеть',
            'не зарегистрирован, идёт поиск новой сети',
            'регистрация отклонена', 'неизвестно', 'роуминг'
        ]
        #Log.i("GSMParse",'Register info: %s, %s' %(fParam[int(vals[0])],sParam[int(vals[1])]))
        Log.i("GSMParse", 'Register info: %s' % (fParam[int(vals[0])]))
Пример #2
0
 def doOrder(self, market, side, price, volume, time=None, ext=None):
     cny = price * volume;
     if cny < 1:
         Log.d('\t\t market %s side %s price %f volume %f less 1' % (market, side, price, volume));
         return ;
     tradeType = 0;
     if side == 'buy':
         tradeType = 1;
     return self.client.get('order', params = {'price':price, 'amount':volume, 'tradeType':tradeType, 'currency':u2c(market)})
Пример #3
0
 def OrderResult(self, ret, orderresult):
     Log.d(
         '\t\torder result, self status {0}, result type {1}, order result {2}'
         .format(self.status, ret['type'], orderresult))
     if ret['type'] == 'sell':
         if orderresult:
             self.status = 'sell'
             self.statuscost = 0
             self.statusdelay = 0
             self.statusbuycurrent = 0
Пример #4
0
def RunTrutleAverage():
    Log.d('\nB2C rebot %s' %
          time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(Time.Time())))
    r = TrutleStatAverage(RebotConfig.rebot_period, None)  #[{'id':'002838'}]);
    #refresh data.
    while True:
        global STATUS
        if STATUS == 'stop':
            break
        stop = r.Run()
        if stop:
            break
    r.Export('%scc.csv' % RebotConfig.path)
Пример #5
0
 def doOrder(self, market, side, price, volume, time=None, ext=None):
     cny = price * volume
     if cny < 1:
         Log.d('\t\t market %s side %s price %f volume %f less 1' %
               (market, side, price, volume))
         return
     return self.client.post(get_api_path('orders'),
                             params={
                                 'market': market,
                                 'side': side,
                                 'price': price,
                                 'volume': volume
                             })
Пример #6
0
def RunA2C():
    Log.d('\nB2C rebot %s' %
          time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(Time.Time())))
    r = TrutleStatA2C(RebotConfig.rebot_period)
    #refresh data.
    while True:
        global STATUS
        if STATUS == 'stop':
            break
        stop = r.Run()
        if stop:
            break
    r.Export('%sac.csv' % RebotConfig.path)
Пример #7
0
    def get(key):
        if (key in Config.data):
            Log.d(
                'ConfigParser',
                "Got property '%s' with value '%s'." % (key, Config.data[key]))
            return Config.data[key]
        elif (key in Config.defaultConfig):
            Config.set(key, Config.defaultConfig[key])

            return Config.defaultConfig[key]
        else:
            Log.e('ConfigParser', "No property '%s' found in config." % key)
            return ""
Пример #8
0
 def doOrder(self, market, side, price, volume, time=None, ext=None):
     volume = self.getVolume(market, volume)
     price = self.getPrice(market, price)
     if volume <= 0:
         Log.d("\t\tvolume in precision is nil")
         return True, price, volume
     nside = 'buy-limit'
     if side == 'sell':
         nside = 'sell-limit'
     result = send_order(volume, 'api', market, nside, price)
     if result['status'] != 'ok':
         Log.d('\t\tdo order result {0}'.format(result))
         return False, price, volume
     # self.createOrder(result['data'], market, side, price, volume, time, ext);
     return True, price, volume
Пример #9
0
def RunA2B():
    Log.d('\nA2B rebot %s' %
          time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(Time.Time())))
    r = TrutleStatA2B(RebotConfig.rebot_period)
    t = 0
    while True:
        global STATUS
        if STATUS == 'stop':
            break
        t += 1
        # print "rebot status %s, do %d, time : %s" % (STATUS, t, time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(Time.Time())));
        stop = r.Run()
        #print '------------------------------------------------------------------------'
        if RebotConfig.rebot_is_test:
            if t > RebotConfig.rebot_test_k_count or stop == True:
                break
        else:
            print 'sleep time', RebotConfig.rebot_period * 60 / RebotConfig.rebot_do_per_period
            time.sleep(RebotConfig.rebot_period * 60 /
                       RebotConfig.rebot_do_per_period)
    r.Export('%saa.csv' % RebotConfig.path)
Пример #10
0
    def Run(self):
        # print '-----------------------------------------------------------------'
        stop = False
        rest = True
        Pool = []
        self.currenttimestamp = self.exchange.getNextKTime(
            self.period, self.currenttimestamp)
        for k, v in enumerate(self.markets):
            market = v['id']
            r = self.rules[market]
            dk = self.exchange.getK(market, 1, self.period,
                                    self.currenttimestamp)
            if len(dk) == 0:
                continue
            ret = r.Run(dk, self.period, self.currenttimestamp)
            if ret != None:
                ret['market'] = market
                if ret['result'] == 2:
                    Pool.append(ret)
            if len(dk) > 0:
                rest = False

        Log.d(time.strftime('%Y-%m-%d', time.localtime(self.currenttimestamp)))
        Pool.sort(key=lambda v: v['vol_rate'], reverse=False)
        if rest == False:
            poolsLen = len(self.RecordPools)
            for k in range(-5, 0):
                if abs(k) >= poolsLen:
                    break
                rp = self.RecordPools[k]
                pl = rp['Pool']
                Profits = rp['Profits']
                ll = 0
                hh = 0
                avergp = 0
                sratio = 0
                if len(pl) > 0:
                    cc = 0
                    for k1, v in enumerate(pl):
                        r = self.rules[v['market']]
                        kk = r.KLines[-1 + k]
                        inc = round((r.KLines[-1].c - kk.c) / kk.c * 100, 2)
                        hh = max(hh, inc)
                        ll = min(ll, inc)
                        avergp += inc
                        if inc > 0:
                            cc += 1
                    sratio = round(cc / (float)(len(pl)) * 100, 2)
                    avergp = round(avergp / len(pl), 2)
                Profits.append({
                    ('avergp%d' % k): avergp,
                    'sratio%d' % k: sratio,
                    'hh%d' % k: hh,
                    'll%d' % k: ll
                })

            self.RecordPools.append({
                'time':
                time.strftime('%Y-%m-%d',
                              time.localtime(self.currenttimestamp)),
                'Pool':
                Pool,
                'Profits': []
            })
            self.Pool = Pool

        if len(Pool) > 0:
            #print "message", time.strftime('%Y-%m-%d', time.localtime(self.currenttimestamp));
            mks = []
            for k, v in enumerate(self.Pool):
                mks.append(v['market'])
            Log.d(mks)
            #print '\t', Pool;
        if self.currenttimestamp > time.time():
            stop = True
        return stop
Пример #11
0
    def __init__(self, period):
        self.period = period
        self.exchange = Exchange(RebotConfig.access_key,
                                 RebotConfig.secret_key)
        delegate = None
        if RebotConfig.exchange == 'chbtc':
            if RebotConfig.rebot_release:
                delegate = chbtcEX()
            else:
                delegate = chbtcEXLocal()
        if RebotConfig.exchange == 'yunbi':
            if RebotConfig.rebot_release:
                delegate = yunbiEX()
            else:
                delegate = yunbiEXLocal()
        if RebotConfig.exchange == "tushare":
            delegate = tushareEXLocal()
        if RebotConfig.exchange == "huobi":
            if RebotConfig.rebot_release:
                delegate = huobiEX()
            else:
                delegate = huobiEXLocal()

        self.exchange.delegate(delegate)
        # time
        Time.SetServerTime(self.exchange.getServerTimestamp())
        # data.
        self.exchange.loadData(period, RebotConfig.rebot_test_begin)
        self.exchange.prepare(period, RebotConfig.rebot_test_begin)
        # user.
        self.user = User()
        info = self.exchange.getUser()
        print info
        # print '-----------------------------------'
        self.user.updatePositions(info['accounts'])
        # markets
        self.markets = self.exchange.getMarkets()
        # rule.
        self.rules = {}
        # init.
        #
        for k, v in enumerate(self.markets):
            market = v['id']
            # order.
            # done in right env.
            self.user.updateOrder(self.exchange.getOrder(market))
            # k line.
            if RebotConfig.rebot_is_test:
                dk = self.exchange.getK(market, 42, self.period,
                                        RebotConfig.rebot_test_begin)
                # 1498838400:2017/7/1 0:0:0; 1496246400:2017/6/1 0:0:0; 1493568000:2017/5/1 0:0:0
            else:
                dk = self.exchange.getK(market, 500, self.period)

            r = WVStats()
            # r = MutliMovingAverage();
            r.Run(dk)
            lastk = r.KLines.Get(-1)
            if lastk:
                currency = market
                #market[0:len(market)-3];
                self.user.updateHigh(currency, lastk.c)
                # c or high
                self.user.updateCost(currency, lastk.c)

            self.rules[market] = r
            Log.d(
                'index:%d, start market:%s, begin time %s, current time:%s' %
                (k, market,
                 time.strftime('%Y-%m-%d %H:%M:%S',
                               time.localtime(r.KLines.Get(0).t)),
                 time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(lastk.t))))
        #scale.
        self.scales = []
Пример #12
0
    def run(self):
        #print '-----------------------------------------------------------------'
        # markets
        nmarkets = self.exchange.getMarkets()
        if nmarkets:
            self.markets = nmarkets
        # user
        info = self.exchange.getUser()
        self.user.updatePositions(info['accounts'])
        if RebotConfig.rebot_release:
            print 'positions:'
            for k, v in (self.user.positions.items()):
                if v['volume'] * v['high'] > 10:
                    print '\t{0} {1}'.format(k, v)
            # print '\n'

        sv = self.user.positions[RebotConfig.base_currency]['volume']
        flag = False
        stop = True
        buylist = []
        selllist = []
        for k, v in enumerate(self.markets):
            market = v['id']
            # order.
            # done in right env.
            orders = self.user.updateOrder(self.exchange.getOrder(market))
            # rule
            r = self.rules[market]
            lastk = r.KLines.Get(-1)
            prelastk = lastk
            # k line.
            # dk = self.exchange.getK(market, 500, self.period, lastk.t);
            # print 'do market : %s' % market;
            dk = None
            type = None
            if lastk:
                kcount = 2
                if RebotConfig.rebot_is_test == False:
                    kcount = int(
                        math.floor((time.time() - lastk.t) /
                                   (self.period * 60)) + 2)
                if kcount < 2:
                    kcount = 2
                dk = self.exchange.getK(market, kcount, self.period, lastk.t)
            #print dk
            if dk and len(dk) > 0:
                ret = r.Run(dk)
                lastk = r.KLines.Get(-1)
                type = ret.get('type')
                if RebotConfig.rebot_release:
                    print market, time.strftime(
                        '%Y-%m-%d %H:%M:%S',
                        time.localtime(lastk.t)), time.strftime(
                            '%Y-%m-%d %H:%M:%S',
                            time.localtime(time.time())), lastk

            for orderkey, o in enumerate(orders):
                if o.checkMustCancel():
                    Log.d('\tcancel olded order {0}'.format(o))
                    if (self.exchange.doOrderCancel(o.id, market)
                            and o.type == 'sell'):
                        time.sleep(1)
                        try:
                            self.exchange.doOrder(market, 'sell', lastk.c,
                                                  o.leftvolume)
                        except Exception as e:
                            Log.d('\trepeat order failed! e:%s' % e)
            # print '\tmarket status : {1}, last k time : {2}, type : {3}'.format(market, r.status, time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(lastk.t)), type);
            if lastk and prelastk and lastk.t != prelastk.t:
                stop = False
            currency = market[0:len(market) - len(RebotConfig.base_currency)]
            pc = self.user.positions.get(currency)
            if pc and lastk:
                current = pc['volume'] * lastk.c
                sv += current
                self.user.updateHigh(currency, lastk.c)
                # c or high
                cost = self.user.getCost(currency)

                if cost and cost > 0 and False:
                    scale = (current - cost) / cost * 100
                    rate = RebotConfig.rebot_loss_ratio
                    if scale < rate:
                        if RebotConfig.rebot_is_test:
                            prate = (1 + rate * 1.1 / 100)
                            nprateprice = pc['price'] * prate
                            vol = self.user.doOrder(market, 'sell',
                                                    nprateprice)
                            print '\tmarket:%s, do sell, price:%f scale less %f, volume:%f, price:%f, time:%s' % (
                                market, pc['price'], rate, vol, nprateprice,
                                time.strftime('%Y-%m-%d %H:%M:%S',
                                              time.localtime(lastk.t)))
                            scaleless = True
                            self.exchange.doOrder(market, 'sell', nprateprice,
                                                  vol, lastk.t)
                cost = self.user.getHighCost(currency)
                if False and cost and cost > 0 and scaleless == False:
                    scale = (current - cost) / cost * 100
                    rate = RebotConfig.rebot_profit_ratio
                    if scale < rate:
                        if RebotConfig.rebot_is_test:
                            prate = (1 + rate * 1.1 / 100)
                            nprateprice = pc['high'] * prate
                            vol = self.user.doOrder(market, 'sell',
                                                    nprateprice)
                            print '\tmarket:%s, do sell, high:%f scale less %f, volume:%f, high:%f, time:%s' % (
                                market, pc['high'], rate, vol, nprateprice,
                                time.strftime('%Y-%m-%d %H:%M:%S',
                                              time.localtime(lastk.t)))
                            scaleless = True
                            self.exchange.doOrder(market, 'sell', nprateprice,
                                                  vol, lastk.t)
            if type == 'buy':
                buylist.append({'market': market, 'result': ret})
            if type == 'sell':
                selllist.append({'market': market, 'result': ret})

        # print 'do orders:'
        # sell
        nselllist = []
        for key, v in enumerate(selllist):
            market = v['market']
            nselllist.append(v)
        for key, v in enumerate(nselllist):
            market = v['market']
            k = v['result']['k']
            vol = self.user.doOrder(market, 'sell', k.c)
            if vol and vol > 0:
                flag = True
                orderresult, price, vol = self.exchange.doOrder(
                    market, 'sell', k.c, vol, k.t, v['result']['ext'])
                r = self.rules[market]
                r.OrderResult(v['result'], orderresult)
                Log.d(
                    '\tmarket:{0}, do:{1}, result:{2}, price:{3}, volume:{4}, time:{5}, ext:{6}'
                    .format(
                        market, 'SELL', orderresult, price, vol,
                        time.strftime('%Y-%m-%d %H:%M:%S',
                                      time.localtime(k.t)),
                        v['result']['ext']))
            #else:
            #    print '\tmarket:%s, not enough to sell' % market;

        # buy
        nbuylist = []
        for key, v in enumerate(buylist):
            market = v['market']
            sort = v['result']['sort']
            v['sort'] = sort
            angle = v['result'].get('angle')
            k = v['result']['k']

            # print '\tmarket %s sort %f, angle %f, time %s' % (market, sort, angle, time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(k.t)));
            if sort > 100 or sort < 0:
                print '\tmarket %s sort illegal, sort %f, time %s' % (
                    market, sort,
                    time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(k.t)))
                continue
            if angle and angle < RebotConfig.rebot_buy_least_angle:
                print '\tmarket %s angle illegal, angle %f, time %s' % (
                    market, angle,
                    time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(k.t)))
                continue
            nbuylist.append(v)
            # nbuylist.append(v);

        nbuylist.sort(key=lambda v: v['sort'], reverse=False)
        for key, v in enumerate(nbuylist):
            market = v['market']
            k = v['result']['k']
            vol = self.user.doOrder(market, 'buy', k.c)
            if vol and vol > 0:
                flag = True
                orderresult, price, vol = self.exchange.doOrder(
                    market, 'buy', k.c, vol, k.t, v['result']['ext'])
                Log.d(
                    '\tmarket:{0}, do:{1}, result:{2}, price:{3}, volume:{4}, time:{5}, ext:{6}'
                    .format(
                        market, 'BUY', orderresult, price, vol,
                        time.strftime('%Y-%m-%d %H:%M:%S',
                                      time.localtime(k.t)),
                        v['result']['ext']))
            else:
                print '\tnot enough cny !!! market:{0}, do:{1}, price:{2}, volume:{3}, time:{4}'.format(
                    market, 'buy', k.c, vol,
                    time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(k.t)))
            #else:
            #    print '\t!!! market:{0}, time:{1}, buy fail less volume : {2}'.format(market, time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(cwave.ck.t)), v['rmbvolumeN3']);
        if flag:
            ascale = (sv - self.user.initamount) / self.user.initamount * 100
            self.scales.append(ascale)
            Log.d('all scale:{0}, current cny:{1}\n'.format(ascale, sv))
        return stop
Пример #13
0
    def thread(self, intfId):
        try:
            start = time.clock()
            Log.i('DriverTCP/Thread', 'Connected')

            while True:
                #try:
                if ((time.clock() - start) > 5.0):
                    #Log.d('PortalConnect/Thread','Keep Alvie sent')
                    self.sock.sendall("\n".encode())
                    start = time.clock()
                try:
                    ready_to_read, ready_to_write, in_error = select.select([
                        self.sock,
                    ], [
                        self.sock,
                    ], [], 5)
                except select.error:
                    #conn.shutdown(2)    # 0 = done receiving, 1 = done sending, 2 = both
                    # connection error event here, maybe reconnect
                    break

                #if len(ready_to_read) > 0:
                data = self.sock.recv(2048).decode('utf-8')
                if not data:
                    break
                if len(data) > 5:
                    for line in data.split("\n"):
                        if len(line) > 5:
                            Log.i('DriverTCP/Thread', 'received "%s"' % line)
                            from DriverTCP import Msg
                            msg = Msg.fromJSONstr(self, line)
                            if (msg.cmd == "ACK" or msg.cmd == "0"
                                    or msg.cmd == "device.reg.res"):
                                #msg.cmd = "ACK"
                                Log.i(
                                    'DriverTCP/Thread',
                                    "ACK recived. Looking for awating msgs " +
                                    msg.toJSON())
                                isAckThere = False
                                toRemove = []
                                for i in range(len(self.outgoingMSG)):
                                    msgS = self.outgoingMSG[i]
                                    if (msgS.setid == msg.setid
                                            and msgS.unid == msg.unid):
                                        Log.i(
                                            'DriverTCP/ACK',
                                            "Msg for ACK found:" +
                                            msgS.toJSON(), msg)
                                        if (msgS.callback != None):
                                            Log.d('DriverTCP/ACK',
                                                  "Calling callback")
                                            msgS.callback(msg)
                                        if (msgS.socket != None):
                                            msgS.socket.sendAck(
                                                setid=msgS.setid,
                                                unid=msgS.unid)
                                        toRemove.append(i)
                                        isAckThere = True
                                        #break
                                for i in range(len(toRemove)):
                                    try:
                                        del self.outgoingMSG[i]
                                    except:
                                        pass
                                Log.i('DriverTCP/Thread',
                                      "ACK proceed complete")
                                if ((isAckThere == False
                                     or msg.cmd == "device.reg.res")
                                        and self.onRecieveCallback != None):
                                    Log.i('DriverTCP/Thread',
                                          "Calling callback", msg.cmd)
                                    self.onRecieveCallback(msg)
                            elif (msg != None and self != None
                                  and self.onRecieveCallback != None):
                                self.onRecieveCallback(msg)
                #else:
                #break
                #time.sleep(0.3)
                '''except ValueError as e:
					Log.e('DriverTCP/Thread',"While E: %s"%e)
				except ConnectionError as e:
					Log.e('DriverTCP/Thread',"While E: %s"%e)'''
                #except socket.error:
                #	Log.e('DriverTCP/Thread',"Closing driver: ", socket.error)
        except socket.error:
            Log.e('DriverTCP/Thread/1', "Closing socket: %s " % socket.error,
                  traceback.format_exc())
        except Exception as e:
            exc = str(e)
            Log.e('DriverTCP/Thread/2', exc, traceback.format_exc())
        #except ValueError:
        Log.d('DriverTCP/Thread', 'closing socket', ValueError)
        self.sock.close()
        self.connect()
Пример #14
0
    def run(self):
        # print '-----------------------------------------------------------------'
        # markets
        nmarkets = self.exchange.getMarkets()
        if nmarkets:
            self.markets = nmarkets;
        # user
        info = self.exchange.getUser();
        self.user.updatePositions(info['accounts']);
        if RebotConfig.rebot_release:
            print 'positions:';
            for k,v in (self.user.positions.items()):
                if v['volume'] > 0:
                    print '\t{0} {1}'.format(k, v);
            # print '\n'

        sv  = self.user.positions[RebotConfig.base_currency]['volume'];
        flag=False;
        stop=True;
        buylist     = [];
        selllist    = [];
        for k,v in enumerate(self.markets):
            market = v['id'];
            # order.
            # done in right env.
            orders = self.user.updateOrder(self.exchange.getOrder(market));
            # rule
            r = self.rules[market];
            lastk=r.KLines.Get(-1);
            prelastk=lastk;
            # k line.
            # dk = self.exchange.getK(market, 500, self.period, lastk.t);
            # print 'do market : %s' % market;
            dk=None;
            if lastk:
                kcount = int(math.floor((time.time()-lastk.t)/(self.period*60)) + 2);
                if kcount < 2:
                    kcount = 2;
                dk = self.exchange.getK(market, kcount, self.period, lastk.t);
            #    print dk
            type = None;
            if dk and len(dk) > 0:
                ret     = r.Run(dk);
                lastk   = r.KLines.Get(-1);
                if RebotConfig.rebot_release:
                    print market, time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(lastk.t)), time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())), lastk
                type    = ret.get('type');

            for orderkey, o in enumerate(orders):
                if o.checkMustCancel():
                    Log.d('\tcancel olded order {0}'.format(o));
                    self.exchange.doOrderCancel(o.id, market);

            #print '\tmarket status : {1}, last k time : {2}, type : {3}'.format(market, r.status, time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(lastk.t)), type);
            if lastk and prelastk and lastk.t != prelastk.t:
                stop = False;
            currency = market[0:len(market) - len(RebotConfig.base_currency)];
            pc = self.user.positions.get(currency);

            scaleless = False;
            if pc and lastk:
                current = pc['volume'] * lastk.c;
                sv += current;
                self.user.updateHigh(currency, lastk.c); # c or high
                cost = self.user.getCost(currency);

                if cost and cost > 0 and False:
                    scale = (current - cost)/cost*100;
                    rate = RebotConfig.rebot_loss_ratio;
                    if scale < rate:
                        if RebotConfig.rebot_is_test:
                            prate = (1 + rate * 1.1 / 100);
                            nprateprice = pc['price'] * prate;
                            vol = self.user.doOrder(market, 'sell', nprateprice);
                            print '\tmarket:%s, do sell, price:%f scale less %f, volume:%f, price:%f, time:%s' % (market, pc['price'], rate, vol, nprateprice, time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(lastk.t)));
                            scaleless = True;
                            self.exchange.doOrder(market, 'sell', nprateprice, vol, lastk.t);
                    # else:
                    #    print '\tmarket:{0}, scale:{1}, position high price:{2}, current price{3}'.format(market, scale, pc['high'], lastk.c);
                cost = self.user.getHighCost(currency);
                if cost and cost > 0 and scaleless == False and False:
                    scale = (current - cost)/cost*100;
                    rate = RebotConfig.rebot_profit_ratio;
                    if scale < rate:
                        if RebotConfig.rebot_is_test:
                            prate = (1 + rate * 1.1 / 100);
                            nprateprice = pc['high'] * prate;
                            vol = self.user.doOrder(market, 'sell', nprateprice);
                            print '\tmarket:%s, do sell, high:%f scale less %f, volume:%f, high:%f, time:%s' % (market, pc['high'], rate, vol, nprateprice, time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(lastk.t)));
                            scaleless = True;
                            self.exchange.doOrder(market, 'sell', nprateprice, vol, lastk.t);
                    # else:
                    # print '\tmarket:{0}, scale:{1}, position high price:{2}, current price{3}'.format(market, scale, pc['high'], lastk.c);
                #if scaleless == False:
                #    selllist.append({'market':market, 'result':{'k':lastk, 'ext':'rebot profit ratio' }})

            if scaleless == False:
                if type == 'buy':
                    buylist.append({'market':market, 'result':ret})
                if type == 'sell':
                    selllist.append({'market':market, 'result':ret})

        # print 'do orders:'
        # sell
        nselllist = [];
        for key,v in enumerate(selllist):
            market  = v['market'];
            nselllist.append(v);
        for key,v in enumerate(nselllist):
            market  = v['market'];
            k   = v['result']['k'];
            vol = self.user.doOrder(market, 'sell', k.c);
            if vol and vol > 0:
                flag = True;
                orderresult, price, vol = self.exchange.doOrder(market, 'sell', k.c, vol, k.t);
                r = self.rules[market];
                r.OrderResult(v['result'], orderresult);
                Log.d('\tmarket:{0}, do:{1}, result:{2}, price:{3}, volume:{4}, time:{5}, ext:{6}'.format(market, 'SELL', orderresult, price, vol, time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(k.t)), v['result']['ext']));
            #else:
            #    print '\tmarket:%s, not enough to sell' % market;

        # buy
        nbuylist = [];
        for key,v in enumerate(buylist):
            market = v['market'];
            sort = v['result']['sort'];
            v['sort'] = sort
            angle = v['result'].get('angle');
            k   = v['result']['k'];

            # print '\tmarket %s sort %f, angle %f, time %s' % (market, sort, angle, time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(k.t)));
            if sort > 100 or sort < 0:
                print '\tmarket %s sort illegal, sort %f, time %s' % (market, sort, time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(k.t)));
                continue;
            if angle and angle < RebotConfig.rebot_buy_least_angle:
                print '\tmarket %s angle illegal, angle %f, time %s' % (market, angle, time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(k.t)));
                continue;
            nbuylist.append(v);
            # nbuylist.append(v);

        nbuylist.sort(key=lambda v: v['sort'], reverse=False)
        for key,v in enumerate(nbuylist):
            market  = v['market'];
            k   = v['result']['k'];
            vol = self.user.doOrder(market, 'buy', k.c);
            if vol and vol > 0:
                flag=True;
                orderresult, price, vol = self.exchange.doOrder(market, 'buy', k.c, vol, k.t, {'sort':v['sort']});
                Log.d('\tmarket:{0}, do:{1}, result:{2}, price:{3}, volume:{4}, time:{5}, ext:{6}'.format(market, 'BUY', orderresult, price, vol, time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(k.t)), v['result']['ext']));
            else:
                print '\tnot enough cny !!! market:{0}, do:{1}, price:{2}, volume:{3}, time:{4}'.format(market, 'buy', k.c, vol, time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(k.t)));
            #else:
            #    print '\t!!! market:{0}, time:{1}, buy fail less volume : {2}'.format(market, time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(cwave.ck.t)), v['rmbvolumeN3']);
        if flag:
            ascale = (sv - self.user.initamount)/self.user.initamount*100;
            self.scales.append(ascale);
            Log.d('all scale:{0}, current cny:{1}\n'.format(ascale, sv));
        return stop;
Пример #15
0
def CAN_onRecieve(msg):
    global pi
    bytes = msg.data
    data = []
    for byte in bytes:
        data.append(int(byte))
    remote = msg.is_remote_frame
    id = msg.arbitration_id
    fd = msg.is_fd
    err = msg.is_error_frame
    strId = ('%.8x' % (id)).lower()
    print("1")
    if err == False and len(data) > 0 and len(strId) == 8:
        unid = strId[:4]
        setid = strId[4:]
        powerSupply = pi.read(PS_PIN) == 0
        if (len(unid) == 4 and unid != "0000" and unid != ""
                and powerSupply == True):
            Log.i('Recv', ("Received: From %s with data: %s" %
                           (strId, ';'.join(map(str, data)))))
            cmd = int(data[0] / 16)
            Log.i('Recv', "CMD: %i" % cmd)
            frameCount = data[0] % 16
            if (frameCount > 1):
                curFrame = data[1]
                if (curFrame > 0 and id in messagesWaitingComplete):
                    messagesWaitingComplete[id].value += ';'.join(
                        map(str, data[2:]))
                elif (curFrame == 0):
                    if (setid == "0000"):
                        setid = ""
                    messagesWaitingComplete[id] = Msg(unid=unid,
                                                      setid=setid,
                                                      cmd=cmdIntToStr(cmd),
                                                      value=','.join(
                                                          map(str, data[2:])),
                                                      callback=ACK_clb)
                elif (curFrame == (frameCount - 1)
                      and id in messagesWaitingComplete):
                    DriverTCP.sendMsg(messagesWaitingComplete[id])
                    del messagesWaitingComplete[id]
                else:
                    Log.e('Recv',
                          "ERROR: Lost first frames or message incomplete")
            else:
                if (setid == "0000"):
                    setid = ""

                msg = Msg(unid=unid,
                          setid=setid,
                          cmd=cmdIntToStr(cmd),
                          value=';'.join(map(str, data[1:])),
                          callback=ACK_clb)
                Log.d("Recv/TCPSend", "MSG:", msg.toJSON())
                DriverTCP.sendMsg(msg)
        elif (powerSupply == False):
            Log.w('Recv', "Skipping garbage")
        else:
            Log.w('Recv', "id:", id, "data:", data)
    else:
        Log.w('Recv', "Er:", err, "id:", id, "data:", data)
Пример #16
0
 def set(key, value):
     Config.data[key] = value
     Log.d('ConfigParser',
           "Setting property '%s' with value '%s'." % (key, value))
     Config._write_properties()