Example #1
0
def isOpen(self):
    # Wait for market to open.
    print("Waiting for market to open...")
    awaitMarketOpen(self)
    # tAMO = threading.Thread(target=self.awaitMarketOpen)
    # tAMO.start()
    # tAMO.join()
    print("Market opened.")
    # Figure out when the market will close so we can prepare to sell beforehand.
    clock = self.alpaca.get_clock()
    closingTime = clock.next_close.replace(
        tzinfo=datetime.timezone.utc).timestamp()
    currTime = clock.timestamp.replace(
        tzinfo=datetime.timezone.utc).timestamp()
    self.timeToClose = closingTime - currTime
    # TODO: leaving this for now, may be removed later
    if (self.timeToClose < (60 * 16)):
        # Close all positions when 15 minutes til market close.
        print("Market closing soon.  Closing positions.")
        positions = self.alpaca.list_positions()
        for position in positions:
            if (position.side == 'long'):
                orderSide = 'sell'
            else:
                orderSide = 'buy'
            qty = abs(int(float(position.qty)))
            # qty = position.qty
            # respSO = []
            Orders.submitOrder(self, qty, position.symbol, orderSide)
Example #2
0
def newPosLogic(self, symbols):
    self.long = []
    self.short = []
    positions = self.alpaca.list_positions()
    blacklist = set()
    for position in positions:
        blacklist.add(position.symbol)
    dt = datetime.today()
    lastOpenDay = dt.strftime('%Y-%m-%d')
    for symbol in config.symbols:
        if (blacklist.isdisjoint({symbol})):
            df = pd.read_csv('Data/15MinOHLC/{}.txt'.format(symbol),
                             parse_dates=True)  #, index_col='Date'
            a = df.loc[(df['Date'] == lastOpenDay), ('rsi')].values
            b = df.loc[(df['Date'] == lastOpenDay), ('stoc k')].values
            c = df.loc[(df['Date'] == lastOpenDay), ('stoc d')].values
            d = df.loc[(df['Date'] == lastOpenDay), ('macd')].values
            e = df.loc[(df['Date'] == lastOpenDay), ('signal')].values

            if ((a < 35) and (b < 25) and (c < 25) and (d > e)):
                print('buy signal for {}'.format(symbol))
                self.long.append(symbol)
            elif ((a > 65) and (b > 75) and (c > 75) and (d < e)):
                print('sell signal for {}'.format(symbol))
                self.short.append(symbol)
        else:
            print('symbol is in an open position, not placing new position')
    Orders.orderSize(self, self.long, self.short)
Example #3
0
def trigger_balance(n1):
    ctx = dash.callback_context
    button_id = ctx.triggered[0]['prop_id'].split('.')
    if button_id[0] == 'balance_btn':
        new_keys = dbrools.my_keys.find_one()
        api_key = new_keys['bin']['key']
        api_secret = new_keys['bin']['secret']

        bclient = Client(api_key=api_key, api_secret=api_secret)

        Orders.my_balance(client=bclient)
        repons = dbrools.get_my_balances()
        return ["{0:.2f} $".format(float(repons['USDT']))]
    else:
        raise PreventUpdate
Example #4
0
    def MyOrders(self, Pair):
        qString = "pair=" + str(Pair) + "&nonce=" + (str(int(time.time())))
        sign = self.ComputeHash(qString)
        url = self.Url + "Order/MyOrders"
        response = self.Query(qString, url, sign)
        _json = json.loads(response.decode("utf-8"))
        orders = Orders()
        if 'bids' in _json:
            for bid in _json['bids']:
                tOrder = TradeOrder()
                tOrder.a = bid['a']
                tOrder.d = bid['d']
                tOrder.id = bid['id']
                tOrder.isBid = bid['isBid']
                tOrder.p = bid['p']
                tOrder.pair = bid['pair']
                tOrder.s = bid['s']

                orders.bids.append(tOrder)

            for ask in _json['asks']:
                tOrder = TradeOrder()
                tOrder.a = ask['a']
                tOrder.d = ask['d']
                tOrder.id = ask['id']
                tOrder.isBid = ask['isBid']
                tOrder.p = ask['p']
                tOrder.pair = ask['pair']
                tOrder.s = ask['s']

                orders.asks.append(tOrder)

        return orders
