A portfolio selection recommendation system based on Markowitz Mean-Variance Model and Black-Litterman Model implemented on the App Navigator
.
This is my first practical project during my internship as a data analyst at a leading fintech company in Beijing. And the project is already implemented on the Navigator
financial APP with thousands of users.
Documentation File (Chinese Version)
Here are the presentation slides for the whole project.
You may also take a glance at the sample portfolio report generated by the Roboadvisor.
Sample Portfolio Report - Risk Level 5 (most aggressive strategy, for risk-loving customers)
Sample Portfolio Report - Risk Level 3 (neutral strategy, for risk-neutral customers)
Sample Portfolio Report - Risk Level 1 (most convervative strategy, for risk-averse customers)
- Python 3: For model implementation
(PyPortfolioOpt)
, fund prediction(statsmodels)
, online data crawling(selenium)
, project integrating(rpy2)
and data processing(pandas)
.- R: For model implementation
(PortfolioAnalytics)
and online data crawling(rvest)
.- Javascript: For plotting related intuitive financial figures
(ECharts)
and online survey designing.- Html: For online survey designing.
Download the whole repository through this link.
Access the Final Version
directory and make sure that the three input files bloomberg.csv
、filter.csv
and newfund.csv
are present in the Final Version
directory.
All functions are included in the app.py
file.
Implementation and running are included in the Navigator
App for commercial purpose, so detailed running process will not be made public.
You may also refer to the sample report to get a quick glance at the output generated by RoboAdvisor.
Our team first crawled the historical data for 800 selected funds from iFund and Bloomberg terminal.
For more details, you may refer to my Web Crawler repository.
Then we designed a questionaire to investigate the customers' specific investment preferences (like risks and return rates requirements).
In the next step, we utilized pandas
to process the data using a fund filter together with a classifier. All kinds of statistical values of the data are also obtained in this step and get pipelined to the Model Construction part.
Then we designed the specific funding recommendation system to satisfy each customer's specific investment preferences based on Python and R.
Our project is mainly based on the Markowit mean-variance model and Black-Litterman model supported by PyPortfolioOpt
package.
We also use a Time Series Model - ARIMA to make better estimates of the expected return for the portfolio under the support of statsmodels
.
Finally, we plotted the related financial statistical charts and generate the Portfolio report by EChart
. Sample report is also included in this repo.