Investment decisions are inherently multi-dimensional.
A portfolio with the highest expected return may also carry excessive risk, low liquidity, poor diversification, or high management fees.
Most beginner investment tools simplify portfolio comparison into a single metric, which often produces misleading conclusions.
The goal of PortfolioPilot is to model portfolio selection as a multi-criteria decision support problem, where multiple financial factors are weighted, normalized, and evaluated simultaneously.
In addition to ranking portfolios, the system also performs long-term growth simulations to visualize how investment strategies may evolve over time.
The project also demonstrates how functional programming concepts can be applied to reactive financial modeling and decision-support systems.
A reactive single-page portfolio analysis application built with F# and WebSharper.
- Manual financial asset management
- Portfolio creation with custom allocations
- Multi-criteria portfolio ranking
- Weighted decision scoring
- Long-term growth simulation
- JSON export functionality
- JSON import functionality
-
Weighted decision engine
- configurable importance values
- return vs risk balancing
- normalization-based scoring
-
Portfolio simulation
- monthly contribution support
- compound growth modeling
- long-term projection analysis
-
Dynamic visualization
- portfolio comparison bars
- growth charts
- ranking panels
- simulation summaries
-
Browser persistence
- save current data locally
- reload saved portfolios
- offline-compatible workflow
- LocalStorage-based persistence
Each portfolio is evaluated using multiple weighted criteria:
| Criterion | Type |
|---|---|
| Expected Return | Benefit |
| Risk | Cost |
| Annual Fee | Cost |
| Liquidity | Benefit |
| Diversification | Benefit |
The scoring engine normalizes all portfolio metrics before applying weighted calculations.
The final portfolio score is determined by:
- metric normalization
- criterion weighting
- weighted aggregation
This allows users to prioritize:
- aggressive growth
- low risk
- diversification
- liquidity
- fee minimization
The system simulates long-term investment growth using:
- initial capital
- monthly contributions
- expected annual return
- compound growth
This enables:
- portfolio comparison over time
- long-term strategy evaluation
- future value estimation
- Asset parameters
- Portfolio allocations
- Decision weights
- Initial capital
- Monthly contribution
- Investment duration
- Portfolio rankings
- Weighted scores
- Growth charts
- Final portfolio values
- Portfolio explanations
- JSON export file
- F#
- WebSharper UI
- ASP.NET Core
- Reactive UI (Var / View)
- Functional domain modeling
- Browser LocalStorage API
- Client-side JSON serialization
- Functional multi-criteria scoring engine
- .NET 10 SDK
- Node.js
- npm
git clone https://github.com/szrich83/PortfolioPilot.git
cd PortfolioPilotdotnet restore
npm installdotnet build -c Releasedotnet runThen open the URL shown in the terminal.
PortfolioPilot/
├── src/
│ ├── Client.fs # Main WebSharper SPA UI
│ ├── Domain.fs # Domain models
│ ├── Explanation.fs # Ranking explanations
│ ├── Normalization.fs # Criteria normalization logic
│ ├── PortfolioMetrics.fs # Portfolio metric calculations
│ ├── Samples.fs # Demo assets and portfolios
│ ├── Scoring.fs # Multi-criteria scoring engine
│ ├── Simulation.fs # Investment growth simulation
│ ├── Startup.fs # Application startup configuration
├── wwwroot/
│ ├── custom.css # Styling and dashboard UI
├── index.html # Entry point
├── PortfolioPilot.fsproj
├── Dockerfile
- CSV import/export
- Historical market data
- Monte Carlo simulation
- Portfolio optimization algorithms
- Backend database support
- User authentication
- Real-time financial APIs
Note: The live demo may take a few seconds to start if the Render instance is inactive.
https://portfoliopilot-yx7c.onrender.com/
Richárd Szőke
GNMH44
Software Engineering Student








