Git Product home page Git Product logo

roboadvisorsystem's Introduction

Hi there! ๐Ÿ‘‹

My name is Edmund and I'm a software developer from Singapore.

๐Ÿ”ง Technologies & Tools


๐Ÿ“ˆ GitHub Stats

Edmund's GitHub Stats

Fund me!

https://ko-fi.com/edmundleow https://www.paypal.com/paypalme/edmundleow

roboadvisorsystem's People

Contributors

dependabot[bot] avatar eleow avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

roboadvisorsystem's Issues

Impossible to install

After trying a few days trying install this in a docker container, it has become apparent to me that all the dependencies are broken and this library cannot be installed anymore. Either the python version won't match or numpy won't compile (among a plethora of other problems). Don't loose your time.

how to add stocks/ETFs and getting new stock prices

Hi, I managed to start the frontend...just want to know how to update stock prices ?? (got a bit stuck running the backend jupyter notebook with "no bundle registered with the name 'robo-advisor'")...not sure if it is because Quantopian has closed door and zipline got tookover. Thanks

Error in rebalancing for both MPT and constant-rebalancing algorithms, if ticker does not exist/ is unlisted

In some cases, the ticker might not exist for certain periods, eg one of the tickers is not listed yet.
This will cause error in the algorithms because it tries to perform means-variance optimisation on an empty history vector. Similarly for constant-rebalancing, it will attempt to allocate shares to a stock that does not yet exist!
image

Stocks that do not exist on the "current" date, should be filtered away before performing means-variance optimisation and constant-rebalancing.

Weights for constant-rebalancing should also be automatically adjusted/normalised. For example, consider a portfolio of 4 assets, with the following weights- A: 0.25, B: 0.25, C: 0.25, D: 0.25. If C does not exist, then weights should be automatically redistributed to A:0.33, B:0.33, D:0.33

Make replicating exact environment for repo easy

Create enviroment.yml so that the environment can be easily created
Follow instructions in Conda

Then it would be easy to install the dependencies by creating the Conda environment roboadvisor from the given environment.yml file and activating it like so:

conda env create -f environment.yml
conda activate roboadvisor

[Performance] Cache stock prices when retrieving

For the front-end, instead of always retrieving the last closed stock prices for all the tickers, we should cache them for better performance. So that only the first request per day needs to be done!

Since there are many possibilities of stocks and start and end date, we need to also consider a unique identifier for our cache file, maybe using MD5

Basic user interface for robo advisor

Front-end for robo-advisor

  • Basic user management - Sign up and log in
  • Summary page showing current account balance, earnings, portfolio asset value etc
  • Add and withdraw funds (virtual funds, no actual interface with real money)
  • Quick method to reset account if necessary
  • Portfolio Management
    • View different portfolios
    • Buy and Sell selected portfolio
    • Calculate asset distribution in portfolio and number of shares to buy
    • Display current value of portfolio by retrieving latest prices
    • View details of a selected portfolio such as backtesting details, and comparison with relevant benchmarks
  • Recommend portfolio based on risk-assessment

Since this is a demo system with only paper trading, we will only consider the following:
reset of account - go to the http://localhost:8000/portfolio/reset/1
add/withdraw of cash - go to http://localhost:8000/portfolio/ and select Add/Withdraw Funds.
buy/sell portfolios - go to http://localhost:8000/portfolio/edit/, select the relevant portfolio to buy/sell.

Change Markowitz algorithm to support different optimization objectives

Current markowitz algorithm is taken from Quantopian. However, it will only optimize for maximal Sharpe ratio.

We should add the following optimisation objectives as well: Minimal volatility, maximum Sharpe for a given target risk, maximum Sharpe for a given target return, etc

This seems to be found in the library PyPortfolioOpt, so maybe we can just switch to call this library and adapt the existing code. Example usage for this library is also captured by mayabenowitz

Create a simple portfolio in zipline (independent of Quantopian and alpaca)

We will need to

  • create script to allow downloading of historical data from Yahoo or similar, and registering and ingesting of custom data bundle
  • run zipline algorithm for backtesting within Python code, instead of at command line. This will allow us to invoke backtesting in Django later on more easily (using https://github.com/alpacahq/roboadvisor as a starting point but remove dependency on alpaca dataset)
  • apply Modern Portfolio Theory to a given basket of assets
  • add visualisation of backtest similar to Quantopian's
  • compare its output (performance stats such as Sharpe ratio, cumulative returns, max drawdown) with that from Quantopian to verify that results are the same/similar.

Add Commission model for trading

For more realistic trades, commission model needs to be added.
Need to add commission models that are appropriate for the market that the 'universe' is based in

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.