diff --git a/db.py b/db.py index 1e870a3..9d48496 100644 --- a/db.py +++ b/db.py @@ -60,19 +60,12 @@ class Order(Model): class Meta: database = db -# class Trade(Model): -# id = AutoField() -# title = CharField() -# text = CharField() -# submitter = CharField() -# image_name = CharField() -# readonly = BooleanField(default=False) -# hidden = BooleanField(default=False) -# account_index = DoubleField() -# address_index = DoubleField() -# timestamp = DateTimeField(default=datetime.now) -# -# class Meta: -# database = db +class Earning(Model): + trade_pair = CharField() + quantity = DoubleField() + date = DateTimeField(default=get_time) -db.create_tables([Ticker, Balance, Order]) + class Meta: + database = db + +db.create_tables([Ticker, Balance, Order, Earning]) diff --git a/trade.py b/trade.py index 4be1ae4..a81059d 100755 --- a/trade.py +++ b/trade.py @@ -8,7 +8,7 @@ from datetime import datetime from decimal import Decimal from random import uniform from time import sleep -from db import Ticker, Balance, Order +from db import Ticker, Balance, Order, Earning from tradeogre import TradeOgre @@ -114,6 +114,26 @@ class Trader(TradeOgre): logging.info(f'Order {order.uuid} no longer active on TradeOgre. Setting inactive.') sleep(3) + def calculate_earnings(self): + orders = {'buy': [], 'sell': []} + completed_orders = Order.select().where(Order.cancelled==False, Order.active==False) + for order in completed_orders: + if order.buy: + type = 'buy' + else: + type = 'sell' + orders[type].append(Decimal(order.price)) + + orders['total_sell'] = sum(orders['sell']) + orders['total_buy'] = sum(orders['buy']) + earnings = orders['total_sell'] - orders['total_buy'] + + e = Earning( + trade_pair=self.trade_pair, + quantity=earnings + ) + e.save() + def start_market_maker(self): logging.info('[MARKET MAKER] Starting market maker') latest = Ticker.select().where(Ticker.trade_pair==self.trade_pair).order_by(Ticker.date.desc()).get() @@ -159,6 +179,8 @@ class Trader(TradeOgre): ) o.save() logging.info(f'[MARKET MAKER] Stored sell order as ID {o.id}') + else: + logging.info(buy) else: logging.info(f'[MARKET MAKER] Not enough bid-ask spread ({latest.spread_sats} sats). Skipping market maker.') @@ -169,11 +191,13 @@ if __name__ == '__main__': parser.add_argument('--balances', action='store_true', help='Update coin balances of both base and currency') parser.add_argument('--update-orders', action='store_true', help='Update status of orders') parser.add_argument('--market-data', action='store_true', help='Update market data') + parser.add_argument('--calculate-earnings', action='store_true', help='Calculate earnings from all trades') parser.add_argument('--run', action='store_true', help='Run continuously') args = parser.parse_args() t = Trader() orders_counter = 0 + earnings_counter = 0 balances_counter = 0 market_maker_counter = 0 @@ -190,6 +214,9 @@ if __name__ == '__main__': if not args.run and args.market_data: t.store_market_data() + if not args.run and args.calculate_earnings: + t.calculate_earnings() + if args.run: while True: try: @@ -202,6 +229,7 @@ if __name__ == '__main__': if orders_counter == 4: try: t.update_orders() + t.calculate_earnings() logging.info('[ORDERS] Resetting orders counter') orders_counter = 0 except Exception as e: