diff --git a/src/streamlit_app.py b/src/streamlit_app.py index 059a9e5..5b5ddb6 100644 --- a/src/streamlit_app.py +++ b/src/streamlit_app.py @@ -985,18 +985,95 @@ def trading_plan_page(): if selected_plan_id: plan = get_trading_plan(selected_plan_id) if plan: - # Add similar form fields as in add_tab but with plan's current values - # This is a simplified version - you might want to add all fields - plan_name = st.text_input("Plan Name", value=plan.plan_name, key="edit_plan_name") - status = st.selectbox("Status", - [s.value for s in PlanStatus], - index=[s.value for s in PlanStatus].index(plan.status.value), - key="edit_status") + # Basic Info + col1, col2 = st.columns(2) + with col1: + plan_name = st.text_input("Plan Name", value=plan.plan_name, key="edit_plan_name") + status = st.selectbox("Status", [s.value for s in PlanStatus], index=[s.value for s in PlanStatus].index(plan.status.value), key="edit_status") + timeframe = st.selectbox("Timeframe", [t.value for t in Timeframe], index=[t.value for t in Timeframe].index(plan.timeframe.value), key="edit_timeframe") + market_focus = st.selectbox("Market Focus", [m.value for m in MarketFocus], index=[m.value for m in MarketFocus].index(plan.market_focus.value), key="edit_market_focus") + + with col2: + trade_frequency = st.selectbox("Trade Frequency", [f.value for f in TradeFrequency], index=[f.value for f in TradeFrequency].index(plan.trade_frequency.value), key="edit_trade_frequency") + plan_author = st.text_input("Author", value=plan.plan_author, key="edit_plan_author") + strategy_version = st.number_input("Version", min_value=1, value=plan.strategy_version, key="edit_strategy_version") + + # Risk Parameters + st.subheader("Risk Parameters") + col1, col2 = st.columns(2) + with col1: + stop_loss = st.number_input("Stop Loss %", min_value=0.1, value=plan.stop_loss, key="edit_stop_loss") + profit_target = st.number_input("Profit Target %", min_value=0.1, value=plan.profit_target, key="edit_profit_target") + risk_reward_ratio = profit_target / stop_loss if stop_loss > 0 else 0 + st.write(f"Risk:Reward Ratio: {risk_reward_ratio:.2f}") + + with col2: + position_sizing = st.number_input("Position Size %", min_value=0.1, value=plan.position_sizing, key="edit_position_sizing") + total_risk_per_trade = st.number_input("Risk per Trade %", min_value=0.1, value=plan.total_risk_per_trade, key="edit_total_risk_per_trade") + max_portfolio_risk = st.number_input("Max Portfolio Risk %", min_value=0.1, value=plan.max_portfolio_risk, key="edit_max_portfolio_risk") + + # Trade Rules + st.subheader("Trade Rules") + col1, col2 = st.columns(2) + with col1: + max_trades_per_day = st.number_input("Max Trades per Day", min_value=1, value=plan.max_trades_per_day, key="edit_max_trades_per_day") + max_trades_per_week = st.number_input("Max Trades per Week", min_value=1, value=plan.max_trades_per_week, key="edit_max_trades_per_week") + maximum_drawdown = st.number_input("Maximum Drawdown %", min_value=0.1, value=plan.maximum_drawdown, key="edit_maximum_drawdown") + + # Strategy Details + st.subheader("Strategy Details") + entry_criteria = st.text_area("Entry Criteria", value=plan.entry_criteria, key="edit_entry_criteria") + exit_criteria = st.text_area("Exit Criteria", value=plan.exit_criteria, key="edit_exit_criteria") + entry_confirmation = st.text_area("Entry Confirmation", value=plan.entry_confirmation, key="edit_entry_confirmation") + market_conditions = st.text_area("Market Conditions", value=plan.market_conditions, key="edit_market_conditions") + indicators_used = st.text_area("Technical Indicators", value=plan.indicators_used, key="edit_indicators_used") + + # Risk Management + st.subheader("Risk Management") + adjustments_for_drawdown = st.text_area("Drawdown Adjustments", value=plan.adjustments_for_drawdown, key="edit_adjustments_for_drawdown") + risk_controls = st.text_area("Risk Controls", value=plan.risk_controls, key="edit_risk_controls") + + # Optional Fields + st.subheader("Additional Information") + col1, col2 = st.columns(2) + with col1: + sector_focus = st.text_input("Sector Focus (optional)", value=plan.sector_focus, key="edit_sector_focus") + fundamental_criteria = st.text_area("Fundamental Criteria (optional)", value=plan.fundamental_criteria, key="edit_fundamental_criteria") + + with col2: + options_strategy_details = st.text_area("Options Strategy Details (optional)", value=plan.options_strategy_details, key="edit_options_strategy_details") + improvements_needed = st.text_area("Improvements Needed (optional)", value=plan.improvements_needed, key="edit_improvements_needed") if st.button("Update Plan", key="update_plan_button"): try: + # Update the plan with new values plan.plan_name = plan_name plan.status = PlanStatus(status) + plan.timeframe = Timeframe(timeframe) + plan.market_focus = MarketFocus(market_focus) + plan.trade_frequency = TradeFrequency(trade_frequency) + plan.plan_author = plan_author + plan.strategy_version = strategy_version + plan.stop_loss = stop_loss + plan.profit_target = profit_target + plan.position_sizing = position_sizing + plan.total_risk_per_trade = total_risk_per_trade + plan.max_portfolio_risk = max_portfolio_risk + plan.max_trades_per_day = max_trades_per_day + plan.max_trades_per_week = max_trades_per_week + plan.maximum_drawdown = maximum_drawdown + plan.entry_criteria = entry_criteria + plan.exit_criteria = exit_criteria + plan.entry_confirmation = entry_confirmation + plan.market_conditions = market_conditions + plan.indicators_used = indicators_used + plan.adjustments_for_drawdown = adjustments_for_drawdown + plan.risk_controls = risk_controls + plan.sector_focus = sector_focus + plan.fundamental_criteria = fundamental_criteria + plan.options_strategy_details = options_strategy_details + plan.improvements_needed = improvements_needed + update_trading_plan(plan) st.success("Plan updated successfully!") st.experimental_set_query_params(rerun=True)