From eb1feb5219bab8398b53f5d80df4f901366b0b59 Mon Sep 17 00:00:00 2001 From: uvok Date: Mon, 14 Apr 2025 10:42:59 +0200 Subject: Separate trade class --- bla.py | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/bla.py b/bla.py index d96f447..f9de595 100644 --- a/bla.py +++ b/bla.py @@ -2,6 +2,15 @@ import csv from collections import defaultdict, deque from datetime import datetime +class Trade: + def __init__(self, amount, total_cost, date): + self.amount = amount + self.total_cost = total_cost + self.date = date + + def __repr__(self): + return f"Trade(amount={self.amount}, total_cost={self.total_cost}, date={self.date})" + class FIFOQueue: """ Crypto trading FIFO queue. @@ -13,10 +22,10 @@ class FIFOQueue: def add(self, amount, total_cost, date): """ - Add trade to queue. + Add a trade to the queue. """ - - self.queue.append((amount, total_cost, date)) + trade = Trade(amount, total_cost, date) + self.queue.append(trade) def remove(self, amount): """ @@ -33,19 +42,18 @@ class FIFOQueue: if not self.queue: raise ValueError(f"Insufficient assets in queue to process sale of {amount}.") - quantity, total_cost, date = self.queue[0] - if quantity > remaining: - self.queue[0] = (quantity - remaining, total_cost, date) - entries.append((remaining, total_cost, date)) + trade = self.queue[0] + if trade.amount > remaining: + trade.amount -= remaining + entries.append(Trade(remaining, trade.total_cost, trade.date)) remaining = 0 else: - remaining -= quantity - entries.append((quantity, total_cost, date)) + remaining -= trade.amount + entries.append(trade) self.queue.popleft() return entries - def generate_report(sale_entries, proceeds, crypto_asset, date_sold): report = [] sell_date = datetime.strptime(date_sold, "%Y-%m-%d").strftime("%d.%m.%Y") -- cgit v1.2.3