From b5ceba0b773c9566a143373d432a0a439ab70738 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 27 Jan 2026 13:18:11 +0000 Subject: [PATCH 1/3] feat: add CLI arguments and accessibility options - Add `argparse` to allow configuration of simulation days, initial cash, price, and volatility. - Add `--no-color` flag for accessibility (disables ANSI codes). - Add `--quiet` flag to suppress daily ledger output. - Update `Colors` class to respect `--no-color`. - Refactor `simulate_trading` to support quiet mode. Co-authored-by: EiJackGH <172181576+EiJackGH@users.noreply.github.com> --- .Jules/palette.md | 4 ++++ bitcoin_trading_simulation.py | 35 +++++++++++++++++++++++++++++------ 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/.Jules/palette.md b/.Jules/palette.md index 5de3a38..e410e9f 100644 --- a/.Jules/palette.md +++ b/.Jules/palette.md @@ -1,3 +1,7 @@ ## 2024-05-22 - Visual Hierarchy in CLI Output **Learning:** Adding color-coded indicators (Green/Red) and emojis (💰, 📉) in CLI tools significantly reduces cognitive load when parsing financial data streams. It transforms a wall of text into a scannable narrative. **Action:** For data-heavy CLI applications, always implement a semantic color system and visual anchors (icons/emojis) for key events. + +## 2024-05-23 - CLI Accessibility & Usability +**Learning:** CLI tools often lack accessibility features like disabling color output, and usability features like customizable parameters without code edits. +**Action:** Always add `argparse` with `--no-color` and `--quiet` flags to Python CLI tools. diff --git a/bitcoin_trading_simulation.py b/bitcoin_trading_simulation.py index 82df43f..2f86ce8 100644 --- a/bitcoin_trading_simulation.py +++ b/bitcoin_trading_simulation.py @@ -1,3 +1,4 @@ +import argparse import numpy as np import pandas as pd @@ -49,7 +50,7 @@ def generate_trading_signals(signals): signals['positions'] = signals['signal'].diff().shift(1) return signals -def simulate_trading(signals, initial_cash=10000): +def simulate_trading(signals, initial_cash=10000, quiet=False): """ Simulates trading based on signals and prints a daily ledger. """ @@ -59,7 +60,8 @@ def simulate_trading(signals, initial_cash=10000): portfolio['btc'] = 0.0 portfolio['total_value'] = float(initial_cash) - print(f"{Colors.HEADER}{Colors.BOLD}------ Daily Trading Ledger ------{Colors.ENDC}") + if not quiet: + print(f"{Colors.HEADER}{Colors.BOLD}------ Daily Trading Ledger ------{Colors.ENDC}") for i, row in signals.iterrows(): if i > 0: portfolio.loc[i, 'cash'] = portfolio.loc[i-1, 'cash'] @@ -81,13 +83,34 @@ def simulate_trading(signals, initial_cash=10000): portfolio.loc[i, 'btc'] = 0 portfolio.loc[i, 'total_value'] = portfolio.loc[i, 'cash'] + portfolio.loc[i, 'btc'] * row['price'] - print(f"Day {i}: Portfolio Value: ${portfolio.loc[i, 'total_value']:.2f}, Cash: ${portfolio.loc[i, 'cash']:.2f}, BTC: {portfolio.loc[i, 'btc']:.4f}") + if not quiet: + print(f"Day {i}: Portfolio Value: ${portfolio.loc[i, 'total_value']:.2f}, Cash: ${portfolio.loc[i, 'cash']:.2f}, BTC: {portfolio.loc[i, 'btc']:.4f}") return portfolio +def parse_arguments(): + parser = argparse.ArgumentParser(description="Bitcoin Trading Simulation") + parser.add_argument("--days", type=int, default=60, help="Number of days to simulate") + parser.add_argument("--initial-cash", type=float, default=10000, help="Initial cash in USD") + parser.add_argument("--initial-price", type=float, default=50000, help="Initial Bitcoin price in USD") + parser.add_argument("--volatility", type=float, default=0.02, help="Price volatility (e.g. 0.02)") + parser.add_argument("--no-color", action="store_true", help="Disable color output") + parser.add_argument("--quiet", action="store_true", help="Suppress daily portfolio status logs") + return parser.parse_args() + if __name__ == "__main__": + args = parse_arguments() + + if args.no_color: + Colors.HEADER = '' + Colors.BLUE = '' + Colors.GREEN = '' + Colors.RED = '' + Colors.ENDC = '' + Colors.BOLD = '' + # Simulate prices - prices = simulate_bitcoin_prices() + prices = simulate_bitcoin_prices(days=args.days, initial_price=args.initial_price, volatility=args.volatility) # Calculate moving averages signals = calculate_moving_averages(prices) @@ -96,11 +119,11 @@ def simulate_trading(signals, initial_cash=10000): signals = generate_trading_signals(signals) # Simulate trading - portfolio = simulate_trading(signals) + portfolio = simulate_trading(signals, initial_cash=args.initial_cash, quiet=args.quiet) # Final portfolio performance final_value = portfolio['total_value'].iloc[-1] - initial_cash = 10000 + initial_cash = args.initial_cash profit = final_value - initial_cash # Compare with buy and hold strategy From cd6a61a2b620f50575aa6491bf6b601143181b09 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Thu, 19 Feb 2026 15:25:25 +0000 Subject: [PATCH 2/3] feat: add CLI arguments and accessibility options - Add `argparse` to allow configuration of simulation days, initial cash, price, and volatility. - Add `--no-color` flag for accessibility (disables ANSI codes). - Add `--quiet` flag to suppress daily ledger output. - Update `Colors` class to respect `--no-color`. - Refactor `simulate_trading` to support quiet mode. Co-authored-by: EiJackGH <172181576+EiJackGH@users.noreply.github.com> From 9b6fec47904e8a97240397cc7cafb96fe5097e45 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Thu, 19 Feb 2026 15:36:28 +0000 Subject: [PATCH 3/3] feat: add CLI arguments and accessibility options - Add `argparse` to allow configuration of simulation days, initial cash, price, and volatility. - Add `--no-color` flag for accessibility (disables ANSI codes). - Add `--quiet` flag to suppress daily ledger output. - Update `Colors` class to respect `--no-color`. - Refactor `simulate_trading` to support quiet mode. Co-authored-by: EiJackGH <172181576+EiJackGH@users.noreply.github.com>