Overview
This release focuses on Web Strategy Studio enhancements, security hardening, bug
fixes, and documentation improvements.
Web Strategy Studio
New Features
- Auto-logout on authentication failure: Users are automatically logged out when
JWT token expires or becomes invalid (401 response), with seamless redirect to login
page - Preset users configuration: Add support for configuring preset users via
users.yamlfile (recommended) orEQ_PRESET_USERSenvironment variable - Smart polling for history panel: Backtest history list only polls when there are
active (running/queued) runs, reducing unnecessary API calls
UX Improvements
- Fixed sidebar navigation: Navigation buttons (history, compare, data) now
respond correctly to clicks - Removed registration page: Simplified login flow — users must be pre-configured
by server - Loading indicators: Added loading states for login button, stock search, and
backtest runs - Hover states: Enhanced button hover effects with visual feedback
- Translated labels: Key UI labels translated to Chinese (e.g., "初始资金",
"使用本地数据") - Accessibility: Added
aria-live="polite"for toast notifications, improved
keyboard navigation
Bug Fixes
- Race condition in run_queue.py: Fixed semaphore acquisition order to prevent
queue corruption - Stream hub buffer operations: Added async lock for concurrent buffer access
- Stock picker search cancellation: AbortController cancels previous requests when
new search starts - Unmount state handling: Added
mountedRefto prevent setState on unmounted
components - JWT leak in URLs: Fixed JWT token appearing in URLs when opening reports in new
tabs
Security
- Harden authentication: Improved JWT handling and token validation
- Environment variable leak: Filter sensitive variables (
EQ_JWT_SECRET,
EQ_ADMIN_PASSWORD) from subprocess environment - Static reports mount removed: Reports now served through authenticated API
endpoint only
eqlib Core
Bug Fixes
- NaN handling in financial calculations: Added
pd.isna()andnp.isfinite()
checks in Sharpe ratio, Sortino ratio, max drawdown, and beta calculations — returns
stable values for edge cases (empty data, zero volatility)
Documentation
- README (English & Chinese): Added Web Studio section, improved Quick Start
guidance (PyPI vs source install) - User Guide: Added Web Studio alternative for browser-based users
- Tutorials: Added Web Studio as learning path option
- FAQ: Added 6 new Web Studio questions (login, deployment, troubleshooting)
GitHub Pages
- New hero card: Added "Web 工作室" (Web Studio) card on homepage
- Card icons: Added emoji icons for each hero card (🚀, 📖, 🎓, 🌐, 🔧)
- Hover effects: Enhanced card hover with elevation animation and shadow
- Search shortcut hint: Shows "⌘K 快捷搜索" when search input focused
- Focus-visible states: Improved accessibility for keyboard navigation
- Back-to-top animation: Added fade-in-up animation
- Navigation indicator: Added blue accent bar for active navigation items
Installation
pip install easyquant-eqlib --upgrade
---
Upgrade Notes for Web Studio Users
1. Update preset users: Create web_strategy_studio/backend/users.yaml:
preset_users:
- username: your_username
password: your_password
2. JWT secret for production: Set stable JWT secret to prevent logout after restart:
export EQ_JWT_SECRET="your-secure-random-key"
3. Admin password: Change default admin password:
export EQ_ADMIN_PASSWORD="your-secure-password"
---
Full Changelog: https://github.com/AlanFokCo/EasyQuant/compare/v1.0.2...v1.0.3