Example #5
0
    def place_new_order(self):
        bot_message = f"Added {self.symbol}{self.new_side} , \n{round(self.amount, 2)}, \n{round(float(self.my_ask), 5)},\n SL {round(float(self.my_sl), 5)} / TP {round(float(self.my_tp), 5)}"
        bot_sendtext(bot_message)
        print("\n", bot_message)
        self.order = self.main_direction

        reponse = Orders.my_order(
            client=self.bclient,
            symbol=f"{self.symbol.upper()}{self.new_side}USDT",
            side=1,
            amount=round(self.amount, 2))

        if reponse['error']:
            self.bot_ping = False
            logging.info(f"New order Error:\n {reponse}")
            bot_sendtext(f"New order Error:\n {reponse}")
        else:
            self.order_id = reponse['result']['orderId']
            logging.info(f"New order:\n {reponse}")
            dbrools.insert_history_new(data=reponse)
            self.order_price = self.my_bid
            data = {
                "symbol": f"{self.symbol}{self.new_side}",
                "amount": round(self.amount, 2),
                "price": self.my_ask,
                "direct": 'BUY',
                "result": 0,
                "date": f"{datetime.now().strftime('%d.%m.%Y')}"
            }
            dbrools.insert_history(data=data)
            self.order_time = time.time()
            self.place_tp_order()
Example #6
0
    def close_sl_order(self):
        bot_message = f"QUIT {self.symbol.upper()}{self.new_side} , \n{round(self.amount, 2)}, \n{round(float(self.my_sl), 5)}, \n STOP LOSS ,\n SL {round(float(self.my_sl), 4)} / TP {round(float(self.my_tp), 4)}"
        bot_sendtext(bot_message)
        print("\n", bot_message)

        result = self.bclient.cancel_order(symbol=self.main_symbol.upper(),
                                           orderId=self.order_id)

        print("\n", result)

        data = {
            "symbol": f"{self.symbol}{self.new_side}",
            "amount": round(self.amount, 2),
            "price": self.my_sl,
            "direct": 'SELL',
            "result": 1,
            "date": f"{datetime.now().strftime('%d.%m.%Y')}"
        }
        dbrools.insert_history(data=data)

        reponse = Orders.my_order(client=self.bclient,
                                  symbol=self.main_symbol.upper(),
                                  side=2,
                                  amount=round(self.amount, 2))
        logging.info(f"QUIT order:\n {reponse}")
        dbrools.insert_history_new(data=reponse)

        if reponse['error']:
            self.bot_ping = False
            logging.info(f"New order Error:\n {reponse}")
            bot_sendtext(f"New order Error:\n {reponse}")
        else:
            self.my_Stoch = False
            self.my_RSI = False
            self.order = False
Example #7
0
 def generateOrder(self, market):
     time = market.time
     # calculate the  information of order
     order = Orders.Order('low' + str(self.traderId), 0, 0, 0)
     # latency 判断是否参与交易,latency作为影响参与频率的因素,用于确定概率
     pro = random.random()
     if pro > self.latencyFactor:
         # 此次不参与
         # print('\n',self.traderId, "doesn't submit the deal this round! ")
         return
     if self.suspendTime != 20:
         # 市场中已经有订单,此次不会产生新的交易
         return
     # order suspend time
     order.suspendTime = self.suspendTime
     order.traderType = self.traderType
     # order direction
     if self.traderType == 'c':
         alphac = 0.04
         direction = alphac * (market.RecordList[
             time - 1][0] - market.RecordList[time - 2][0]) + self.epsilon
     else:
         alphaf = 0.05
         Ft = market.RecordList[time - 1][1] * (1 + 0.0001) * (1 +
                                                               self.epsilon)
         direction = alphaf * (
             Ft - market.RecordList[time - 1][0]) + self.epsilon
     # 0表示买入,1表示卖出
     if direction > 0:
         order.direction = 0
     else:
         order.direction = 1
         # order price
     order.price = round(
         market.RecordList[time - 1][0] * (1 + 0.0001) *
         (1 + self.priceEps), 2)
     # order quantity
     order.quantity = abs(direction)
     order.quantity = max(round(order.quantity, 2), 0.01)
     # 与财富相关的判断,卖出的股票数不能多于现在持有的股票数,买入花费的现金数不能超过现有的现金
     if order.direction == 1 and order.quantity > self.stock:
         # 卖出
         order.quantity = self.stock
     elif order.direction == 0:
         # 买入
         if order.quantity * order.price > self.cash:
             order.quantity = round(self.cash / order.price, 2)
     if order.quantity < 0.01:
         return
     # order time
     order.time = round(market.time + random.uniform(0, 1), 2)
     # print(order.traderId,order.traderType,order.time,order.direction,order.price,order.quantity,order.suspendTime)
     self.ownOrders.append(order)
     self.suspendTime -= 1
     if self.suspendTime <= 0:
         self.suspendTime = 20
     return order
