Releases: AlanFokCo/EasyQuant
Releases · AlanFokCo/EasyQuant
v1.0.3
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.3v1.0.0
🚀 What's New
Web Strategy Studio
- Full-featured browser-based strategy editor & backtesting workbench
- Monaco code editor with Python syntax highlighting, autocompletion, and static
analysis - Real-time SSE log streaming + progress bar + Toast notifications
- Backtest history panel with metrics comparison (up to 5 runs)
- Embedded HTML report preview (equity curve, K-line chart, monthly returns, trade
log) - One-line startup (
npm run dev:all) / Docker Compose deployment / Nginx reverse
proxy
Bug Fixes
- Fixed zero-trade bug caused by data preloading timing in
engine.py - Fixed division-by-zero crashes when
starting_cash=0(report.py×4,
attribution.py) - Fixed Python 3.9 ForwardRef compatibility (
X | None→Optional[X]) - Fixed
REPORT_MISSINGcaused by relativeartifact_dirpath - Fixed
MissingGreenletincompare_runsviaselectinloadeager loading - Fixed deprecated pandas
reindex(method="nearest")→get_indexer - Fixed frontend 404 cleanup for stale strategy IDs + error display
Documentation
- Web Studio user manual with 5 annotated screenshots
- Environment setup & deployment guide (local dev / Docker / Nginx)
Full Changelog: https://github.com/AlanFokCo/EasyQuant/compare/v1.0.0