Prop
DeFi? CeFi? TradFi?
prop is an open and opinionated trading platform using productive & familiar
open source libraries and tools for strategy research, execution and operation.
Install
- Install rust to build Rustler dependencies:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh-
Add
propto your list of dependencies inmix.exs
def deps do
[
{:prop, "~> 0.0.5"}
]
endCopy
.env.example->.envto configure your application when runningdocker-composeStart the applications with docker
make start
Usage
Starting the server with docker
$ make startWhich will start the services outlined in docker-compose.yml.
Visit prop.localhost.
When running the application with docker-compose you will need to enter the
basic auth development credentials:
username: admin
password: passwordSee the Makefile for more details on the individual commands run.
Download your data with History
Before you can request to download candles you will need to import the products for a supported venue.
Navigate to history.localhost/products
and click on Import then wait for History to finish adding products from
supported venues.
Go to history.localhost/data/candles/jobs
and input the products you would like to download data for.
Click on Download and wait for the data to finish by watching the status column.
NOTE: Only FTX based products will currently download. You can check availability of platforms on the history README
Visualize your data with Grafana
Navigate to
grafana.localhost/dashboards
and select Candles from the General folder.
Set the period to min_1 or whatever timeframe you downloaded the candles to see them plotted on a chart.
Explore your data with Livebook
Navigate to livebook.localhost and open a
notebook by clicking on New notebook at the top right.
You can pull in dependencies and explore the individual packages:
Mix.install([
{:history, "~> 0.0.23"}
])Or, more conveniently you can setup a runtime that uses the context of your current application. By using Runtime > Configure > Mix Standalone OR Attached Node.
Requirements
prop requires Elixir 1.13+, Erlang/OTP 22+ & Rust.
We recommend using asdf to manage the
language requirements.
- https://github.com/asdf-vm/asdf-erlang
- https://github.com/asdf-vm/asdf-elixir
- https://github.com/asdf-community/asdf-rust
Prop - http://prop.localhost
Workbench - http://workbench.localhost
From idea to execution, manage your trading operation across a distributed cluster
History - http://history.localhost
Download and warehouse historical trading data
Rube - http://rube.localhost
A multi-chain DeFi development toolkit
Slurpee - http://slurpee.locahost
A GUI frontend to manage blockchain ingestion with slurp
Explore Data with LiveBook - http://livebook.localhost
Grafana - http://grafana.localhost
Prometheus - http://prometheus.localhost
Tools
- workbench - Manage your trading operation across a distributed cluster
- history - Download and warehouse historical trading data
- tai - Composable, real time, market data and trade execution toolkit
- rube - A multi-chain DeFi development toolkit for Elixir
- slurpee - A GUI frontend to manage blockchain ingestion with slurp
- slurp - Blockchain ingestion toolkit
- livebook - Livebook is a web application for writing interactive and collaborative code notebooks built with Phoenix LiveView
- grafana - Dashboard Monitoring. Store & Visualize Your Metrics
- timescaledb - Relational database for time-series data. Supercharged PostgreSQL
- prometheus - An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting
Development
Initial setup:
-
Installs
hexandnpmdependencies - Generates migrations for history, workbench and tai
- Runs migrations
- Seeds database
$ make start_developmentSee the Makefile for more details.
Test
$ make testSee the Makefile for more details.
Ecto Database
Reset drops the db, creates a new db & runs the migrations
$ mix ecto.resetMigrate up
$ mix ecto.migrateMigrate down
# Last migration
$ mix ecto.rollback
# Last 3 migrations
$ mix ecto.rollback -n 3Debugging
could not compile dependency :ex_keccak
-
Ensure you have rust installed so Rustler can build its dependencies:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
nginx: [emerg] host not found in upstream grafana
-
Either run Grafana first with
docker-compose up grafanafollowed bydocker-compose upOR run your normaldocker-compose upfollowed bydocker-compose restart grafana.
(DBConnection.ConnectionError)
-
Usually related to the previous issue. Ensure your reverse proxy is running.
Use
docker network lsanddocker network inspect container_namefor a sanity check that your network is what you expect.
(Postgrex.Error) FATAL 3D000 (invalid_catalog_name) database "prop_dev" does not exist
-
Rerun your migrations using
mix ecto.resetandmix ecto.migrateand ensure they both pass successfully.
Authors
- Alex Kwiatkowski - alex+git@fremantle.io
License
prop is released under the MIT license