From e89f6737099456a8c5558fff2e20860d8c191ccb Mon Sep 17 00:00:00 2001 From: "Bobby (aider)" Date: Mon, 10 Feb 2025 18:53:24 -0800 Subject: [PATCH] feat: Add delete trade functionality to journal menu --- src/trading/journal.py | 62 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/src/trading/journal.py b/src/trading/journal.py index 8110442..061e6fe 100644 --- a/src/trading/journal.py +++ b/src/trading/journal.py @@ -475,6 +475,28 @@ def get_current_prices(tickers: list) -> dict: print(f"Error getting price for {ticker}: {e}") return prices +def delete_trade(trade_id: int) -> bool: + """ + Delete a trade from the database + + Args: + trade_id (int): ID of trade to delete + + Returns: + bool: True if deletion was successful + """ + try: + with create_client() as client: + query = f""" + ALTER TABLE stock_db.trades + DELETE WHERE id = {trade_id} + """ + client.command(query) + return True + except Exception as e: + print(f"Error deleting trade: {e}") + return False + def get_trade_history(limit: int = 50): with create_client() as client: query = f""" @@ -499,7 +521,8 @@ def journal_menu(): print("2. Update Existing Trade") print("3. View Open Trades") print("4. View Trade History") - print("5. Return to Main Menu") + print("5. Delete Trade") + print("6. Return to Main Menu") choice = input("\nSelect an option (1-5): ") @@ -830,4 +853,41 @@ def journal_menu(): print("-" * 40) elif choice == "5": + # Show all trades (both open and closed) + print("\nAll Trades:") + with create_client() as client: + query = "SELECT * FROM stock_db.trades ORDER BY entry_date DESC" + result = client.query(query).result_rows + columns = ['id', 'position_id', 'ticker', 'entry_date', 'shares', 'entry_price', + 'target_price', 'stop_loss', 'strategy', 'order_type', 'followed_rules', + 'entry_reason', 'exit_price', 'exit_date', 'exit_reason', 'notes', 'created_at'] + trades = [dict(zip(columns, row)) for row in result] + + for trade in trades: + print(f"\nID: {trade['id']}") + print(f"Ticker: {trade['ticker']}") + print(f"Entry Date: {trade['entry_date']}") + print(f"Shares: {trade['shares']}") + print(f"Entry Price: ${trade['entry_price']}") + if trade['exit_price']: + print(f"Exit Price: ${trade['exit_price']}") + print(f"Exit Date: {trade['exit_date']}") + pl = (trade['exit_price'] - trade['entry_price']) * trade['shares'] + print(f"P/L: ${pl:.2f}") + print("-" * 40) + + trade_id = get_user_input("\nEnter trade ID to delete:", int) + if trade_id is None: + continue + + confirm = input(f"Are you sure you want to delete trade {trade_id}? (y/n): ").lower() + if confirm == 'y': + if delete_trade(trade_id): + print("Trade deleted successfully!") + else: + print("Failed to delete trade.") + else: + print("Delete cancelled.") + + elif choice == "6": break