Example #8
0
 def generateOrder(self, market):
     time = market.time
     # order judge
     temp = (market.RecordList[time - 1][0] - market.RecordList[time - 2][0]
             ) / market.RecordList[time - 2][0]
     #print(temp,self.threshold)
     if temp <= self.threshold:
         #print("This round this HFT doesn't join the market!")
         return  # don't join the market
     order = Orders.Order('high' + str(self.traderId), 0, 0, 0)
     order.traderType = 'h'
     # order direction
     direction = random.random()
     # print('The direction of this trader is :',direction)
     if direction > 0.5:
         order.direction = 0
         #0表示买入,搜索的是对向的截个列表
         best = market.AskList.sort_values(['price', 'time'],
                                           ascending=False)[0:1]['price']
     else:
         order.direction = 1
         best = market.BidList.sort_values(['price', 'time'])[0:1]['price']
     # order suspend time,高频的这个值为1,因此只要当前没有匹配成功,就会撤单并在下一轮重新参与,高频参与者每轮都会参与
     order.suspendTime = self.suspendTime
     #order.suspendTime = 1
     # order price
     order.price = round(float(best) * (1 + self.priceDis), 2)
     # !order quantity
     meanParamater = 0.625
     marketQuantity = market.mes(order.direction)
     order.quantity = marketQuantity * meanParamater * random.random()
     #order.quantity = marketQuantity * meanParamater
     order.quantity = max(round(order.quantity, 2), 0.01)
     # 持仓限制
     if order.quantity + self.stock > marketQuantity / 4:
         order.quantity = marketQuantity / 4
     #print(order.traderId,order.traderType,order.direction,order.price,order.quantity,order.suspendTime)
     # 与财富相关的判断,卖出的股票数不能多于现在持有的股票数,买入花费的现金数不能超过现有的现金
     if order.direction == 1 and order.quantity > self.stock:
         # 卖出
         #print('库存股票不足,无法卖出')
         order.quantity = self.stock
     elif order.direction == 0:
         # 买入
         if order.quantity * order.price > self.cash:
             #print('库存现金不足,无法足量买入')
             order.quantity = self.cash / order.price
     if order.quantity < 0.001:
         #print("No order!\n")
         return
     #高频的订单的提交时间
     order.time = round(market.time + random.uniform(0, 1), 2)
     return order
Example #9
0
 def genMarketDeals(self):
     deals = []
     listdeals = []
     if len(self.AskList) == 0:
         return deals
     elif len(self.BidList) == 0:
         return deals
     for ask in self.AskList.iterrows():
         for bid in self.BidList.iterrows():
             # print('AskList\n',self.AskList)
             # print('BidList\n',self.BidList)
             # print(ask[1][0])
             if bid[1][0] >= ask[1][0]:
                 # 成交,加入到历史记录中
                 price = (ask[1][0] + bid[1][0]) / 2
                 quantity = min(ask[1][4], bid[1][4])
                 deal = Orders.Deal(ask[1][3], bid[1][3], quantity, price,
                                    self.time)
                 #"AskId", "BidId", "Quantity", "Price","Time"
                 deals.append(deal)
                 self.deals.loc[self.dealnum] = [
                     ask[1][3], bid[1][3], quantity, price, self.time
                 ]
                 self.dealnum += 1
                 #deals.append([deal.sellerName,deal.buyerNameme,deal.quantity,deal.price,deal.time])
                 # print('The price of this deal is :',price)
                 # 订单变化,交易者财富更新
                 self.updateWealth(ask, bid, quantity)
                 if ask[1][4] > bid[1][4]:
                     self.cancelOrder(bid)  # 撤单,订单消失的交易者的suspend返回为原来的常数
                     self.BidList = self.BidList.drop(bid[0])
                     rest = ask[1][4] - quantity
                     self.AskList.loc[ask[0], 'quantity'] = rest
                     # print('AskList\n',self.AskList)
                     # print('BidList\n',self.BidList)
                     continue
                 elif ask[1][4] < bid[1][4]:
                     self.cancelOrder(ask)
                     self.AskList = self.AskList.drop(ask[0])
                     rest = bid[1][4] - quantity
                     self.BidList.loc[bid[0], 'quantity'] = rest
                     break
                 else:
                     self.cancelOrder(ask)
                     self.cancelOrder(bid)
                     self.BidList = self.BidList.drop(bid[0])
                     self.AskList = self.AskList.drop(ask[0])
                     break
             else:
                 print('No more deals! \n')
                 return deals
         continue
     return deals
Example #10
0
    def place_tp_order(self):
        reponse = Orders.my_order(client=self.bclient,
                                  symbol=self.main_symbol.upper(),
                                  side=2,
                                  amount=round(self.amount, 2),
                                  price=self.my_tp)

        if reponse['error']:
            self.bot_ping = False
            logging.info(f"TP order Error:\n {reponse}")
            bot_sendtext(f"TP order Error:\n {reponse}")
        else:
            self.order_id = reponse['result']['orderId']
Example #11
0
 def place_sl_order(self):
     reponse = Orders.sl_future(
         client=self.bclient,
         symbol=f"{self.symbol.upper()}USDT",
         side=self.main_direction,
         price=str(round(self.my_sl,
                         n_rools[self.symbol.upper()]['price'])),
         amount=round(self.amount,
                      n_rools[self.symbol.upper()]["decimals"]))
     if reponse['error']:
         self.bot_ping = False
         logging.info(f"TP order Error:\n {reponse}")
         bot_sendtext(f"TP order Error:\n {reponse}")
     else:
         self.order_id_sl = reponse['result']['clientOrderId']
