Exemplo n.º 1
0
    def sell(self, coin: Coin, count_amount, status=Status.WAIT) -> bool:
        order_log = self.upbit.sell_market_order(f"KRW-{coin.name}", count_amount)
        uuid = order_log.get('uuid')
        if not uuid:
            self.logger.warning(order_log)
            return False
        while uuid and self.upbit.get_order(uuid).get('state') == 'wait':
            time.sleep(1)
        time.sleep(2)
        order_log = self.upbit.get_order(uuid)
        self.logger.debug(f"sell {order_log=}")

        coin.avg_sell_price = calculate_avg_sell_price(order_log.get('trades'))
        coin.sold_amount = calculate_total_amount(order_log)
        self.logger.info(f'매수가: {coin.avg_buy_price}, 매도가: {coin.avg_sell_price}, '
                         f'수익률: {calculate_rate(coin.avg_sell_price, coin.avg_buy_price)}')
        self.discord_conn.post(self.discord_conn.sell_data(coin))
        coin.status = status
        coin.dca_buy_cnt = 0
        coin.bought_amount = 0
        coin.avg_buy_price = 0
        coin.buy_volume_cnt = 0
        coin.avg_sell_price = 0
        coin.sold_amount = 0
        self.hold_krw = float(self.get_balance_info()['balance'])
        return True
Exemplo n.º 2
0
 def do_check_buy_success(self, stock: Coin):
     """매수 예약 걸어놓은 stock이 매수가 성공했는지 확인"""
     order = self.connector.get_order(stock.buy_uuid)
     if order.get('state') == 'wait':
         created_at: datetime = datetime.strptime(order.get('created_at')[:-6], "%Y-%m-%dT%H:%M:%S")
         if (datetime.now() - created_at).seconds >= 3 * 60:
             stock.status = Status.PASS
             self.connector.cancel_order(stock.buy_uuid)
         return
     stock.status = Status.BOUGHT
     stock.bought_amount += float(order.get('price')) * float(order.get('volume'))
     stock.avg_buy_price = float(self.connector.get_balance_info(stock.name).get('avg_buy_price'))
     stock.buy_volume_cnt = float(self.connector.get_balance_info(stock.name).get('balance'))
     self.connector.hold_krw = float(self.connector.get_balance_info()['balance'])
     self.setup_target_sell_price(stock)
Exemplo n.º 3
0
 def buy(self, coin: Coin, price_amount) -> bool:
     order_log = self.upbit.buy_market_order(f"KRW-{coin.name}", price_amount)
     uuid = order_log.get('uuid')
     coin.buy_uuid = uuid
     if not uuid:
         self.logger.warning(order_log)
         return False
     while uuid and self.upbit.get_order(uuid).get('state') == 'wait':
         time.sleep(1)
     self.logger.debug(f"{coin.name} buy {order_log=}")
     coin.status = Status.BOUGHT
     coin.dca_buy_cnt += 1
     coin.bought_amount += price_amount
     coin.avg_buy_price = float(self.get_balance_info(coin.name).get('avg_buy_price'))
     coin.buy_volume_cnt = float(self.get_balance_info(coin.name).get('balance'))
     self.hold_krw = float(self.get_balance_info()['balance'])
     return True