{"id":15286509,"url":"https://github.com/fremantle-industries/prop","last_synced_at":"2025-04-13T02:32:14.286Z","repository":{"id":37958616,"uuid":"330440305","full_name":"fremantle-industries/prop","owner":"fremantle-industries","description":"An open and opinionated trading platform using productive \u0026 familiar open source libraries and tools for strategy research, execution and operation.","archived":false,"fork":false,"pushed_at":"2023-03-06T17:00:03.000Z","size":8835,"stargazers_count":44,"open_issues_count":25,"forks_count":6,"subscribers_count":7,"default_branch":"main","last_synced_at":"2024-04-27T02:01:18.614Z","etag":null,"topics":["algo-trading","data-science","defi","elixir","grafana","trading-platform"],"latest_commit_sha":null,"homepage":"","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fremantle-industries.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2021-01-17T16:54:21.000Z","updated_at":"2024-03-02T07:30:05.000Z","dependencies_parsed_at":"2023-02-17T07:45:27.749Z","dependency_job_id":"0b521762-47d8-42fb-81dd-6621a143ee0f","html_url":"https://github.com/fremantle-industries/prop","commit_stats":{"total_commits":254,"total_committers":3,"mean_commits":84.66666666666667,"dds":0.1889763779527559,"last_synced_commit":"f87afc9ccda35c16aa77e1855ac237aef55b8f18"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fremantle-industries%2Fprop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fremantle-industries%2Fprop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fremantle-industries%2Fprop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fremantle-industries%2Fprop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fremantle-industries","download_url":"https://codeload.github.com/fremantle-industries/prop/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248657793,"owners_count":21140842,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["algo-trading","data-science","defi","elixir","grafana","trading-platform"],"created_at":"2024-09-30T15:15:14.299Z","updated_at":"2025-04-13T02:32:13.323Z","avatar_url":"https://github.com/fremantle-industries.png","language":"Elixir","funding_links":[],"categories":["Elixir/Erlang"],"sub_categories":["Data Visualization"],"readme":"# Prop\n[![Build Status](https://github.com/fremantle-industries/prop/workflows/test/badge.svg?branch=main)](https://github.com/fremantle-industries/prop/actions?query=workflow%3Atest)\n[![hex.pm version](https://img.shields.io/hexpm/v/prop.svg?style=flat)](https://hex.pm/packages/prop)\n\nDeFi? CeFi? TradFi?\n\n`prop` is an open and opinionated trading platform using productive \u0026 familiar\nopen source libraries and tools for strategy research, execution and operation.\n\n## Install\n\n1. Install rust to build Rustler dependencies: \n\n```bash\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n```\n\n2. Add `prop` to your list of dependencies in `mix.exs`\n\n```elixir\ndef deps do\n  [\n    {:prop, \"~\u003e 0.0.5\"}\n  ]\nend\n```\n\n3. Copy `.env.example` -\u003e `.env` to configure your application when running \n`docker-compose`\n\n4. Start the applications with docker `make start`\n\n## Usage\n\n### Starting the server with docker\n\n```bash\n$ make start\n```\n\nWhich will start the services outlined in [docker-compose.yml](docker-compose.yml).\n\nVisit [prop.localhost](http://prop.localhost).\n\nWhen running the application with `docker-compose` you will need to enter the \nbasic auth development credentials:\n\n```\nusername: admin\npassword: password\n```\n\nSee the [Makefile](./Makefile) for more details on the individual commands run.\n\n### Download your data with [History](https://github.com/fremantle-industries/history)\n\nBefore you can request to download candles you will need to import the products\nfor a supported venue.\n\nNavigate to [history.localhost/products](http://history.localhost/products)\nand click on `Import` then wait for History to finish adding products from \nsupported venues.\n\nGo to [history.localhost/data/candles/jobs](http://history.localhost/data/candles/jobs)\nand input the products you would like to download data for. \nClick on `Download` and wait for the data to finish by watching the status column.\n\n**NOTE**: Only FTX based products will currently download. You can check\navailability of platforms on the history\n[README](https://github.com/fremantle-industries/history/blob/main/README.md)\n\n\n### Visualize your data with [Grafana](https://grafana.com/)\n\nNavigate to\n[grafana.localhost/dashboards](http://grafana.localhost/dashboards)\nand select `Candles` from the `General` folder.\n\nSet the period to min_1 or whatever timeframe you downloaded the candles to see\nthem plotted on a chart.\n\n\n### Explore your data with [Livebook](https://github.com/livebook-dev/livebook)\n\nNavigate to [livebook.localhost](http://livebook.localhost/) and open a\nnotebook by clicking on `New notebook` at the top right.\n\nYou can pull in dependencies and explore the individual packages:\n\n```elixir\nMix.install([\n  {:history, \"~\u003e 0.0.23\"}\n])\n```\n\nOr, more conveniently you can setup a runtime that uses the context of your\ncurrent application. By using Runtime \u003e Configure \u003e Mix Standalone OR Attached\nNode.\n\n## Requirements\n\n`prop` requires Elixir 1.13+, Erlang/OTP 22+ \u0026 Rust.\n\nWe recommend using [`asdf`](https://github.com/asdf-vm/asdf) to manage the \nlanguage requirements.\n\n- [https://github.com/asdf-vm/asdf-erlang](https://github.com/asdf-vm/asdf-erlang)\n- [https://github.com/asdf-vm/asdf-elixir](https://github.com/asdf-vm/asdf-elixir)\n- [https://github.com/asdf-community/asdf-rust](https://github.com/asdf-community/asdf-rust)\n\n## Prop - [http://prop.localhost](http://prop.localhost)\n\n![home](./docs/home-dashboard.png)\n\n![beta](./docs/beta-dashboard.png)\n\n![station](./docs/prop-station.png)\n\n![gainers-and-losers](./docs/gainers-and-losers.png)\n\n## Workbench - [http://workbench.localhost](http://workbench.localhost)\n\nFrom idea to execution, manage your trading operation across a distributed cluster\n\n[![stream-realtime-orders](https://github.com/fremantle-industries/workbench/blob/main/docs/stream-realtime-orders.png)](https://github.com/fremantle-industries/workbench)\n\n## History - [http://history.localhost](http://history.localhost)\n\nDownload and warehouse historical trading data\n\n[![history-jobs](https://github.com/fremantle-industries/history/blob/main/docs/predicted-funding-rate-download.png)](https://github.com/fremantle-industries/history)\n\n## Rube - [http://rube.localhost](http://rube.localhost)\n\nA multi-chain DeFi development toolkit\n\n[![rube-poc-overview](https://github.com/fremantle-industries/rube/blob/main/docs/rube-poc-overview-thumbnail.png)](https://youtu.be/f2phGFZrh80)\n\n## Slurpee - [http://slurpee.locahost](http://slurpee.localhost)\n\nA GUI frontend to manage blockchain ingestion with slurp\n\n[![recent heads and blocks](https://github.com/fremantle-industries/slurpee/blob/main/docs/recent-blocks-and-events.png)](https://github.com/fremantle-industries/slurpee)\n\n## Explore Data with LiveBook - [http://livebook.localhost](http://livebook.localhost)\n\n![livebook](./docs/livebook.png)\n\n## Grafana - [http://grafana.localhost](http://grafana.localhost)\n\n![dashboard-beam-vm-health](https://github.com/fremantle-industries/workbench/blob/main/docs/grafana-dashboard-beam-vm-health.png)\n\n## Prometheus - [http://prometheus.localhost](http://prometheus.localhost)\n\n![prometheus](./docs/prometheus.png)\n\n## Tools\n\n* [workbench](https://github.com/fremantle-industries/workbench) - Manage your trading operation across a distributed cluster\n* [history](https://github.com/fremantle-industries/history) - Download and warehouse historical trading data\n* [tai](https://github.com/fremantle-capital/tai) - Composable, real time, market data and trade execution toolkit\n* [rube](https://github.com/fremantle-industries/rube) - A multi-chain DeFi development toolkit for Elixir\n* [slurpee](https://github.com/fremantle-industries/slurpee) - A GUI frontend to manage blockchain ingestion with slurp\n* [slurp](https://github.com/fremantle-industries/slurp) - Blockchain ingestion toolkit\n* [livebook](https://github.com/elixir-nx/livebook) - Livebook is a web application for writing interactive and collaborative code notebooks built with Phoenix LiveView\n* [grafana](https://grafana.com) - Dashboard Monitoring. Store \u0026 Visualize Your Metrics\n* [timescaledb](https://www.timescale.com) - Relational database for time-series data. Supercharged PostgreSQL\n* [prometheus](https://prometheus.io) - An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting\n\n## Development\n\nInitial setup:\n\n- Installs `hex` and `npm` dependencies\n- Generates migrations for history, workbench and tai\n- Runs migrations\n- Seeds database\n\n```bash\n$ make start_development\n```\n\nSee the [Makefile](./Makefile) for more details.\n\n## Test\n\n```bash\n$ make test\n```\n\nSee the [Makefile](./Makefile) for more details.\n\n## Ecto Database\n\nReset drops the db, creates a new db \u0026 runs the migrations\n\n```bash\n$ mix ecto.reset\n```\n\nMigrate up\n\n```bash\n$ mix ecto.migrate\n```\n\nMigrate down\n\n```bash\n# Last migration\n$ mix ecto.rollback\n# Last 3 migrations\n$ mix ecto.rollback -n 3\n```\n\n## Debugging\n\n```\n**could not compile dependency :ex_keccak**\n```\n\n- Ensure you have rust installed so Rustler can build its dependencies:\n`curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`\n\n\n```\nnginx: [emerg] host not found in upstream grafana\n```\n\n- Either run Grafana first with `docker-compose up grafana` \nfollowed by `docker-compose up` OR run your normal\n`docker-compose up` followed by `docker-compose restart grafana`.\n\n\n```\n**(DBConnection.ConnectionError)**\n```\n\n- Usually related to the previous issue. Ensure your reverse proxy is running.\nUse `docker network ls` and `docker network inspect container_name` for a sanity\ncheck that your network is what you expect.\n\n\n```\n**(Postgrex.Error) FATAL 3D000 (invalid_catalog_name) database \"prop_dev\" does not exist**\n```\n\n- Rerun your migrations using `mix ecto.reset` and `mix ecto.migrate` and ensure\nthey both pass successfully.\n\n```\n** (Mix) Could not start application master_proxy: MasterProxy.Application.start(:normal, []) returned an error: shutdown: failed to start child: {:ranch_listener_sup, HTTP}\n    ** (EXIT) shutdown: failed to start child: :ranch_acceptors_sup\n        ** (EXIT) {:listen_error, HTTP, :eacces}\n```\n\n- Ranch cannot run on protected ports without permission. Configure a different port e.g. `RANCH_HTTP_PORT=4000 iex mix phx.server`\n\n\n## Authors\n\n- Alex Kwiatkowski - alex+git@fremantle.io\n\n## License\n\n`prop` is released under the [MIT license](./LICENSE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffremantle-industries%2Fprop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffremantle-industries%2Fprop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffremantle-industries%2Fprop/lists"}