Particle Swarm Optimization with Stretching and Clustering for Asset Allocation
Abstract
1. Introduction
2. Theoretical Contributions to Particle Swarm Optimization: A Literature Review
3. Model
3.1. Quadratic Portfolio Optimization with Shrinkage Estimator
3.1.1. Markowitz’s (1952) Portfolio Optimization
3.1.2. Ledoit and Wolf’s (2003) Shrinkage Estimator
3.1.3. Enhanced Portfolio Optimization
3.2. PSO Dynamics with Stretching Function
3.2.1. Vanilla PSO
3.2.2. Function Stretching Technique for PSO
Conceptual Foundation
First-Stage Transformation: Elevation of Local Minima
Second-Stage Transformation: Neighborhood Stretching
Preservation of Global Structure
Implementation in Stretched PSO (SPSO)
3.2.3. Comparison with Traditional Quadratic Solvers
3.2.4. Pseudo-Code for PSO with Stretching
3.3. Hierarchical Clustering of Assets as an Input to Markowitz Portfolio Optimization
3.3.1. Hierarchical Clustering of Assets
- (1)
- (non-negativity);
- (2)
- (identity);
- (3)
- (ultrametric inequality).
3.3.2. Hierarchical Clustering Scheme (HCS)
- (1)
- Initialize clusters: ;
- (2)
- At each step k, merge clusters A and B with minimal ultrametric distance:
- (3)
- Update proximity matrix by removing rows/columns for A and B, adding new row/column for .
3.3.3. PSO with Stretching for Cluster-Aware Optimization
Cluster-Constrained Markowitz Problem
Cluster-Guided Stretching
3.3.4. Pseudo-Code for Hierarchical Cluster-Guided PSO with Stretching
3.3.5. Computational Advantages
3.4. K-Means Clustering of Assets as an Input to Markowitz Portfolio Optimization
3.4.1. K-Means
3.4.2. Distance Metrics
3.4.3. K-Means Clustering Scheme (KCS)
3.4.4. K-Means Constrained Markowitz Problem
3.4.5. PSO with Stretching for K-Means Cluster-Aware Optimization
3.4.6. K-Means Cluster-Guided Stretching
3.4.7. Portfolio Insights
3.4.8. Pseudo-Code for K-Means Cluster-Guided PSO with Stretching
3.5. DBSCAN Clustering of Assets as an Input to Markowitz Portfolio Optimization
3.5.1. Core Concepts
-Neighborhood
Core Point
Directly Density-Reachable
Density-Reachable
Density-Connected
DBSCAN Algorithm
Distance Metrics
3.5.2. DBSCAN Clustering Scheme (DCS)
3.5.3. DBSCAN Constrained Markowitz Problem
3.5.4. PSO with Stretching for DBSCAN Cluster-Aware Optimization
3.5.5. DBSCAN Cluster-Guided Stretching
3.5.6. Pseudo-Code for DBSCAN Cluster-Guided PSO with Stretching
4. Empirical Application
4.1. Data Preparation
4.2. DJ Euro Stoxx 50
4.3. S&P CNX Nifty 50
4.4. FTSE China A50
4.5. Euronext CAC 40
4.6. Euronext BEL 20
4.7. Nasdaq OMX Copenhagen 20
4.8. Sensitivity Analyses
4.8.1. Rebalancing
4.8.2. Out-of-Sample Forecasting
4.9. Turnover
5. Conclusions
Funding
Institutional Review Board Statement
Informed Consent Statement
Data Availability Statement
Acknowledgments
Conflicts of Interest
Abbreviations
| Returns matrix (n periods, m stocks) | |
| Number of particles | |
| Number of clusters | |
| Position of particle i at iteration t | |
| Velocity of particle i at iteration t | |
| Fitness of particle i | |
| Inertia weight at iteration t | |
| Cognitive/social coefficients | |
| Stretching params | |
| Shrinkage covariance | |
| Risk-free rate |
Appendix A. Particle Swarm Optimization with Stretching and Clustering for Asset Allocation
| Feature | PSO with Stretching | Traditional QP Solvers |
|---|---|---|
| Local Minima Handling | Escapes via function stretching | Stuck in local minima for non-convex problems |
| Constraints | Handles non-linear/box constraints | Limited to convex constraints |
| High-Dimensionality | Scalable for large portfolios () | Computationally expensive () |
| Robustness | Tolerant to noisy covariance matrices | Sensitive to poor matrix conditioning |
| Component | Benefit |
|---|---|
| Hierarchical Clustering | Reduces effective dimensionality from to , where |
| Ledoit–Wolf Shrinkage | Regularizes covariance estimation for stable clustering |
| PSO with Stretching | Escapes local minima in non-convex cluster-constrained space |
| Algorithm: SwarmSolver Optimization | |
|---|---|
| Input: Assets A, Returns matrix R, N particles, iterations | |
| Output: Optimal portfolio weights | |
| Function SafeCovShrink: | |
| ncol, nrow | |
| If is NULL then | |
| If then | |
| Return Standard covariance matrix Cov | |
| Try: | |
| Return Ledoit–Wolf shrinkage covariance | |
| Catch error: | |
| Return Standard covariance matrix Cov | |
| Initialize: | |
| Set seed | |
| , , | |
| for | |
| for | |
| , | |
| Function Fitness: | |
| Ledoit–Wolf shrinkage covariance | |
| Return | |
| Function StretchFunction: | |
| Return H | |
| Function UpdateParticle: | |
| Main Optimization Loop: | |
| Set seed | |
| NULL | |
| For to do: | |
| FALSE | |
| For to N do: | |
| Fitness | |
| If then: | |
| FALSE | |
| Else: | |
| TRUE | |
| End If | |
| End For | |
| If is TRUE then: | |
| For to N do: | |
| StretchFunction | |
| If then: | |
| End If | |
| End For | |
| End If | |
| For to N do: | |
| UpdateParticle | |
| End For | |
| End For | |
| Return | |
| Monthly Rebalancing Procedure: | |
| Input: Returns matrix R, holding period , rebalance range | |
| Optimize on to get | |
| Hold for months 1 to | |
| For to do: | |
| Train on expanding window | |
| Optimize to get | |
| Apply to month m returns | |
| Calculate metrics: , , | |
| End For | |
| Return weights history, performance metrics | |
| Out-of-Sample Forecasting Procedure: | |
| Input: Returns matrix R, training end , forecast range | |
| Train on to get | |
| Apply to test period | |
| Calculate in-sample metrics on | |
| Calculate out-of-sample metrics on | |
| Compute forecast accuracy: MAE, RMSE, MAPE, Theil’s U | |
| Compute portfolio metrics: Information Ratio, Sortino, Max Drawdown, Calmar, Win Rate | |
| Return comparison statistics, forecast accuracy, additional metrics | |
| Algorithm: Hierarchical Clustering and Portfolio Optimization |
|---|
| Input: Stock returns matrix , number of clusters K, |
| minimum stocks per cluster M, PSO parameters |
| Output: Optimal portfolio weights |
| Phase 1: Hierarchical Clustering |
| 1. Compute distance matrix using Euclidean distance |
| 2. Perform hierarchical clustering |
| 3. Cut dendrogram to form K clusters: |
| 4. Compute cluster sizes: for |
| 5. Identify small clusters: |
| 6. for each small cluster do |
| 7. Find closest cluster using hierarchical merge history |
| 8. Merge into : |
| 9. end for |
| 10. Reassign cluster labels to consecutive integers |
| 11. Aggregate cluster returns: for |
| Phase 2: Particle Swarm Optimization with Function Stretching |
| Set seed |
| 12. Initialize PSO parameters: |
| P particles, iterations, (stretching parameters) |
| 13. Initialize particle positions: for |
| 14. Initialize velocities: for |
| 15. Set global best: , |
| 16. for iteration to do |
| 17. stagnation_flag ← true |
| 18. for particle to P do |
| 19. Compute fitness: where |
| (Sharpe ratio) |
| 20. if then |
| 21. , |
| 22. stagnation_flag ← false |
| 23. end if |
| 24. end for |
| 25. if stagnation_flag = true then |
| 26. Apply adaptive parameter tuning: |
| 27. for particle to P do |
| 28. Compute stretched fitness: |
| 29. if then |
| 30. , |
| 31. end if |
| 32. end for |
| 33. end if |
| 34. for particle to P do |
| 35. Generate random vectors: |
| 36. Update velocity: |
| 37. Update position: |
| 38. Apply bounds: |
| 39. end for |
| 40. end for |
| 41. Normalize cluster weights: |
| Phase 3: Weight Distribution to Individual Stocks |
| 42. Initialize individual stock weights: for |
| 43. for cluster to do |
| 44. Compute equal weight per stock: |
| 45. for stock do |
| 46. |
| 47. end for |
| 48. end for |
| 49. Return |
| Parameter Functions: |
| where |
| (cognitive coefficient) |
| (social coefficient) |
| Additional Functions: |
| Fitness Function: |
| where is the mean return of cluster i, is the risk-free rate, |
| and is the shrinkage covariance matrix |
| Stretching Functions: |
| where is the local best position and is the local best fitness |
| Algorithm Complexity: |
| Hierarchical clustering: |
| PSO optimization: |
| Overall complexity: |
| Algorithm: K-Means Clustering with Enhanced Particle Swarm Optimization |
|---|
| Input: Stock returns matrix R, number of clusters k, number of particles n, maximum iterations T |
| Output: Optimal portfolio weights |
| Phase 1: K-means Clustering |
| 1. for to 10 do |
| 2. Perform K-means clustering on with j clusters |
| 3. Calculate silhouette score |
| 4. end for |
| 5. Select optimal number of clusters |
| 6. repeat |
| 7. Apply K-means clustering with centers |
| 8. Assign stocks to clusters: |
| 9. until all clusters have |
| 10. Aggregate returns by cluster: |
| Phase 2: Enhanced Particle Swarm Optimization |
| Set seed |
| 11. Initialize particles: for |
| 12. Initialize velocities: for |
| 13. Set stretching parameters: |
| 14. Initialize global best: |
| 15. for to T do |
| 16. |
| 17. for to n do |
| 18. Calculate fitness: |
| 19. if then |
| 20. , |
| 21. end if |
| 22. end for |
| 23. if then |
| 24. Adaptive parameter tuning: |
| 25. |
| 26. |
| 27. |
| 28. Apply stretching transformation: |
| 29. |
| 30. |
| 31. end if |
| 32. for to n do |
| 33. Update inertia: |
| 34. Update coefficients: , |
| 35. Generate random vectors: |
| 36. Update velocity: |
| 37. Update position: |
| 38. Apply bounds: |
| 39. end for |
| 40. end for |
| 41. Normalize weights: |
| Phase 3: Weight Distribution to Individual Stocks |
| 42. Initialize individual stock weights: where is total number of stocks |
| 43. for to k do |
| 44. Get stocks in cluster i: |
| 45. Get optimized cluster weight: |
| 46. Calculate weight per stock: |
| 47. for each stock do |
| 48. Assign weight: |
| 49. end for |
| 50. end for |
| 51. Create final portfolio: |
| 52. return |
| Fitness Function: |
| where is the expected return vector, is the shrinkage covariance matrix, and is the risk-free rate. |
| Algorithm: | DBSCAN-PSO Portfolio Optimization |
|---|---|
| 1 | Input: Returns matrix where n = time periods, m = stocks |
| 2 | Data Scaling: |
| 3 | Estimate parameter: |
| 4 | Compute k-nearest neighbor distances: |
| 5 | Sort distances: |
| 6 | Set initial |
| 7 | Adaptive DBSCAN: |
| 8 | Initialize: , target_clusters = 7, max_iter = 20 |
| 9 | |
| 10 | while found_clusters < target_clusters and : |
| 11 | |
| 12 | found_clusters (exclude noise) |
| 13 | if found_clusters : |
| 14 | , min_eps) |
| 15 | end if |
| 16 | |
| 17 | end while |
| 18 | Cluster Aggregation: |
| 19 | for each cluster i: |
| 20 | |
| 21 | end for |
| 22 | Output: Clustered returns matrix |
| Set seed | |
| 23 | PSO Initialization: |
| 24 | for to : |
| 25 | for to : |
| 26 | |
| 27 | |
| 28 | end for |
| 29 | end for |
| 30 | Parameters: , , |
| 31 | , |
| 32 | PSO Main Loop: |
| 33 | for to : |
| 34 | |
| 35 | for to : |
| 36 | Normalize weights: |
| 37 | Portfolio return: |
| 38 | Shrinkage covariance: |
| 39 | Portfolio risk: |
| 40 | Fitness (Sharpe ratio): |
| 41 | if : |
| 42 | , |
| 43 | |
| 44 | end if |
| 45 | end for |
| 46 | Adaptive Parameters: |
| 47 | |
| 48 | |
| 49 | |
| 50 | if : |
| 51 | |
| 52 | |
| 53 | |
| 54 | |
| 55 | Apply Stretching Function: |
| 56 | for to : |
| 57 | |
| 58 | |
| 59 | |
| 60 | if : |
| 61 | , |
| 62 | end if |
| 63 | end for |
| 64 | end if |
| 65 | Update Particles: |
| 66 | for to : |
| 67 | for to : |
| 68 | |
| 69 | |
| 70 | |
| 71 | |
| 72 | end for |
| 73 | end for |
| 74 | end for |
| 75 | Weight Distribution to Individual Stocks: |
| 76 | Optimal cluster weights: |
| 77 | Initialize: (length m) |
| 78 | |
| 79 | for each cluster : |
| 80 | |
| 81 | |
| 82 | if and : |
| 83 | |
| 84 | |
| 85 | for each stock : |
| 86 | |
| 87 | end for |
| 88 | end if |
| 89 | end for |
| 90 | Validation and Output: |
| 91 | Check: |
| 92 | Expected return: |
| 93 | Portfolio risk: |
| 94 | Return optimal portfolio weights |
| Stock | Cluster | Weight | Percentage | Rank |
|---|---|---|---|---|
| Adyen | 5 | 0.0673 | 6.7313 | 1 |
| Hermes | 5 | 0.0673 | 6.7313 | 2 |
| Ferrari | 5 | 0.0673 | 6.7313 | 3 |
| Scheider Electric | 5 | 0.0673 | 6.7313 | 4 |
| ASML Holding | 5 | 0.0673 | 6.7313 | 5 |
| Dassault Systemes | 5 | 0.0673 | 6.7313 | 6 |
| Enel | 7 | 0.0449 | 4.4875 | 7 |
| Deutsche Boerse | 7 | 0.0449 | 4.4875 | 8 |
| Danone | 7 | 0.0449 | 4.4875 | 9 |
| Air Liquide | 7 | 0.0449 | 4.4875 | 10 |
| Deutsche Telekom AG | 7 | 0.0449 | 4.4875 | 11 |
| SAP | 7 | 0.0449 | 4.4875 | 12 |
| Ahold Delhaize | 7 | 0.0449 | 4.4875 | 13 |
| SANOFI | 7 | 0.0449 | 4.4875 | 14 |
| IBERDROLA | 7 | 0.0449 | 4.4875 | 15 |
| Safran | 6 | 0.0178 | 1.7843 | 16 |
| AIRBUS | 6 | 0.0178 | 1.7843 | 17 |
| BBVA | 6 | 0.0178 | 1.7843 | 18 |
| SANTANDER | 6 | 0.0178 | 1.7843 | 19 |
| BASF | 4 | 0.0060 | 0.6034 | 20 |
| Bayer | 4 | 0.0060 | 0.6034 | 21 |
| Allianz | 4 | 0.0060 | 0.6034 | 22 |
| Eni | 4 | 0.0060 | 0.6034 | 23 |
| Anheuser Busch | 4 | 0.0060 | 0.6034 | 24 |
| EssilorLuxottica | 4 | 0.0060 | 0.6034 | 25 |
| AXA | 4 | 0.0060 | 0.6034 | 26 |
| Munich Re Group | 4 | 0.0060 | 0.6034 | 27 |
| TOTAL ENERGIES | 4 | 0.0060 | 0.6034 | 28 |
| VINCI | 4 | 0.0060 | 0.6034 | 29 |
| INDITEX | 4 | 0.0060 | 0.6034 | 30 |
| MICHELIN | 4 | 0.0060 | 0.6034 | 31 |
| ING | 3 | 0.0054 | 0.5385 | 32 |
| Intensa | 3 | 0.0054 | 0.5385 | 33 |
| BNP Paribas | 3 | 0.0054 | 0.5385 | 34 |
| Volkwagen | 1 | 0.0023 | 0.2308 | 35 |
| Stellantis | 1 | 0.0023 | 0.2308 | 36 |
| Siemens | 1 | 0.0023 | 0.2308 | 37 |
| Mercedes | 1 | 0.0023 | 0.2308 | 38 |
| BMW ST | 1 | 0.0023 | 0.2308 | 39 |
| Infineon | 1 | 0.0023 | 0.2308 | 40 |
| Flutter Entertainment | 1 | 0.0023 | 0.2308 | 41 |
| Philips | 2 | 0.0018 | 0.1795 | 42 |
| Deutshce Post | 2 | 0.0018 | 0.1795 | 43 |
| Adidas | 2 | 0.0018 | 0.1795 | 44 |
| Prosus | 2 | 0.0018 | 0.1795 | 45 |
| Pernod Ricard | 2 | 0.0018 | 0.1795 | 46 |
| L’Oréal | 2 | 0.0018 | 0.1795 | 47 |
| Louis Vuitton | 2 | 0.0018 | 0.1795 | 48 |
| Kering | 2 | 0.0018 | 0.1795 | 49 |
| KONE | 2 | 0.0018 | 0.1795 | 50 |
| Stock | Cluster | Weight | Percentage | Rank |
|---|---|---|---|---|
| Cipla Ltd. | 4 | 0.0717 | 7.1731 | 1 |
| Dr. Reddy’s Laboratories Ltd. | 4 | 0.0717 | 7.1731 | 2 |
| HCL Technologies Ltd. | 4 | 0.0717 | 7.1731 | 3 |
| Bharat Petroleum Corporation Ltd. | 4 | 0.0717 | 7.1731 | 4 |
| Britannia Industries Ltd. | 4 | 0.0717 | 7.1731 | 5 |
| Hindalco Industries Ltd. | 4 | 0.0717 | 7.1731 | 6 |
| Tata Motors Ltd. | 4 | 0.0717 | 7.1731 | 7 |
| Wipro Ltd. | 4 | 0.0717 | 7.1731 | 8 |
| Axis Bank Ltd. | 3 | 0.0141 | 1.4083 | 9 |
| Bajaj Auto Ltd. | 3 | 0.0141 | 1.4083 | 10 |
| Bharat Petroleum Corporation Ltd. | 3 | 0.0141 | 1.4083 | 11 |
| Britannia Industries Ltd. | 3 | 0.0141 | 1.4083 | 12 |
| Bajaj Auto Ltd. | 3 | 0.0141 | 1.4083 | 13 |
| Coal India Ltd. | 3 | 0.0141 | 1.4083 | 14 |
| Eicher Motors Ltd. | 3 | 0.0141 | 1.4083 | 15 |
| Grasim Industries Ltd. | 3 | 0.0141 | 1.4083 | 16 |
| HDFC Bank Ltd. | 3 | 0.0141 | 1.4083 | 17 |
| Hero MotoCorp Ltd. | 3 | 0.0141 | 1.4083 | 18 |
| ICICI Bank Ltd. | 3 | 0.0141 | 1.4083 | 19 |
| ITC Ltd. | 3 | 0.0141 | 1.4083 | 20 |
| Kotak Mahindra Bank Ltd. | 3 | 0.0141 | 1.4083 | 21 |
| Larsen & Toubro Ltd. | 3 | 0.0141 | 1.4083 | 22 |
| Mahindra & Mahindra Ltd. | 3 | 0.0141 | 1.4083 | 23 |
| Maruti Suzuki India Ltd. | 3 | 0.0141 | 1.4083 | 24 |
| Coal India Ltd. | 3 | 0.0141 | 1.4083 | 25 |
| Eicher Motors Ltd. | 3 | 0.0141 | 1.4083 | 26 |
| Grasim Industries Ltd. | 3 | 0.0141 | 1.4083 | 27 |
| HDFC Bank Ltd. | 3 | 0.0141 | 1.4083 | 28 |
| Hero MotoCorp Ltd. | 3 | 0.0141 | 1.4083 | 29 |
| Tata Motors Ltd. | 3 | 0.0141 | 1.4083 | 30 |
| Titan Company Ltd. | 3 | 0.0141 | 1.4083 | 31 |
| Trent Ltd. | 3 | 0.0141 | 1.4083 | 32 |
| UltraTech Cement Ltd. | 3 | 0.0141 | 1.4083 | 33 |
| SBI Life Insurance Co., Ltd. | 3 | 0.0141 | 1.4083 | 34 |
| HDFC Life Insurance Co., Ltd. | 3 | 0.0141 | 1.4083 | 35 |
| Aspinwall and Company Ltd. | 2 | 0.0038 | 0.3826 | 36 |
| Bharti Airtel Ltd. | 2 | 0.0038 | 0.3826 | 37 |
| Hindustan Unilever Ltd. | 2 | 0.0038 | 0.3826 | 38 |
| IndusInd Bank Ltd. | 2 | 0.0038 | 0.3826 | 39 |
| Infosys Ltd. | 2 | 0.0038 | 0.3826 | 40 |
| Nestle India Ltd. | 2 | 0.0038 | 0.3826 | 41 |
| Adani Enterprises Ltd. | 1 | 0.0026 | 0.2550 | 42 |
| APL Apollo Tubes Ltd. | 1 | 0.0026 | 0.2550 | 43 |
| Bajaj Finance Ltd. | 1 | 0.0026 | 0.2550 | 44 |
| Bajaj Finserv Ltd. | 1 | 0.0026 | 0.2550 | 45 |
| Hindalco Industries Ltd. | 1 | 0.0026 | 0.2550 | 46 |
| IndusInd Bank Ltd. | 1 | 0.0026 | 0.2550 | 47 |
| Infosys Ltd. | 1 | 0.0026 | 0.2550 | 48 |
| JSW Steel Ltd. | 1 | 0.0026 | 0.2550 | 49 |
| Tata Steel Ltd. | 1 | 0.0026 | 0.2550 | 50 |
| Stock | Cluster | Weight | Percentage | Rank |
|---|---|---|---|---|
| Jiangsu Hengrui | 4 | 0.0958 | 9.9206 | 1 |
| Kweichow Moutai | 4 | 0.0958 | 9.9206 | 2 |
| Inner Mongolia Yili | 4 | 0.0958 | 9.9206 | 3 |
| Yanghe Brewery A | 4 | 0.0958 | 9.9206 | 4 |
| Foshan Haitian Food | 4 | 0.0958 | 9.9206 | 5 |
| Hik Vision Digital A | 4 | 0.0958 | 9.9206 | 6 |
| S.F. Holding Co. | 4 | 0.0958 | 9.9206 | 7 |
| Wuliangye A | 4 | 0.0958 | 9.9206 | 8 |
| Shenzhen Mindray Bio-Medical | 4 | 0.0958 | 9.9206 | 9 |
| Shanghai International Port | 3 | 0.0115 | 1.1905 | 10 |
| 360 Security Technology | 3 | 0.0115 | 1.1905 | 11 |
| Foxconn Industrial Internet | 3 | 0.0115 | 1.1905 | 12 |
| China Shenhua Energy SH | 1 | 0.0029 | 0.2976 | 13 |
| Bank of China A | 1 | 0.0029 | 0.2976 | 14 |
| China Petrol A | 1 | 0.0029 | 0.2976 | 15 |
| China Minsheng Banking | 1 | 0.0029 | 0.2976 | 16 |
| China Construction Bank Co. | 1 | 0.0029 | 0.2976 | 17 |
| China Yangtze Power | 1 | 0.0029 | 0.2976 | 18 |
| Bank of Beijing | 1 | 0.0029 | 0.2976 | 19 |
| China Citic Bank A | 1 | 0.0029 | 0.2976 | 20 |
| Agricultural Bank China A | 1 | 0.0029 | 0.2976 | 21 |
| PetroChina A | 1 | 0.0029 | 0.2976 | 22 |
| Bank of Communications Co., Ltd. | 1 | 0.0029 | 0.2976 | 23 |
| ICBC | 1 | 0.0029 | 0.2976 | 24 |
| Pudong Development Bank | 2 | 0.0017 | 0.1786 | 25 |
| CITIC Securities | 2 | 0.0017 | 0.1786 | 26 |
| China Merchants Bank | 2 | 0.0017 | 0.1786 | 27 |
| China United Network Comm | 2 | 0.0017 | 0.1786 | 28 |
| Poly Real Estate Group | 2 | 0.0017 | 0.1786 | 29 |
| SAIC Motor Corp | 2 | 0.0017 | 0.1786 | 30 |
| Anhui Conch Cement | 2 | 0.0017 | 0.1786 | 31 |
| Industrial Bank | 2 | 0.0017 | 0.1786 | 32 |
| New China Life Insurance | 2 | 0.0017 | 0.1786 | 33 |
| Ping An Insurance | 2 | 0.0017 | 0.1786 | 34 |
| China Pacific Insurance | 2 | 0.0017 | 0.1786 | 35 |
| China Life Insurance A | 2 | 0.0017 | 0.1786 | 36 |
| China Everbright Bank | 2 | 0.0017 | 0.1786 | 37 |
| China Vanke A | 2 | 0.0017 | 0.1786 | 38 |
| Gree Electric A | 2 | 0.0017 | 0.1786 | 39 |
| Midea Group A | 2 | 0.0017 | 0.1786 | 40 |
| Ping An Bank A | 2 | 0.0017 | 0.1786 | 41 |
| Guotai Junan Securities | 2 | 0.0017 | 0.1786 | 42 |
| China Merchants Shekou | 2 | 0.0017 | 0.1786 | 43 |
| Guangdong Wens Foodstuff | 2 | 0.0017 | 0.1786 | 44 |
| China Railway Construction | 5 | 0.0000 | 0.0000 | 45 |
| China Railway A | 5 | 0.0000 | 0.0000 | 46 |
| China State Construction | 5 | 0.0000 | 0.0000 | 47 |
| China Communications Construction | 5 | 0.0000 | 0.0000 | 48 |
| CRRC A | 5 | 0.0000 | 0.0000 | 49 |
| Baoshan Iron & Steel | 5 | 0.0000 | 0.0000 | 50 |
| Stock | Weight | Percentage | Rank |
|---|---|---|---|
| TotalEnergies SE | 0.0504 | 5.0403 | 1 |
| Air Liquide | 0.0504 | 5.0403 | 2 |
| Stellantis NV | 0.0504 | 5.0403 | 3 |
| ArcelorMittal | 0.0504 | 5.0403 | 4 |
| Vinci SA | 0.0504 | 5.0403 | 5 |
| AXA | 0.0504 | 5.0403 | 6 |
| BNP Paribas | 0.0504 | 5.0403 | 7 |
| Airbus SE | 0.0504 | 5.0403 | 8 |
| Legrand | 0.0504 | 5.0403 | 9 |
| Crédit Agricole | 0.0504 | 5.0403 | 10 |
| EssilorLuxottica | 0.0504 | 5.0403 | 11 |
| Schneider Electric | 0.0504 | 5.0403 | 12 |
| Publicis Groupe | 0.0504 | 5.0403 | 13 |
| Société Générale | 0.0504 | 5.0403 | 14 |
| Safran | 0.0504 | 5.0403 | 15 |
| Saint-Gobain SA | 0.0504 | 5.0403 | 16 |
| Sanofi | 0.0504 | 5.0403 | 17 |
| Renault | 0.0504 | 5.0403 | 18 |
| Unibail-Rodamco-Westfield | 0.0504 | 5.0403 | 19 |
| LVMH | 0.0020 | 0.2016 | 20 |
| Bouygues | 0.0020 | 0.2016 | 21 |
| Accor | 0.0020 | 0.2016 | 22 |
| Dassault Systèmes | 0.0020 | 0.2016 | 23 |
| Eurofins Scientific | 0.0020 | 0.2016 | 24 |
| Engie | 0.0020 | 0.2016 | 25 |
| Capgemini | 0.0020 | 0.2016 | 26 |
| Carrefour | 0.0020 | 0.2016 | 27 |
| Hermès International | 0.0020 | 0.2016 | 28 |
| Danone | 0.0020 | 0.2016 | 29 |
| Michelin | 0.0020 | 0.2016 | 30 |
| Teleperformance | 0.0020 | 0.2016 | 31 |
| Edenred | 0.0020 | 0.2016 | 32 |
| Pernod Ricard | 0.0020 | 0.2016 | 33 |
| Veolia | 0.0020 | 0.2016 | 34 |
| STMicroelectronics | 0.0020 | 0.2016 | 35 |
| Pernod Ricard | 0.0020 | 0.2016 | 36 |
| Orange | 0.0020 | 0.2016 | 37 |
| Vivendi | 0.0020 | 0.2016 | 38 |
| Alstom | 0.0020 | 0.2016 | 39 |
| Thales | 0.0020 | 0.2016 | 40 |
| Stock | Cluster | Weight | Percentage | Rank |
|---|---|---|---|---|
| arGEN-X SE | 4 | 0.2683 | 26.8319 | 1 |
| Umicore | 1 | 0.0448 | 4.4833 | 2 |
| Solvay | 1 | 0.0448 | 4.4833 | 3 |
| Proximus | 1 | 0.0448 | 4.4833 | 4 |
| Melexis NV | 1 | 0.0448 | 4.4833 | 5 |
| KBC Group | 1 | 0.0448 | 4.4833 | 6 |
| Aperam | 1 | 0.0448 | 4.4833 | 7 |
| Anheuser-Busch InBev | 1 | 0.0448 | 4.4833 | 8 |
| Ageas | 1 | 0.0448 | 4.4833 | 9 |
| WDP | 2 | 0.0359 | 3.5867 | 10 |
| UCB | 2 | 0.0359 | 3.5867 | 11 |
| Sofina | 2 | 0.0359 | 3.5867 | 12 |
| D’Ieteren Group SA | 2 | 0.0359 | 3.5867 | 13 |
| GBL | 2 | 0.0359 | 3.5867 | 14 |
| Elia System Operator | 2 | 0.0359 | 3.5867 | 15 |
| Cofinimmo | 2 | 0.0359 | 3.5867 | 16 |
| Aedifica NV | 2 | 0.0359 | 3.5867 | 17 |
| Ackermans & van Haaren | 2 | 0.0359 | 3.5867 | 18 |
| Koninklijke Ahold Delhaize N.V. | 2 | 0.0359 | 3.5867 | 19 |
| Galapagos NV | 3 | 0.0143 | 1.4347 | 20 |
| Stock | Weight | Percentage | Rank |
|---|---|---|---|
| NKT A/S | 0.1786 | 17.8571 | 1 |
| Vestas Wind Systems A/S | 0.1786 | 17.8571 | 2 |
| Jyske Bank A/S | 0.1786 | 17.8571 | 3 |
| Pandora A/S | 0.1786 | 17.8571 | 4 |
| Rockwool A/S | 0.1786 | 17.8571 | 5 |
| Danske Bank A/S | 0.0071 | 0.7143 | 6 |
| Carlsberg Group A/S (class B) | 0.0071 | 0.7143 | 7 |
| DSV A/S | 0.0071 | 0.7143 | 8 |
| Novo Nordisk A/S (class B) | 0.0071 | 0.7143 | 9 |
| A.P. Moller-Maersk A/S (class B) | 0.0071 | 0.7143 | 10 |
| Novonesis B (formerly Novozymes) | 0.0071 | 0.7143 | 11 |
| A.P. Moller-Maersk A/S (class A) | 0.0071 | 0.7143 | 12 |
| Genmab A/S | 0.0071 | 0.7143 | 13 |
| GN Store Nord A/S | 0.0071 | 0.7143 | 14 |
| Demant A/S | 0.0071 | 0.7143 | 15 |
| Tryg A/S | 0.0071 | 0.7143 | 16 |
| Coloplast A/S (class B) | 0.0071 | 0.7143 | 17 |
| Zealand Pharma A/S | 0.0071 | 0.7143 | 18 |
| ISS A/S | 0.0071 | 0.7143 | 19 |
| Orsted A/S | 0.0071 | 0.7143 | 20 |
| 1 | i.e., assuming 3 basis points per transaction side. |
References
- Abubaker, A., Baharum, A., & Alrefaei, M. (2015). Automatic clustering using multi-objective particle swarm and simulated annealing. PLoS ONE, 10(7), e0130995. [Google Scholar] [CrossRef]
- Aguiar Nascimento, R., Neto, Á. B., Bezerra, Y. S. d. F., do Nascimento, H. A. D., Lucena, L. d. S., & de Freitas, J. E. (2022). A new hybrid optimization approach using pso, nelder-mead simplex and kmeans clustering algorithms for 1d full waveform inversion. PLoS ONE, 17(12), e0277900. [Google Scholar] [CrossRef] [PubMed]
- Ananthi, M., Valarmathi, K., Ramathilagam, A., & Praveen, R. (2025). Hybrid lion and exponential pso-based metaheuristic clustering approach for efficient dynamic data stream management. Nature Scientific Reports, 15(1), 22343. [Google Scholar] [CrossRef]
- Bulani, V., Bezbradica, M., & Crane, M. (2025). Improving portfolio management using clustering and particle swarm optimisation. Mathematics, 13(10), 1623. [Google Scholar] [CrossRef]
- Chen, R.-R., Huang, W. K., & Yeh, S.-K. (2021). Particle swarm optimization approach to portfolio construction. Intelligent Systems in Accounting, Finance and Management, 28(3), 182–194. [Google Scholar] [CrossRef]
- Eberhart, R., & Kennedy, J. (1995, November 27–December 1). Particle swarm optimization. IEEE International Conference on Neural Networks (pp. 1942–1948), Perth, Australia. [Google Scholar]
- Erwin, K., & Engelbrecht, A. (2023). Meta-heuristics for portfolio optimization. Soft Computing, 27(24), 19045–19073. [Google Scholar] [CrossRef]
- Ester, M., Kriegel, H. P., Sander, J., & Xu, X. (1996, August 2). A density-based algorithm for discovering clusters in large spatial databases with noise. 2nd International Conference on Knowledge Discovery and Data Mining (pp. 226–231), Portland, OR, USA. [Google Scholar]
- Freitas, D., Lopes, L. G., & Morgado-Dias, F. (2020). Particle swarm optimisation: A historical review up to the current developments. Entropy, 22(3), 362. [Google Scholar] [CrossRef] [PubMed]
- Hartigan, J. A., & Wong, M. A. (1979). Algorithm as 136: A k-means clustering algorithm. Journal of the Royal Statistical Society. Series C (Applied Statistics), 28(1), 100–108. [Google Scholar] [CrossRef]
- Hayashida, T., Sekizaki, S., Shimoyoshi, K., & Nishizaki, I. (2025). ELPSO-C: A clustering-based strategy for dimension-wise diversity control in enhanced leader particle swarm optimization. AppliedMath, 5(4), 159. [Google Scholar] [CrossRef]
- Huang, K. Y. (2011). A hybrid particle swarm optimization approach for clustering and classification of datasets. Knowledge-Based Systems, 24(3), 420–426. [Google Scholar] [CrossRef]
- Jiang, Z., Zhu, D., Li, X.-Y., & Han, L.-B. (2025). A hybrid adaptive particle swarm optimization algorithm for enhanced performance. Applied Sciences, 15(11), 6030. [Google Scholar] [CrossRef]
- Johnson, S. C. (1967). Hierarchical clustering schemes. Psychometrika, 32(3), 241–254. [Google Scholar] [CrossRef]
- Khan, K., Rehman, S. U., Aziz, K., Fong, S., & Sarasvady, S. (2014, February 17–19). Dbscan: Past, present and future. Fifth International Conference on the Applications of Digital Information and Web Technologies (ICADIWT 2014) (pp. 232–238), Chennai, India. [Google Scholar]
- Ledoit, O., & Wolf, M. (2003). Improved estimation of the covariance matrix of stock returns with an application to portfolio selection. Journal of Empirical Finance, 10(5), 603–621. [Google Scholar] [CrossRef]
- Li, G., Wang, W., Zhang, W., Wang, Z., Tu, H., & You, W. (2021). Grid search based multi-population particle swarm optimization algorithm for multimodal multi-objective optimization. Swarm and Evolutionary Computation, 62, 100843. [Google Scholar] [CrossRef]
- Likas, A., Vlassis, N., & Verbeek, J. J. (2003). The global k-means clustering algorithm. Pattern Recognition, 36(2), 451–461. [Google Scholar] [CrossRef]
- Lin, K., Cai, T., Wang, H., Li, W., & Wei, C. (2025). Integrated learning particle swarm optimization algorithm based on clustering. International Journal of Cognitive Informatics & Natural Intelligence, 19(1), 1–24. [Google Scholar]
- Lolic, M. (2024). Practical improvements to mean-variance optimization for multi-asset class portfolios. Journal of Risk and Financial Management, 17(5), 183. [Google Scholar] [CrossRef]
- Markowitz, H. M. (1952). Portfolio selection. Journal of Finance, 7(1), 71–91. [Google Scholar]
- Muteba Mwamba, J. W., Mbucici, L. M., & Mba, J. C. (2025). Multi-objective portfolio optimization: An application of the non-dominated sorting genetic algorithm iii. International Journal of Financial Studies, 13(1), 15. [Google Scholar] [CrossRef]
- Niknam, T., & Amiri, B. (2010). An efficient hybrid approach based on pso, aco and k-means for cluster analysis. Applied Soft Computing, 10(1), 183–197. [Google Scholar] [CrossRef]
- Niu, Y., Yan, X., Zeng, W., Wang, Y., & Niu, Y. (2025). Multi-objective sand cat swarm optimization based on adaptive clustering for solving multimodal multi-objective optimization problems. Mathematics and Computers in Simulation, 227, 391–404. [Google Scholar] [CrossRef]
- Ntare, H. B., Muteba Mwamba, J. W., & Adekambi, F. (2025). Dynamic portfolio optimization with diversification analysis and asset selection amidst high correlation using cryptocurrencies and bank equities. Risks, 13(6), 113. [Google Scholar] [CrossRef]
- Parsopoulos, K. E., Plagianakos, V. P., Magoulas, G. D., & Vrahatis, M. N. (2001a). Improving the particle swarm optimizer by function “stretching”. In Advances in convex analysis and global optimization: Honoring the memory of C. caratheodory (1873–1950) (pp. 445–457). Springer. [Google Scholar]
- Parsopoulos, K. E., Plagianakos, V. P., Magoulas, G. D., & Vrahatis, M. N. (2001b). Objective function “stretching” to alleviate convergence to local minima. Nonlinear Analysis-Theory Methods and Applications, 47(5), 3419–3424. [Google Scholar] [CrossRef]
- Parsopoulos, K. E., & Vrahatis, M. N. (2002). Recent approaches to global optimization problems through particle swarm optimization. Natural Computing, 1(2), 235–306. [Google Scholar] [CrossRef]
- Parsopoulos, K. E., & Vrahatis, M. N. (2004). On the computation of all global minimizers through particle swarm optimization. IEEE Transactions on Evolutionary Computation, 8(3), 211–224. [Google Scholar] [CrossRef]
- Passaro, A., & Starita, A. (2008). Particle swarm optimization for multimodal functions: A clustering approach. Journal of Artificial Evolution and Applications, 2008(1), 482032. [Google Scholar] [CrossRef]
- Sengupta, S., Basak, S., & Peters, R. A. (2018). Particle swarm optimization: A survey of historical and recent developments with hybridization perspectives. Machine Learning and Knowledge Extraction, 1(1), 157–191. [Google Scholar] [CrossRef]
- Verma, H., Verma, D., & Tiwari, P. K. (2021). A population based hybrid fcm-pso algorithm for clustering analysis and segmentation of brain image. Expert Systems with Applications, 167, 114121. [Google Scholar] [CrossRef]
- Yao, J., Luo, X., Li, F., Li, J., Dou, J., & Luo, H. (2024). Research on hybrid strategy particle swarm optimization algorithm and its applications. Nature Scientific Reports, 14(1), 24928. [Google Scholar] [CrossRef]
- Yuan, Y., Yang, P., Jiang, H., & Shi, T. (2024). A multi-robot task allocation method based on the synergy of the K-Means++ algorithm and the particle swarm algorithm. Biomimetics, 9(11), 694. [Google Scholar]
- Zhan, Z.-H., Zhang, J., Li, Y., & Chung, H. S.-H. (2009). Adaptive particle swarm optimization. IEEE Transactions on Systems, Man, and Cybernetics, Part B (Cybernetics), 39(6), 1362–1381. [Google Scholar] [CrossRef] [PubMed]
- Zhang, R.-L., & Liu, X.-H. (2023). A novel hybrid high-dimensional pso clustering algorithm based on the cloud model and entropy. Applied Sciences, 13(3), 1246. [Google Scholar] [CrossRef]







