# Prop
[![Build Status](](
[![ version](](

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

1. Install rust to build Rustler dependencies: 

curl --proto '=https' --tlsv1.2 -sSf | sh

2. Add `prop` to your list of dependencies in `mix.exs`

def deps do
    {:prop, "~> 0.0.5"}

3. Copy `.env.example` -> `.env` to configure your application when running 

4. 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](docker-compose.yml).

Visit [prop.localhost](http://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](./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](http://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](http://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

### Visualize your data with [Grafana](

Navigate to
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](http://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:

  {: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

## Requirements

`prop` requires Elixir 1.13+, Erlang/OTP 22+ & Rust.

We recommend using [`asdf`]( to manage the 
language requirements.

- [](
- [](
- [](

## Prop - [http://prop.localhost](http://prop.localhost)





## Workbench - [http://workbench.localhost](http://workbench.localhost)

From idea to execution, manage your trading operation across a distributed cluster


## History - [http://history.localhost](http://history.localhost)

Download and warehouse historical trading data


## Rube - [http://rube.localhost](http://rube.localhost)

A multi-chain DeFi development toolkit


## Slurpee - [http://slurpee.locahost](http://slurpee.localhost)

A GUI frontend to manage blockchain ingestion with slurp

[![recent heads and blocks](](

## Explore Data with LiveBook - [http://livebook.localhost](http://livebook.localhost)


## Grafana - [http://grafana.localhost](http://grafana.localhost)


## Prometheus - [http://prometheus.localhost](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` and `npm` dependencies
- Generates migrations for history, workbench and tai
- Runs migrations
- Seeds database

$ make start_development

See the [Makefile](./Makefile) for more details.

## Test

$ make test

See the [Makefile](./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 | sh`

**nginx: [emerg] host not found in upstream grafana**

- Either run Grafana first with `docker-compose up grafana` 
followed by `docker-compose up` OR run your normal
`docker-compose up` followed by `docker-compose restart grafana`.


- Usually related to the previous issue. Ensure your reverse proxy is running.
Use `docker network ls` and `docker 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` and `mix ecto.migrate` and ensure
they both pass successfully.

## Authors

- Alex Kwiatkowski -

## License

`prop` is released under the [MIT license](./