Пример #1
0
 def run(self):
     logger.info(f"{self} starting")
     while not self.is_shutdown():
         self.request_data()
         for i in range(int(SLEEP_TIME / SLEEP_INTERVAL)):
             self.process_messages()
             sleep(SLEEP_INTERVAL)
     logger.info(f"{self} terminating")
 def run(self):
     logger.info(f"{self} starting")
     self.initialize_portfolio_manager()
     #self.request_available_balance()
     while not self.is_shutdown():
         self.process_messages()
         sleep(1)
     logger.info(f"{self} terminating")
    def process_buy_order_request(self, msg):

        buy_order_response = self.client.place_market_order(
            msg.product_id,
            'buy',
            funds=MAX_INVESTMENT,
        )

        logger.info(buy_order_response)
Пример #4
0
 def add_message_to_priority_queue(self, msg):
     self.priority_msg_lock.acquire()
     logger.info(f"PRIORITY: {msg}")
     self.priority_msg_queue.append(msg)
     self.priority_msg_lock.release()
Пример #5
0
 def add_message_to_queue(self, msg):
     self.msg_lock.acquire()
     logger.info(msg)
     self.msg_queue.append(msg)
     self.msg_lock.release()
Пример #6
0
 def process_message(self, msg):
     if msg is not None:
         if isinstance(msg, HistoricalDataResponseMessage):
             # Check if the most recent time is from after our last most recent
             # If it is, build a new dataframe and save it. If not, we'll keep
             # trying until it is
             if datetime.fromtimestamp(msg.data[0][0],
                                       tz=timezone.utc) > self.last_time:
                 self.historical_df = list_to_dataframe(msg.data)
                 self.last_time = datetime.fromtimestamp(msg.data[0][0],
                                                         tz=timezone.utc)
         elif isinstance(msg, ProductTickerResponseMessage):
             # Shouldn't ever get a response for this before a response for
             # overall historical data
             if self.historical_df is None:
                 return 1
             fresh_df = self.historical_df.copy(deep=True)
             dt = dateutil.parser.isoparse(msg.data['time'])
             d = "{:.2f}".format(float(msg.data['price']))
             fresh_df.loc[len(fresh_df)] = [dt, 0, 0, 0, Decimal(d), 0]
             df = gather_all_crypto_data(fresh_df)
             z = np.polyfit(df.index, [float(x) for x in df.close], 1)
             if Decimal(z[0]) / Decimal(d) < Decimal(-0.0005):
                 logger.warning(
                     f"{self} has a significantly negative trend, "
                     f"avoiding this market for now")
                 return
             next_state = determine_next_state(df, self.state)
             if next_state == STATE_BUY:
                 if self.owned_crypto_balance.compare(
                         Decimal(0)) == Decimal(1):
                     logger.info(
                         f"{self} already has a outstanding balance "
                         f"of {self.owned_crypto_balance}")
                 else:
                     logger.info(f"{self} is issuing a buy order")
                     buy_order = BuyOrderRequestMessage(
                         self, self.client, self.product_id)
                     self.client.add_message_to_priority_queue(buy_order)
                     self.state = STATE_DEFAULT
             elif next_state == STATE_SELL:
                 if self.owned_crypto_balance.compare(
                         Decimal(0)) == Decimal(0):
                     logger.info(f"{self} does not have any outstanding "
                                 f"crypto to sell")
                 else:
                     logger.info(f"{self} is issuing a sell order")
                     sell_order = SellOrderRequestMessage(
                         self, self.client, self.product_id)
                     self.client.add_message_to_priority_queue(sell_order)
                     self.state = STATE_DEFAULT
             else:
                 if next_state != STATE_DEFAULT and next_state != self.state:
                     logger.info(
                         f"{self} has just entered state {next_state}")
                 self.state = next_state
         elif isinstance(msg, BuyOrderResponseMessage):
             self.owned_crypto_balance = Decimal(msg['size'])
         elif isinstance(msg, SellOrderResponseMessage):
             self.owned_crypto_balance = Decimal(0)
         else:
             return
 def run(self):
     logger.info(f"{self} starting")
     while not self.is_shutdown():
         self.process_next_message()
         sleep(1/3)
     logger.info("DONE")