Example #12
0
    def place_tp_order(self):
        reponse = Orders.my_order(
            client=self.bclient,
            symbol=f"{self.symbol.upper()}{self.new_side}USDT",
            side=2,
            amount=round(self.amount, 2),
            price=str(
                round(self.my_tp,
                      n_rools[self.symbol.upper()][self.new_side])))

        if reponse['error']:
            self.bot_ping = False
            logging.info(f"TP order Error:\n {reponse}")
            bot_sendtext(f"TP order Error:\n {reponse}")
        else:
            self.order_id = reponse['result']['orderId']
    def addLine(self):
        orderID = self.entryOrderID.get()
        item = self.entryItem.get()
        receiver = self.entryReceiver.get()
        telegramID = self.entryTelegramID.get()

        for widget in self.frame.winfo_children():
            widget.destroy()

        row = ["{}".format(orderID), "SDB-000-AAA-AAAA", "{}".format(receiver),"{}".format(item),"{}".format(telegramID)]

        tkinter.messagebox.showinfo("","Caricamento avvenuto con successo")

        tkinter._exit()

        Orders.Orders().addRow(row)
Example #14
0
    def add_orders(self, order_code, order_amount=None, order_class=None):
        '''
            添加医嘱进该阶段
        :return: 
        '''

        if order_code in self.stage_item_codes_set:
            print("ERROR: Order has already existed in stage")
        else:
            self.stage_item_codes_set.add(order_code)

            # 将该医嘱放入对应阶段, 若存在对应医嘱,则修改
            order_name = Orders.Orders_Dict.get_orders(order_code).order_name
            order_info = dict({
                "CLINIC_ITEM_CODE": order_code,
                "AMOUNT": order_amount,
                "ORDER_CLASS": order_class,
                "ORDER_NAME": order_name
            })
            self.stage_orders_detail[order_code] = Orders.Basic_Order_Info(
                order_info)

        return
Example #15
0
def orders():
    import Orders
    C5 = Orders.vp_start_gui()
Example #16
0
    def close_sl_order(self):
        my_order = self.bclient.get_order(
            symbol=f"{self.symbol.upper()}{self.new_side}USDT",
            orderId=self.order_id)

        if my_order['status'] == "FILLED":
            self.close_tp_order()
        elif my_order['status'] == "PARTIALLY_FILLED":
            bot_message = f"QUIT (PART){self.symbol.upper()}{self.new_side} , \n{round(self.amount, 2)}, \n{round(float(self.my_sl), 5)}, \n STOP LOSS ,\n SL {round(float(self.my_sl), 4)} / TP {round(float(self.my_tp), 4)}"
            bot_sendtext(bot_message)
            print("\n", bot_message)

            result = self.bclient.cancel_order(
                symbol=f"{self.symbol.upper()}{self.new_side}USDT",
                orderId=self.order_id)

            data = {
                "symbol": f"{self.symbol}{self.new_side}",
                "amount": round(self.amount, 2),
                "price": self.my_sl,
                "direct": 'SELL',
                "result": 1,
                "date": f"{datetime.now().strftime('%d.%m.%Y')}"
            }
            dbrools.insert_history(data=data)

            reponse = Orders.my_order(
                client=self.bclient,
                symbol=f"{self.symbol.upper()}{self.new_side}USDT",
                side=2,
                amount=round(
                    float(my_order['executedQty']) -
                    float(my_order['origQty']), 2))
            logging.info(f"QUIT order:\n {reponse}")
            dbrools.insert_history_new(data=reponse)

            if reponse['error']:
                self.bot_ping = False
                logging.info(f"New order Error:\n {reponse}")
                bot_sendtext(f"New order Error:\n {reponse}")
            else:
                self.my_Stoch = False
                self.my_RSI = False
                self.order = False
                self.order_id = False
        else:
            bot_message = f"QUIT {self.symbol.upper()}{self.new_side} , \n{round(self.amount, 2)}, \n{round(float(self.my_sl), 5)}, \n STOP LOSS ,\n SL {round(float(self.my_sl), 4)} / TP {round(float(self.my_tp), 4)}"
            bot_sendtext(bot_message)
            print("\n", bot_message)
            result = self.bclient.cancel_order(
                symbol=f"{self.symbol.upper()}{self.new_side}USDT",
                orderId=self.order_id)

            print("\n", result)

            data = {
                "symbol": f"{self.symbol}{self.new_side}",
                "amount": round(self.amount, 2),
                "price": self.my_sl,
                "direct": 'SELL',
                "result": 1,
                "date": f"{datetime.now().strftime('%d.%m.%Y')}"
            }
            dbrools.insert_history(data=data)

            reponse = Orders.my_order(
                client=self.bclient,
                symbol=f"{self.symbol.upper()}{self.new_side}USDT",
                side=2,
                amount=round(self.amount, 2))
            logging.info(f"QUIT order:\n {reponse}")
            dbrools.insert_history_new(data=reponse)

            if reponse['error']:
                self.bot_ping = False
                logging.info(f"New order Error:\n {reponse}")
                bot_sendtext(f"New order Error:\n {reponse}")
            else:
                self.my_Stoch = False
                self.my_RSI = False
                self.order = False
                self.order_id = False
