Awesome
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
prop
to your list of dependencies inmix.exs
def deps do
[
{:prop, "~> 0.0.5"}
]
end
-
Copy
.env.example
->.env
to configure your application when runningdocker-compose
-
Start the applications with docker
make start
Usage
Starting the server with docker
$ make start
Which 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: password
See 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
hex
andnpm
dependencies - Generates migrations for history, workbench and tai
- Runs migrations
- Seeds database
$ make start_development
See the Makefile for more details.
Test
$ make test
See the Makefile for more details.
Ecto Database
Reset drops the db, creates a new db & runs the migrations
$ mix ecto.reset
Migrate up
$ mix ecto.migrate
Migrate down
# Last migration
$ mix ecto.rollback
# Last 3 migrations
$ mix ecto.rollback -n 3
Debugging
**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 grafana
followed bydocker-compose up
OR run your normaldocker-compose up
followed bydocker-compose restart grafana
.
**(DBConnection.ConnectionError)**
- Usually related to the previous issue. Ensure your reverse proxy is running.
Use
docker network ls
anddocker network inspect container_name
for 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.reset
andmix ecto.migrate
and ensure they both pass successfully.
** (Mix) Could not start application master_proxy: MasterProxy.Application.start(:normal, []) returned an error: shutdown: failed to start child: {:ranch_listener_sup, HTTP}
** (EXIT) shutdown: failed to start child: :ranch_acceptors_sup
** (EXIT) {:listen_error, HTTP, :eacces}
- Ranch cannot run on protected ports without permission. Configure a different port e.g.
RANCH_HTTP_PORT=4000 iex mix phx.server
Authors
- Alex Kwiatkowski - alex+git@fremantle.io
License
prop
is released under the MIT license