feat: Add unique keys to Streamlit form elements to prevent duplicate IDs
This commit is contained in:
parent
5acfe4bfc4
commit
74e1d43936
@ -876,63 +876,63 @@ def trading_plan_page():
|
||||
# Basic Info
|
||||
col1, col2 = st.columns(2)
|
||||
with col1:
|
||||
plan_name = st.text_input("Plan Name")
|
||||
status = st.selectbox("Status", [s.value for s in PlanStatus])
|
||||
timeframe = st.selectbox("Timeframe", [t.value for t in Timeframe])
|
||||
market_focus = st.selectbox("Market Focus", [m.value for m in MarketFocus])
|
||||
plan_name = st.text_input("Plan Name", key="add_plan_name")
|
||||
status = st.selectbox("Status", [s.value for s in PlanStatus], key="add_status")
|
||||
timeframe = st.selectbox("Timeframe", [t.value for t in Timeframe], key="add_timeframe")
|
||||
market_focus = st.selectbox("Market Focus", [m.value for m in MarketFocus], key="add_market_focus")
|
||||
|
||||
with col2:
|
||||
trade_frequency = st.selectbox("Trade Frequency", [f.value for f in TradeFrequency])
|
||||
plan_author = st.text_input("Author")
|
||||
strategy_version = st.number_input("Version", min_value=1, value=1)
|
||||
trade_frequency = st.selectbox("Trade Frequency", [f.value for f in TradeFrequency], key="add_trade_frequency")
|
||||
plan_author = st.text_input("Author", key="add_plan_author")
|
||||
strategy_version = st.number_input("Version", min_value=1, value=1, key="add_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=7.0)
|
||||
profit_target = st.number_input("Profit Target %", min_value=0.1, value=21.0)
|
||||
stop_loss = st.number_input("Stop Loss %", min_value=0.1, value=7.0, key="add_stop_loss")
|
||||
profit_target = st.number_input("Profit Target %", min_value=0.1, value=21.0, key="add_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=5.0)
|
||||
total_risk_per_trade = st.number_input("Risk per Trade %", min_value=0.1, value=1.0)
|
||||
max_portfolio_risk = st.number_input("Max Portfolio Risk %", min_value=0.1, value=5.0)
|
||||
position_sizing = st.number_input("Position Size %", min_value=0.1, value=5.0, key="add_position_sizing")
|
||||
total_risk_per_trade = st.number_input("Risk per Trade %", min_value=0.1, value=1.0, key="add_total_risk_per_trade")
|
||||
max_portfolio_risk = st.number_input("Max Portfolio Risk %", min_value=0.1, value=5.0, key="add_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=3)
|
||||
max_trades_per_week = st.number_input("Max Trades per Week", min_value=1, value=15)
|
||||
maximum_drawdown = st.number_input("Maximum Drawdown %", min_value=0.1, value=20.0)
|
||||
max_trades_per_day = st.number_input("Max Trades per Day", min_value=1, value=3, key="add_max_trades_per_day")
|
||||
max_trades_per_week = st.number_input("Max Trades per Week", min_value=1, value=15, key="add_max_trades_per_week")
|
||||
maximum_drawdown = st.number_input("Maximum Drawdown %", min_value=0.1, value=20.0, key="add_maximum_drawdown")
|
||||
|
||||
# Strategy Details
|
||||
st.subheader("Strategy Details")
|
||||
entry_criteria = st.text_area("Entry Criteria")
|
||||
exit_criteria = st.text_area("Exit Criteria")
|
||||
entry_confirmation = st.text_area("Entry Confirmation")
|
||||
market_conditions = st.text_area("Market Conditions")
|
||||
indicators_used = st.text_area("Technical Indicators")
|
||||
entry_criteria = st.text_area("Entry Criteria", key="add_entry_criteria")
|
||||
exit_criteria = st.text_area("Exit Criteria", key="add_exit_criteria")
|
||||
entry_confirmation = st.text_area("Entry Confirmation", key="add_entry_confirmation")
|
||||
market_conditions = st.text_area("Market Conditions", key="add_market_conditions")
|
||||
indicators_used = st.text_area("Technical Indicators", key="add_indicators_used")
|
||||
|
||||
# Risk Management
|
||||
st.subheader("Risk Management")
|
||||
adjustments_for_drawdown = st.text_area("Drawdown Adjustments")
|
||||
risk_controls = st.text_area("Risk Controls")
|
||||
adjustments_for_drawdown = st.text_area("Drawdown Adjustments", key="add_adjustments_for_drawdown")
|
||||
risk_controls = st.text_area("Risk Controls", key="add_risk_controls")
|
||||
|
||||
# Optional Fields
|
||||
st.subheader("Additional Information")
|
||||
col1, col2 = st.columns(2)
|
||||
with col1:
|
||||
sector_focus = st.text_input("Sector Focus (optional)")
|
||||
fundamental_criteria = st.text_area("Fundamental Criteria (optional)")
|
||||
sector_focus = st.text_input("Sector Focus (optional)", key="add_sector_focus")
|
||||
fundamental_criteria = st.text_area("Fundamental Criteria (optional)", key="add_fundamental_criteria")
|
||||
|
||||
with col2:
|
||||
options_strategy_details = st.text_area("Options Strategy Details (optional)")
|
||||
improvements_needed = st.text_area("Improvements Needed (optional)")
|
||||
options_strategy_details = st.text_area("Options Strategy Details (optional)", key="add_options_strategy_details")
|
||||
improvements_needed = st.text_area("Improvements Needed (optional)", key="add_improvements_needed")
|
||||
|
||||
if st.button("Create Trading Plan"):
|
||||
if st.button("Create Trading Plan", key="create_plan_button"):
|
||||
try:
|
||||
plan = TradingPlan(
|
||||
plan_name=plan_name,
|
||||
@ -978,7 +978,8 @@ def trading_plan_page():
|
||||
selected_plan_id = st.selectbox(
|
||||
"Select Plan to Edit",
|
||||
options=[plan.id for plan in plans],
|
||||
format_func=lambda x: next(p.plan_name for p in plans if p.id == x)
|
||||
format_func=lambda x: next(p.plan_name for p in plans if p.id == x),
|
||||
key="edit_plan_select"
|
||||
)
|
||||
|
||||
if selected_plan_id:
|
||||
@ -986,12 +987,13 @@ def trading_plan_page():
|
||||
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)
|
||||
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))
|
||||
index=[s.value for s in PlanStatus].index(plan.status.value),
|
||||
key="edit_status")
|
||||
|
||||
if st.button("Update Plan"):
|
||||
if st.button("Update Plan", key="update_plan_button"):
|
||||
try:
|
||||
plan.plan_name = plan_name
|
||||
plan.status = PlanStatus(status)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user