Example #17
0
    def place_new_order(self):

        if self.main_direction == 1:
            self.new_side = "LONG"
        else:
            self.new_side = "SHORT"

        self.order = self.main_direction

        reponse = Orders.my_order_future(
            client=self.bclient,
            symbol=f"{self.symbol.upper()}USDT",
            side=self.main_direction,
            amount=round(self.amount,
                         n_rools[self.symbol.upper()]["decimals"]))

        if reponse['error']:
            self.bot_ping = False
            logging.info(f"New order Error:\n {reponse}")
            bot_sendtext(f"New order Error:\n {reponse}")
        else:
            self.order_id = reponse['result']['orderId']
            logging.info(f"New order:\n {reponse}")
            dbrools.insert_history_new(data=reponse)

            time.sleep(1)

            my_orders = self.bclient.futures_get_order(
                symbol=f"{self.symbol.upper()}USDT", orderId=self.order_id)
            self.my_price = float(my_orders['avgPrice'])

            if self.order == 1:
                self.my_sl = self.my_price / 1.009
                self.my_tp = self.my_price * 1.022
            else:
                self.my_sl = self.my_price * 1.009
                self.my_tp = self.my_price / 1.022

            data = {
                "symbol":
                f"{self.symbol} ({self.new_side})",
                "side":
                f"{self.new_side}",
                "amount":
                round(self.amount, n_rools[self.symbol.upper()]["decimals"]),
                "price":
                float(
                    round(self.my_price,
                          n_rools[self.symbol.upper()]['price'])),
                "direct":
                'BUY',
                "result":
                0,
                "date":
                f"{datetime.now().strftime('%d.%m.%Y')}"
            }
            dbrools.insert_history(data=data)

            bot_message = f"Added {self.symbol} ({self.new_side}), \n{round(self.amount, n_rools[self.symbol.upper()]['decimals'])}, \n{round(self.my_price, n_rools[self.symbol.upper()]['price'])},\n SL {round(self.my_sl, n_rools[self.symbol.upper()]['price'])} / TP {round(self.my_tp, n_rools[self.symbol.upper()]['price'])}"
            bot_sendtext(bot_message)
            print("\n", bot_message)

            self.place_tp_order()
Example #18
0
def curPosLogic(self):
    dt = datetime.today()
    tDelta = timedelta(days=1)
    dtLessOne = dt - tDelta
    day = dt.strftime('%Y-%m-%d')
    dayLessOne = dtLessOne.strftime('%Y-%m-%d')
    positions = self.alpaca.list_positions()
    for position in positions:
        df = pd.read_csv('data/15MinOHLC/{}.txt'.format(position.symbol),
                         parse_dates=True)
        a = df.loc[(df['Date'] == day), ('rsi')].values
        b = df.loc[(df['Date'] == day), ('stoc k')].values
        c = df.loc[(df['Date'] == day), ('stoc d')].values
        d = df.loc[(df['Date'] == day), ('macd')].values
        e = df.loc[(df['Date'] == day), ('signal')].values
        # d = df.loc[(df['Date'] == day), ('histogram')].values
        # e = df.loc[(df['Date'] == dayLessOne), ('histogram')].values
        purchasePrice = float(position.avg_entry_price)
        currentPrice = float(position.current_price)
        if (position.side == 'long'):
            if ((a > 65) and (b > 75) and (c > 75)):
                print('sell/exit signal for long position in {}'.format(
                    position.symbol))
                qty = int(position.qty)
                Orders.submitOrder(self, qty, position.symbol, 'sell')
            # may later replace with a trailing stop loss, but the macd might be an earlier warning than a stop loss
            # elif(d < e):
            #     print('macd is crossing exit position for {}'.format(position.symbol))
            #     qty = int(position.qty)
            #     Orders.submitOrder(self, qty, position.symbol, 'sell')
            elif ((currentPrice / purchasePrice) > 1.015):
                print('closing {} position to realize gains'.format(
                    position.symbol))
                qty = int(position.qty)
                Orders.submitOrder(self, qty, position.symbol, 'sell')
            elif ((currentPrice / purchasePrice) < 1):
                print('closing {} position to stop losses'.format(
                    position.symbol))
                qty = int(position.qty)
                Orders.submitOrder(self, qty, position.symbol, 'sell')
            else:
                print('holding position {} {} {}'.format(
                    position.symbol, position.qty, position.side))
        elif (position.side == 'short'):
            if ((a < 35) and (b < 25) and (c < 25)):
                print('buy/exit signal for short position in {}'.format(
                    position.symbol))
                qty = abs(int(position.qty))
                Orders.submitOrder(self, qty, position.symbol, 'buy')
            # may later replace with a trailing stop loss, but the macd might be an earlier warning than a stop loss
            # elif(e < d):
            #     print('macd is crossing exit position for {}'.format(position.symbol))
            #     qty = abs(int(position.qty))
            #     Orders.submitOrder(self, qty, position.symbol, 'buy')
            elif ((purchasePrice / currentPrice) > 1.015):
                print('closing {} position to realize gains'.format(
                    position.symbol))
                qty = abs(int(position.qty))
                Orders.submitOrder(self, qty, position.symbol, 'buy')
            elif ((purchasePrice / currentPrice) < 1):
                print('closing {} position to stop losses'.format(
                    position.symbol))
                qty = abs(int(position.qty))
                Orders.submitOrder(self, qty, position.symbol, 'buy')
            else:
                print('holding position {} {} {}'.format(
                    position.symbol, position.qty, position.side))