| Method | SWARM | Hierarchical Clustering | K-Means | DBSCAN |
|---|---|---|---|---|
| Portfolio_Return_Mean | 0.0856 | 0.0462 | 0.1008 | −0.9650 |
| Portfolio_Risk_SD | 0.1633 | 0.1756 | 0.1814 | 4.2108 |
| Sharpe_Ratio | 0.7865 | 0.5067 | 0.7913 | −0.2190 |
| Omega_Ratio | 1.4288 | 1.2013 | 1.4763 | 0.4813 |
| Beta | 0.0520 | 0.0700 | 0.8401 | 0.6179 |
| Treynor_Ratio | 3.3079 | 2.3039 | 0.2096 | −1.1263 |
| Sortino_Ratio | 12.2961 | 11.2375 | 11.0633 | −0.6650 |
| Jensen_Alpha | 0.0497 | 0.0466 | 0.0107 | −0.2304 |
| Portfolio_Drawdown | 0.2432 | 0.2955 | 0.2721 | 2.3465 |
| Calmar_Ratio | 0.2940 | 0.1032 | 0.3057 | −0.1213 |
| VaR_95 | −0.2573 | −0.2748 | −0.2810 | −3.4641 |
| ES_95 | −0.3375 | −0.3414 | −0.3544 | −3.4641 |
| Skewness | −0.3351 | −0.0118 | −0.2368 | −1.0034 |
| Kurtosis | 0.0939 | −0.2214 | −0.2666 | 4.7361 |
| Method | SWARM | Hierarchical Clustering | K-Means | DBSCAN |
|---|---|---|---|---|
| Portfolio_Return_Mean | 0.22292 | 0.19703 | 0.17701 | 4.91076 |
| Portfolio_Risk_SD | 0.20661 | 0.18218 | 0.22700 | 4.15811 |
| Sharpe_Ratio | 1.06571 | 1.06653 | 0.76777 | 1.18035 |
| Omega_Ratio | 2.12657 | 2.16457 | 1.83345 | 1.63854 |
| Beta | −0.03970 | −0.06827 | 1.07518 | 0.52324 |
| Treynor_Ratio | −1.23745 | −0.62771 | 0.03527 | 1.03848 |
| Sortino_Ratio | 1.14218 | 1.29239 | 0.75353 | 0.77486 |
| Jensen_Alpha | 0.01418 | 0.01237 | 0.00146 | 0.15224 |
| Portfolio_Drawdown | 0.29790 | 0.24009 | 0.37850 | 1.22714 |
| Calmar_Ratio | 0.65965 | 0.74068 | 0.38237 | −0.02367 |
| VaR_95 | −0.34271 | −0.25785 | −0.40076 | −3.46410 |
| ES_95 | −0.59912 | −0.42925 | −0.90116 | −3.46410 |
| Skewness | −1.57752 | −0.41923 | −2.21309 | 0.27688 |
| Kurtosis | 4.34262 | 2.16304 | 9.45818 | 6.58319 |
| Method | SWARM | Hierarchical Clustering | K-Means | DBSCAN |
|---|---|---|---|---|
| Portfolio_Return_Mean | 0.0372 | 0.1380 | 0.1556 | 2.5397 |
| Portfolio_Risk_SD | 0.2192 | 0.4111 | 0.3226 | 6.1724 |
| Sharpe_Ratio | 0.0631 | 0.2789 | 0.4100 | 0.4077 |
| Omega_Ratio | 1.1418 | 1.3168 | 1.4002 | 1.2243 |
| Beta | 0.2081 | 0.1498 | 1.0405 | 3.5352 |
| Treynor_Ratio | −0.3386 | −0.2903 | −0.0375 | 0.0859 |
| Sortino_Ratio | −1.2144 | −0.4245 | −0.5082 | 0.2526 |
| Jensen_Alpha | −0.0203 | −0.0126 | 0.0127 | 0.1692 |
| Portfolio_Drawdown | 0.2627 | 0.6591 | 0.2992 | 4.3862 |
| Calmar_Ratio | 0.1417 | 0.2095 | 0.5202 | 0.5790 |
| VaR_95 | −0.3702 | −0.7638 | −0.5360 | −3.4641 |
| ES_95 | −0.5768 | −1.1845 | −0.7963 | −3.4641 |
| Skewness | −0.5380 | −1.5406 | −0.7060 | −0.1624 |
| Kurtosis | 2.0075 | 3.5843 | 1.4290 | 4.5261 |
| Method | SWARM | Hierarchical Clustering | K-Means | DBSCAN |
|---|---|---|---|---|
| Portfolio_Return_Mean | 0.1651 | 0.1462 | 0.1023 | 0.1245 |
| Portfolio_Risk_SD | 0.2145 | 0.2393 | 0.2692 | 0.1738 |
| Sharpe_Ratio | 0.4690 | 0.3415 | 0.1407 | 0.3454 |
| Omega_Ratio | 1.7104 | 1.5652 | 1.3357 | 1.6255 |
| Beta | 1.2077 | 1.2719 | 1.3657 | 0.8837 |
| Treynor_Ratio | −0.1481 | −0.1444 | −0.1428 | −0.2141 |
| Sortino_Ratio | −2.3645 | −2.3082 | −2.2374 | −2.6110 |
| Jensen_Alpha | 0.0136 | 0.0157 | 0.0175 | −0.0069 |
| Portfolio_Drawdown | 0.2594 | 0.2379 | 0.3056 | 0.2138 |
| Calmar_Ratio | 0.5406 | 0.4890 | 0.2150 | 0.5068 |
| VaR_95 | −0.2490 | −0.2487 | −0.3091 | −0.2350 |
| ES_95 | −0.2999 | −0.2931 | −0.3292 | −0.2853 |
| Skewness | 0.7377 | 1.1457 | 0.9884 | 0.2996 |
| Kurtosis | 2.1604 | 3.8584 | 3.9625 | −0.2905 |
| Method | SWARM | Hierarchical Clustering | K-Means | DBSCAN |
|---|---|---|---|---|
| Portfolio_Return_Mean | 0.0716 | 0.0612 | 0.1260 | −0.3851 |
| Portfolio_Risk_SD | 0.1310 | 0.1393 | 0.1798 | 4.7951 |
| Sharpe_Ratio | 0.9577 | 0.8264 | 1.0004 | −0.0691 |
| Omega_Ratio | 1.5105 | 1.4036 | 1.6683 | 0.9158 |
| Beta | 0.7123 | 0.7682 | 0.8459 | 12.3068 |
| Treynor_Ratio | 0.2901 | 0.2653 | 0.2613 | 0.0040 |
| Sortino_Ratio | 40.4204 | 63.1906 | 19.0561 | 0.0532 |
| Jensen_Alpha | 0.0164 | 0.0122 | 0.0125 | −0.7323 |
| Portfolio_Drawdown | 0.1785 | 0.1749 | 0.2178 | 2.3557 |
| Calmar_Ratio | 0.4010 | 0.3500 | 0.5783 | −0.1635 |
| VaR_95 | −0.1817 | −0.1712 | −0.2421 | −3.4641 |
| ES_95 | −0.2379 | −0.2095 | −0.3140 | −3.4641 |
| Skewness | 0.2464 | 0.8357 | 0.2675 | 0.6006 |
| Kurtosis | 0.9417 | 1.3805 | 0.7121 | 3.4294 |
| Method | SWARM | Hierarchical Clustering | K-Means | DBSCAN |
|---|---|---|---|---|
| Portfolio_Return_Mean | 0.2799 | 0.2818 | 0.1832 | −0.8877 |
| Portfolio_Risk_SD | 0.2381 | 0.3742 | 0.3717 | 7.6405 |
| Sharpe_Ratio | 0.9581 | 0.6149 | 0.3537 | −0.1230 |
| Omega_Ratio | 2.2149 | 1.6806 | 1.4089 | 0.7266 |
| Beta | 1.0602 | 1.0692 | 0.9260 | −0.1473 |
| Treynor_Ratio | −0.1012 | −0.1000 | −0.1408 | 5.1346 |
| Sortino_Ratio | −1.5967 | −1.1550 | −1.2764 | −0.3838 |
| Jensen_Alpha | 0.0033 | 0.0037 | −0.0077 | −0.2231 |
| Portfolio_Drawdown | 0.3457 | 0.5710 | 0.6506 | 1.1049 |
| Calmar_Ratio | 0.8096 | 0.4936 | 0.2817 | −0.8034 |
| VaR_95 | −0.3200 | −0.5247 | −0.6194 | −3.4641 |
| ES_95 | −0.4208 | −0.7274 | −0.8176 | −3.4641 |
| Skewness | −0.0608 | 0.0447 | −0.6593 | −3.6775 |
| Kurtosis | −0.0364 | 1.0118 | 0.3968 | 21.8661 |
| BEL 20 | ||
| Monthly Period | Mean_Return | Mean_Sharpe |
| Buy-and-hold (1–60) | 0.0050 | 0.9047 |
| Holding (1–24) | 0.0135 | 1.1242 |
| Rebalancing (25–60) | −0.0006 | 0.7584 |
| OMXC20 | ||
| Monthly Period | Mean_Return | Mean_Sharpe |
| Buy-and-hold (1–60) | 0.0099 | −0.4644 |
| Holding (1–24) | 0.0272 | −0.1826 |
| Rebalancing (25–60) | −0.0016 | −0.6522 |
| BEL 20 | ||||
| Monthly Period | Mean_Return | Volatility | Sharpe_Ratio | Cumulative_Return |
| In-Sample (1–60) | 0.0110 | 0.0444 | 0.9824 | 0.6613 |
| Out-of-Sample (61–72) | 0.0067 | 0.0344 | 1.1439 | 0.0804 |
| OMXC20 | ||||
| Period | Mean_Return | Volatility | Sharpe_Ratio | Cumulative_Return |
| In-Sample (1–60) | 0.0110 | 0.0757 | −0.4004 | 0.6606 |
| Out-of-Sample (61–72) | 0.0112 | 0.0530 | −0.5693 | 0.1338 |
| BEL 20 | |
| Metric | Value |
| MAE | 0.0288 |
| RMSE | 0.0332 |
| MAPE (%) | 150.0268 |
| Theil’s U | 0.7444 |
| Sortino Ratio (OOS) | 1.9935 |
| Max Drawdown (OOS) | 0.0951 |
| Win Rate (OOS) | 0.5000 |
| OMXC20 | |
| Metric | Value |
| MAE | 0.0426 |
| RMSE | 0.0507 |
| MAPE (%) | 251.6711 |
| Theil’s U | 0.8059 |
| Sortino Ratio (OOS) | −1.0380 |
| Max Drawdown (OOS) | 0.0746 |
| Win Rate (OOS) | 0.5000 |
Disclaimer/Publisher’s Note: The statements, opinions and data contained in all publications are solely those of the individual author(s) and contributor(s) and not of MDPI and/or the editor(s). MDPI and/or the editor(s) disclaim responsibility for any injury to people or property resulting from any ideas, methods, instructions or products referred to in the content. |
© 2026 by the author. Licensee MDPI, Basel, Switzerland. This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution (CC BY) license.
Share and Cite
Chevallier, J. Particle Swarm Optimization with Stretching and Clustering for Asset Allocation. Int. J. Financial Stud. 2026, 14, 38. https://doi.org/10.3390/ijfs14020038
Chevallier J. Particle Swarm Optimization with Stretching and Clustering for Asset Allocation. International Journal of Financial Studies. 2026; 14(2):38. https://doi.org/10.3390/ijfs14020038
Chicago/Turabian StyleChevallier, Julien. 2026. "Particle Swarm Optimization with Stretching and Clustering for Asset Allocation" International Journal of Financial Studies 14, no. 2: 38. https://doi.org/10.3390/ijfs14020038
APA StyleChevallier, J. (2026). Particle Swarm Optimization with Stretching and Clustering for Asset Allocation. International Journal of Financial Studies, 14(2), 38. https://doi.org/10.3390/ijfs14020038
