Add trade ledger debugging exercise
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
commit
0cd0fdb641
6 files changed
+358
No files matched your search
@@ -0,0 +1,41 @@
|
||||
import sys
|
||||
|
||||
from ledger import Ledger, Trade
|
||||
from logger import BufferedLogger
|
||||
|
||||
BLOTTER = [
|
||||
Trade("T1", "AAPL", "BUY", 100, 190.00),
|
||||
Trade("T2", "AAPL", "BUY", 50, 196.00),
|
||||
Trade("T3", "MSFT", "BUY", 200, 410.00),
|
||||
Trade("T4", "AAPL", "SELL", 120, 199.50),
|
||||
Trade("T5", "MSFT", "SELL", 0, 412.00),
|
||||
Trade("T6", "AAPL", "SELL", 80, 201.00),
|
||||
Trade("T7", "IBM", "SELL", 30, 225.00),
|
||||
]
|
||||
|
||||
|
||||
def main():
|
||||
live_log = BufferedLogger("live", level="INFO", stream=sys.stdout)
|
||||
live = Ledger(live_log)
|
||||
for trade in BLOTTER:
|
||||
try:
|
||||
live.apply(trade)
|
||||
except ValueError:
|
||||
pass
|
||||
live_log.flush()
|
||||
|
||||
eod_log = BufferedLogger("eod", level="INFO", stream=sys.stdout)
|
||||
eod = Ledger.rebuild(live.history, eod_log)
|
||||
eod_log.flush()
|
||||
|
||||
print()
|
||||
for symbol in sorted(live.positions):
|
||||
p = live.positions[symbol]
|
||||
print(f"{symbol:<5} qty={p.qty:>5} avg={p.avg_price:>9.4f} realized={p.realized:>10.2f}")
|
||||
|
||||
breaks = live.reconcile(eod)
|
||||
print("reconcile:", "OK" if not breaks else breaks)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in new issue
Block a user