Optitrader is an open-source Python package designed for portfolio optimization, quantitative finance, and algorithmic trading. It empowers users with a wide array of tools to effortlessly construct personalized portfolios, thoroughly analyze optimization outcomes, and seamlessly execute trades using Alpaca's Trading API.
Accessible through an intuitive web-based Streamlit dashboard hosted at https://optitrader.streamlit.app, Optitrader enables users to interact with its rich features and harness the potential of portfolio optimization and algorithmic trade execution.
Python package: to add and install this package as a dependency of your project, run poetry add optitrader
.
Python CLI: to view this app's CLI commands once it's installed, run optitrader --help
.
Rest API: to serve this application as a REST API, run docker compose up app
and open localhost:8080 in your browser to see the documentation. Within the Dev Container, this is equivalent to running poe api
.
Streamlit Dashboard: to use this application from a Streamlit dashboard, run optitrader dashboard
. This is equivalent to running poe app
and open localhost:8000 in your browser.
Once the package has been installed you can use it as follows:
from optitrader import Optitrader
from optitrader.optimization.objectives import CVaRObjectiveFunction
from optitrader.enums import UniverseName
optimal_ptf = Optitrader(
objectives=[CVaRObjectiveFunction()],
universe_name=UniverseName.POPULAR_STOCKS,
).solve()
# Optimal Portfolio:
Portfolio(
weights={
'AAPL': 0.18168,
'BABA': 0.00369,
'BRK.B': 0.15119,
'META': 0.04067,
'MSFT': 0.01936,
'ORCL': 0.16028,
'PFE': 0.00207,
'TSLA': 0.01057,
'V': 0.02516,
'WMT': 0.40532
},
objective_values={
'Conditional Value at Risk': 0.007560866163075728
}
)
and you can use the available methods of the Portfolio class, such as pie_plot
:
optimal_ptf.pie_plot()
This project has been boostrapped using this cookiecutter template.
Prerequisites
1. Set up Git to use SSH
- Generate an SSH key and add the SSH key to your GitHub account.
- Configure SSH to automatically load your SSH keys:
cat << EOF >> ~/.ssh/config Host * AddKeysToAgent yes IgnoreUnknown UseKeychain UseKeychain yes EOF
2. Install Docker
- Install Docker Desktop.
- Enable Use Docker Compose V2 in Docker Desktop's preferences window.
- Linux only:
- Configure Docker to use the BuildKit build system. On macOS and Windows, BuildKit is enabled by default in Docker Desktop.
- Export your user's user id and group id so that files created in the Dev Container are owned by your user:
cat << EOF >> ~/.bashrc export UID=$(id --user) export GID=$(id --group) EOF
3. Install VS Code or PyCharm
- Install VS Code and VS Code's Dev Containers extension. Alternatively, install PyCharm.
- Optional: install a Nerd Font such as FiraCode Nerd Font and configure VS Code or configure PyCharm to use it.
Development environments
The following development environments are supported:
- ⭐️ GitHub Codespaces: click on Code and select Create codespace to start a Dev Container with GitHub Codespaces.
- ⭐️ Dev Container (with container volume): click on Open in Dev Containers to clone this repository in a container volume and create a Dev Container with VS Code.
- Dev Container: clone this repository, open it with VS Code, and run Ctrl/⌘ + ⇧ + P → Dev Containers: Reopen in Container.
- PyCharm: clone this repository, open it with PyCharm, and configure Docker Compose as a remote interpreter with the
dev
service. - Terminal: clone this repository, open it with your terminal, and run
docker compose up --detach dev
to start a Dev Container in the background, and then rundocker compose exec dev zsh
to open a shell prompt in the Dev Container.
Developing
- This project follows the Conventional Commits standard to automate Semantic Versioning and Keep A Changelog with Commitizen.
- Run
poe
from within the development environment to print a list of Poe the Poet tasks available to run on this project. - Run
poetry add {package}
from within the development environment to install a run time dependency and add it topyproject.toml
andpoetry.lock
. Add--group test
or--group dev
to install a CI or development dependency, respectively. - Run
poetry update
from within the development environment to upgrade all dependencies to the latest versions allowed bypyproject.toml
. - Run
cz bump
to bump the package's version, update theCHANGELOG.md
, and create a git tag.
optitrader is built by keeping in mind the availability of other great open-source repositories, such as: