The sidebar contains the control panel for user interactions:
with st.sidebar: st.header("Control Panel") # Auto-refresh toggle auto_refresh = st.toggle("🔄 Auto Refresh (30min)", value=False) # Run analysis button if st.button("📈 Run New Analysis"): with st.spinner("Analyzing market data..."): st.session_state['analysis_result'] = bot.run_analysis() st.session_state['last_update'] = datetime.now()
Displays technical analysis and market data across timeframes:
with tab1: # Technical Analysis st.markdown("### 📊 Technical Analysis") st.markdown(format_signal(result['technical_features'])) # Market Data st.markdown("### 📈 Market Data by Timeframe") cols = st.columns(2) for idx, (tf, data) in enumerate(result['market_data'].items()): with cols[idx % 2]: display_market_data(data, tf)
Formats and displays market data in an expandable section:
def display_market_data(data_str, timeframe): """Display formatted market data in an expander""" with st.expander(f"📊 {timeframe} Market Data", expanded=False): lines = data_str.split('\n') for line in lines: if line.strip(): st.text(line)
Formats signal content that may be returned as string or object:
def format_signal(signal_content): """Format and display trading signal content""" if isinstance(signal_content, str): return signal_content return signal_content.content if hasattr(signal_content, 'content') else str(signal_content)
try: # Main application logic if 'analysis_result' in st.session_state: result = st.session_state['analysis_result'] # Display results... else: st.warning("⚠️ No analysis results yet. Click 'Run Analysis' to start.")except Exception as e: st.error(f"Error: {str(e)}")