fix: Remove duplicate Trade Management section and add unique keys

This commit is contained in:
Bobby (aider) 2025-02-11 19:14:59 -08:00
parent d9692e9811
commit f3d932443e

View File

@ -1146,7 +1146,7 @@ def trading_plan_page():
except Exception as e: except Exception as e:
st.error(f"Error deleting plan: {str(e)}") st.error(f"Error deleting plan: {str(e)}")
# Add Trade Management section # Add Trade Management section
st.subheader("Trade Management") st.subheader("Trade Management")
# Get current trades for this plan # Get current trades for this plan
@ -1207,89 +1207,11 @@ def trading_plan_page():
f"{'[Closed]' if t['exit_price'] else '[Open]'} " f"{'[Closed]' if t['exit_price'] else '[Open]'} "
f"{'P/L: $' + format(t['profit_loss'], '.2f') if t['profit_loss'] is not None else ''}" f"{'P/L: $' + format(t['profit_loss'], '.2f') if t['profit_loss'] is not None else ''}"
for t in available_trades if t['id'] == x for t in available_trades if t['id'] == x
) ),
key=f"link_trades_{plan.id}"
) )
if selected_trades and st.button("Link Selected Trades"): if selected_trades and st.button("Link Selected Trades", key=f"link_trades_button_{plan.id}"):
if link_trades_to_plan(plan.id, selected_trades):
st.success("Trades linked successfully!")
# Calculate and update metrics
metrics = calculate_plan_metrics(plan.id)
plan.win_rate = metrics['win_rate']
plan.average_return_per_trade = metrics['average_return']
plan.profit_factor = metrics['profit_factor']
update_trading_plan(plan)
st.query_params.update(rerun=True)
else:
st.error("Error linking trades")
# Add Trade Management section
st.subheader("Trade Management")
# Get current trades for this plan
plan_trades = get_plan_trades(plan.id)
# Display current trades
if plan_trades:
st.write("Current Trades:")
for trade in plan_trades:
with st.expander(f"{trade['ticker']} - {trade['entry_date']}"):
col1, col2 = st.columns(2)
with col1:
st.write(f"Entry: ${trade['entry_price']:.2f}")
st.write(f"Shares: {trade['shares']}")
with col2:
if trade['exit_price']:
pl = (trade['exit_price'] - trade['entry_price']) * trade['shares']
st.write(f"Exit: ${trade['exit_price']:.2f}")
st.write(f"P/L: ${pl:.2f}")
# Get available trades
with create_client() as client:
query = """
SELECT
id,
ticker,
entry_date,
entry_price,
shares,
exit_price,
exit_date,
direction,
strategy,
CASE
WHEN exit_price IS NOT NULL
THEN (exit_price - entry_price) * shares
ELSE NULL
END as profit_loss
FROM stock_db.trades
WHERE plan_id IS NULL
ORDER BY entry_date DESC
"""
result = client.query(query)
available_trades = [dict(zip(
['id', 'ticker', 'entry_date', 'entry_price', 'shares',
'exit_price', 'exit_date', 'direction', 'strategy', 'profit_loss'],
row
)) for row in result.result_rows]
if available_trades:
st.write("Link Existing Trades:")
selected_trades = st.multiselect(
"Select trades to link to this plan",
options=[t['id'] for t in available_trades],
format_func=lambda x: next(
f"{t['ticker']} - {t['entry_date']} - ${t['entry_price']:.2f} "
f"({t['direction']}) - {t['strategy']} "
f"{'[Closed]' if t['exit_price'] else '[Open]'} "
f"{'P/L: $' + format(t['profit_loss'], '.2f') if t['profit_loss'] is not None else ''}"
for t in available_trades if t['id'] == x
)
)
if selected_trades and st.button("Link Selected Trades"):
if link_trades_to_plan(plan.id, selected_trades): if link_trades_to_plan(plan.id, selected_trades):
st.success("Trades linked successfully!") st.success("Trades linked successfully!")