Example #19
0
    def __init__(self, user):
        self.wn = tk.ThemedTk()
        self.wn.configure(bg="#6262ED")
        self.wn.title("Rent a car")
        self.wn.geometry("650x450+200+50")

        self.item_index = ""
        self.my_index = 1

        self.user = user

        self.wn.get_themes()
        self.wn.set_theme('plastik')

        self.item = Admn.Admin()
        self.order = Orders.Order()

        #==========================Frame1==============================#
        self.frame1 = Frame(self.wn)
        self.frame1.place(x=10, y=10)
        self.frame1.configure(bg="#6262ED")

        self.lbl_add = Label(self.frame1,
                             font=("Calibri", 14, "bold"),
                             text="Address:",
                             bg="#6262ED")
        self.lbl_add.grid(row=0, column=0)

        self.combo_tbl1 = ttk.Combobox(self.frame1, state='readonly', width=20)
        self.combo_tbl1.grid(row=0, column=1, padx=5)
        self.combo_tbl1['values'] = self.order.all_address()

        self.btn1 = Button(self.frame1,
                           text='Search',
                           font=('Calibri', 11, "bold"),
                           fg="white",
                           background='#6262ED',
                           width=12,
                           bd=1,
                           command=self.search)
        self.btn1.grid(row=0, column=2, padx=10)

        #==========================Frame2==============================#
        self.frame2 = Frame(self.wn, bg="#6262ED")
        self.frame2.place(x=10, y=50)

        self.cars_tree = ttk.Treeview(self.frame2,
                                      columns=('Brand', 'Model', 'Price',
                                               'Address'))
        self.cars_tree.grid(row=0, column=0)
        self.cars_tree['show'] = 'headings'
        self.cars_tree.column('Brand', width=150, anchor='center')
        self.cars_tree.column('Model', width=150, anchor='center')
        self.cars_tree.column('Price', width=150, anchor='center')
        self.cars_tree.column('Address', width=155, anchor='center')
        self.cars_tree.heading('Brand', text="Brand")
        self.cars_tree.heading('Model', text="Model")
        self.cars_tree.heading('Price', text="Price")
        self.cars_tree.heading('Address', text="Address")
        self.cars_tree.bind("<Double-1>", self.select_item)

        self.vsb = ttk.Scrollbar(self.frame2,
                                 orient="vertical",
                                 command=self.cars_tree.yview)
        self.vsb.place(x=591, y=2, height=225)

        self.cars_tree.configure(yscrollcommand=self.vsb.set)

        #==========================Frame3==============================#
        self.frame3 = Frame(self.wn, bg="#6262ED")
        self.frame3.place(x=10, y=300)

        self.lbl_brand = Label(self.frame3,
                               font=("Calibri", 14, "bold"),
                               text="Brand:",
                               bg="#6262ED")
        self.lbl_brand.grid(row=0, column=0)

        self.lbl_model = Label(self.frame3,
                               font=("Calibri", 14, "bold"),
                               text="Model:",
                               bg="#6262ED")
        self.lbl_model.grid(row=1, column=0)

        self.ent_cbrand = ttk.Entry(self.frame3,
                                    font=("Verdana", 12),
                                    state="readonly")
        self.ent_cbrand.grid(row=0, column=1, padx=10)

        self.ent_cmodel = ttk.Entry(self.frame3,
                                    font=("Verdana", 12),
                                    state="readonly")
        self.ent_cmodel.grid(row=1, column=1, padx=10)

        self.lbl_price = Label(self.frame3,
                               font=("Calibri", 14, "bold"),
                               text="Price:",
                               bg="#6262ED")
        self.lbl_price.grid(row=2, column=0)

        self.ent_cprice = ttk.Entry(self.frame3,
                                    font=("Verdana", 12),
                                    state="readonly")
        self.ent_cprice.grid(row=2, column=1, padx=10)

        self.lbl_date = Label(self.frame3,
                              font=("Calibri", 14, "bold"),
                              text="Pick up Date:",
                              bg="#6262ED")
        self.lbl_date.grid(row=0, column=3)

        self.cal = DateEntry(self.frame3,
                             width=12,
                             background='darkblue',
                             foreground='white',
                             borderwidth=2,
                             state="readonly")
        self.cal.grid(row=0, column=4)

        self.lbl_days = Label(self.frame3,
                              font=("Calibri", 14, "bold"),
                              text="Days:",
                              bg="#6262ED")
        self.lbl_days.grid(row=1, column=3)

        self.combo_tbl2 = ttk.Combobox(self.frame3, state='readonly', width=11)
        self.combo_tbl2.grid(row=1, column=4, padx=5)
        self.combo_tbl2['values'] = [
            '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12',
            '13', '14', '15'
        ]

        self.btn1 = Button(self.wn,
                           text="Order",
                           font=('Calibri', 11, "bold"),
                           fg="white",
                           background='#6262ED',
                           borderwidth=0.5,
                           width=15,
                           command=self.submitOrder)
        self.btn1.place(x=260, y=400)

        self.show_menu()

        self.wn.mainloop()
