diff options
author | uvok | 2025-04-14 10:31:21 +0200 |
---|---|---|
committer | uvok | 2025-04-14 10:31:21 +0200 |
commit | 8f810c3c6850c0c38c29b509565f9fc361fce815 (patch) | |
tree | fc18616090ef084dc2518483cdff3dd1d6854d8c | |
parent | 76dd137a4b37d07ab698c53d474067b12f9217c1 (diff) |
Docu
-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 |