diff options
-rw-r--r-- | bla.py | 34 |
1 files changed, 24 insertions, 10 deletions
@@ -3,33 +3,47 @@ from collections import defaultdict, deque from datetime import datetime class FIFOQueue: + """ + Crypto trading FIFO queue. + + Will track trades. + """ def __init__(self): self.queue = deque() - def add(self, amount, cost, date): - self.queue.append((amount, cost, date)) + def add(self, amount, total_cost, date): + """ + Add trade to queue. + """ + + self.queue.append((amount, total_cost, date)) def remove(self, amount): + """ + Remove a specified amount from the queue, returning the + trades used to buy. + """ if amount <= 0: raise ValueError("The amount to remove must be positive.") + remaining = amount cost_basis = 0 - date_acquired = None - entries = [] + while remaining > 0: if not self.queue: raise ValueError(f"Insufficient assets in queue to process sale of {amount}.") - quantity, cost, date = self.queue[0] + + quantity, total_cost, date = self.queue[0] if quantity > remaining: - cost_basis += remaining * cost - self.queue[0] = (quantity - remaining, cost, date) - entries.append((remaining, cost, date)) + cost_basis += remaining * (total_cost / quantity) + self.queue[0] = (quantity - remaining, total_cost, date) + entries.append((remaining, total_cost, date)) remaining = 0 else: - cost_basis += quantity * cost + cost_basis += quantity * (total_cost / quantity) remaining -= quantity - entries.append((quantity, cost, date)) + entries.append((quantity, total_cost, date)) self.queue.popleft() return cost_basis, entries |