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 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"}
]
end-
Copy
.env.example->.envto configure your application when runningdocker-compose -
Start the applications with docker
make start
$ 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: 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.
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
- 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
Initial setup:
- Installs
hexandnpmdependencies - Generates migrations for history, workbench and tai
- Runs migrations
- Seeds database
$ make start_developmentSee the Makefile for more details.
$ make testSee the Makefile for more details.
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 3**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.
** (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
- Alex Kwiatkowski - [email protected]
prop is released under the MIT license