Example #20
0
def main(*args):
    # file = open('config.txt')
    parser.parse(sys.argv[1])
    orders = Orders.Orders()
    orders.execute_orders(sys.argv[2], sys.argv[3])
decriptandoli usando come chiave di cifratura il seriale della SDB,
Fintanto che il seriale dell'ordine non matcha la lista degli ordini in arrivo presenti sulla SDB (orders.txt)
(Si presume che il sudetto file venga aggiornato da Amazon e si refreshi all'avvio della SDB)
Infine vengono restituiti i dati dell'ordine in fase di consegna
'''
b = ScanQR.scanqr() #Avvio Processo di ScanQR

'''
b==1 -> QR Speciale
b not none -> QR Letto correttamente dal postino
b is none -> QR NON Letto, NO apertura
'''
#Caso lettura QR in maniera corretta da Postino
if b is not None and b!=1:
    #Eliminazione ordine da "Orders.txt"
    Orders.Orders().deleteOrder(b.SerialNumber)
    
    ServoMotor.ServoOpen()
    time.sleep(40)  # Tempo inserimento pacco nel SDB
    ServoMotor.ServoClose()
    
    # Invio Messaggio da TelegramBot
    message_T = "Ciao " + b.CustomerName + " il tuo ordine che include: " + b.OrderDescription + " è in consegna presso la seguente SmartDeliveryBox: " + b.DeliveryBoxSerial
    TelegramMessage.send(message_T, b.CustomerTelegram.strip())
    time.sleep(2)
    TelegramMessage.sendqr(b.CustomerTelegram.strip())

#Caso lettura QR "Speciale" in maniera corretta
if b is not None and b==1:
    ServoMotor.ServoOpen()
    time.sleep(40) #Tempo inserimento pacco nel SDB
Example #22
0
def scanqr():
    Orders.Orders().loadOrder(
    )  #Sincronizza Ordini da FoglioGoogle->orders.txt
    timeout = 60  #Timeout time for QRCode scanning
    timeout_start = time.time()  #Avvio Timer
    while time.time() < timeout_start + timeout:
        RGB.RGBClass()
        RGB.RGBClass.blue_on()
        RGB.RGBClass.red_off()
        RGB.RGBClass.green_off()
        # crea uno stream dati in memoria
        stream = io.BytesIO()

        #  visualizzazione dello streaming della camera
        with picamera.PiCamera() as camera:
            camera.exposure_mode = 'auto'
            camera.preview_fullscreen = False
            # ridimensiono il preview per poter interrompere in caso di problemi
            camera.preview_window = (300, 200, 640, 480)
            camera.start_preview()
            sleep(1)  # aumentare se si vuole inquadrare meglio
            camera.capture(stream, format='jpeg')

        # recupera tutto il flusso per creare l'immagine
        stream.seek(0)
        pil = Image.open(stream)

        # inizializza lo scan dell'immagine
        scanner = zbar.ImageScanner()

        # configura il lettore
        scanner.parse_config('enable')

        pil = pil.convert('L')
        width, height = pil.size
        # raw = pil.tostring()
        raw = pil.tobytes()

        # wrap dati della immagine
        image = zbar.Image(width, height, 'Y800', raw)

        # cerca un QRcode
        scanner.scan(image)

        # se la password corrisponde ed e' esatta
        for symbol in image:
            # if hashlib.sha256(password).hexdigest() == symbol.data:
            for order in OrderClassList.loadorders(
            ):  #Carico e inizializzo classe da Orders.txt
                ''' 
                TO SHOW + CMD CLICK                
                '''
                if (len(symbol.data) == 44):
                    if Crypter.decode(
                            symbol.data
                    ) == order.SerialNumber or Crypter.decode(
                            symbol.data) == '000-0000000-0000001':
                        #Gestione SpecialKeyQRCode
                        if (Crypter.decode(
                                symbol.data) == '000-0000000-0000001'):
                            order = 1

                        RGB.RGBClass.blue_off()
                        RGB.RGBClass.green_on()
                        '''
                        print Crypter.decode(symbol.data)
                        print order.SerialNumber
                        print len(symbol.data)
                        '''
                        return order  # strip Eliminato qui
                    else:
                        RGB.RGBClass.blue_off()
                        RGB.RGBClass.red_pulse()

                else:
                    RGB.RGBClass.blue_off()
                    RGB.RGBClass.red_pulse()
        # pulisci e cancella
        del (image)
    return None
Example #23
0
    def __init__(self, cp_id, version_sqno, cp_detail_order, cp_detail_info,
                 stage_info):
        '''
            临床路径的阶段类
        :param cp_id: 临床路径的id
        :param version_sqno: 临床路径的版本
        :param cp_detail_order: 
        :param cp_detail_info:
        :param stage_info: 临床路径阶段的详细信息, dict格式
        :param conn: 数据库连接

        Stage包含的参数有:
            stage_sqno
            start_day
            end_day
            stage_desc
            stage_name
            stage_item_codes_set: set,该阶段所有医嘱编号的集合
            stage_orders_detail: 字典,该阶段包含的医嘱code ---> 医嘱的详细信息
            stage_required_codes_set: set, 该阶段所有必选医嘱编号的集合
            stage_required_detail: 字典,该阶段包含的必选医嘱code ---> 医嘱的详细信息
            
        '''

        self.cp_id = cp_id
        self.version_sqno = version_sqno

        self.stage_sqno = stage_info["STAGE_SQNO"]
        self.start_day = stage_info["START_DAY"]
        self.end_day = stage_info["END_DAY"]
        self.stage_desc = stage_info["STAGE_DESC"]
        self.stage_name = stage_info["STAGE_NAME"]

        self.stage_item_codes_set = set()
        self.stage_orders_detail = dict()
        self.stage_required_codes_set = set()
        self.stage_required_detail = dict()

        # 该阶段的医嘱详细信息表
        # cp_orders = pd.read_sql_query(
        #     "select * from CP_DETAIL_ORDER where CP_ID = '" + str(self.cp_id) + "' and VERSION_SQNO = '" + str(
        #         self.version_sqno) + "' and STAGE_SQNO = '" + str(self.stage_sqno) + "'", conn)
        cp_orders = cp_detail_order[cp_detail_order.STAGE_SQNO ==
                                    self.stage_sqno].reset_index(drop=True)

        # 该阶段的路径内容记录,主要用于判断医嘱是否必选
        # cp_detail_info = pd.read_sql_query("select * from CP_DETAIL_INFO where CP_ID = '" + str(self.cp_id) + "' and VERSION_SQNO = '" + str(
        #         self.version_sqno) + "' and STAGE_SQNO = '" + str(self.stage_sqno) + "'", conn).rename(columns={"ITEM_SQNO": "ORDER_SQNO"})

        cp_detail_info = cp_detail_info[cp_detail_info.STAGE_SQNO ==
                                        self.stage_sqno].rename(
                                            columns={
                                                "ITEM_SQNO": "ORDER_SQNO"
                                            }).reset_index(drop=True)

        # 获取必选医嘱的codes集合
        cp_info = cp_orders.merge(
            cp_detail_info,
            how="left",
            on=["CP_ID", "VERSION_SQNO", "STAGE_SQNO", "ORDER_SQNO"])

        cp_require_order = cp_info[cp_info.REQUIRED.astype(str) == "1"]
        self.stage_required_codes_set = set(cp_require_order.CLINIC_ITEM_CODE)

        cp_orders_columns_list = cp_orders.columns.values.tolist()  # 获取字段名称
        for each_order in cp_info.iterrows():

            self.stage_item_codes_set.add(each_order[1]["CLINIC_ITEM_CODE"])

            # 创建医嘱详情
            each_order_dict = dict([(k, each_order[1][k])
                                    for k in cp_orders_columns_list])
            order_detail = Orders.Basic_Order_Info(each_order_dict)
            self.stage_orders_detail[each_order[1]
                                     ["CLINIC_ITEM_CODE"]] = order_detail

            # 若医嘱在必选医嘱集中,则将其加入必选医嘱的详情dict
            if each_order[1][
                    "CLINIC_ITEM_CODE"] in self.stage_required_codes_set:
                self.stage_required_detail[each_order[1]
                                           ["CLINIC_ITEM_CODE"]] = order_detail

            # 将医嘱放入医嘱字典
            Orders.Orders_Dict.add_orders(each_order_dict)

        return