From 8f810c3c6850c0c38c29b509565f9fc361fce815 Mon Sep 17 00:00:00 2001 From: uvok Date: Mon, 14 Apr 2025 10:31:21 +0200 Subject: Docu --- bla.py | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) (limited to 'bla.py') diff --git a/bla.py b/bla.py index b93feb0..ad50df5 100644 --- a/bla.py +++ b/bla.py @@ -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 -- cgit v1.2.3