Skip to content
vic

fremantle-industries/tai

A composable, real time, market data and trade execution toolkit. Built with Elixir, runs on the Erlang virtual machine

fremantle-industries/tai.json
{
"createdAt": "2017-07-28T03:07:18Z",
"defaultBranch": "main",
"description": "A composable, real time, market data and trade execution toolkit. Built with Elixir, runs on the Erlang virtual machine",
"fullName": "fremantle-industries/tai",
"homepage": "",
"language": "Elixir",
"name": "tai",
"pushedAt": "2024-12-07T00:58:56Z",
"stargazersCount": 488,
"topics": [
"algorithmic-trading",
"automated-trading",
"bitcoin",
"crypto-trader",
"crypto-trading",
"crypto-trading-bot",
"cryptocurrency",
"cryptocurrency-trader",
"cryptocurrency-trading-bot",
"derivatives",
"fintech",
"hft",
"hft-trading",
"investment",
"quant",
"quantitative-finance",
"trading",
"trading-bot",
"trading-systems"
],
"updatedAt": "2025-11-25T23:24:48Z",
"url": "https://github.com/fremantle-industries/tai"
}

Build Status Coverage Status hex.pm version

A composable, real time, market data and trade execution toolkit. Built with Elixir, runs on the Erlang virtual machine

[Getting Started]!(./docs/GETTING_STARTED.md) | [Built with Tai]!(./docs/BUILT_WITH_TAI.md) | [Commands]!(./docs/COMMANDS.md) | [Architecture]!(./docs/ARCHITECTURE.md) | [Examples]!(./apps/examples) | [Configuration]!(./docs/CONFIGURATION.md) | [Observability]!(./docs/OBSERVABILITY.md)

Stream market data to create and manage orders with a near-uniform API across multiple venues

Here’s an example of an advisor that logs the spread between multiple products on multiple venues

asciicast

VenuesLive Order BookAccountsOrdersProductsFees
FTX[x][x][x][x][x]
OkEx[x][x][x][x][x]
BitMEX[x][x][x][x][x]
VenueLive Order BookAccountsOrdersProductsFees
Binance[x][x][ ][x][x]
Deribit[x][x][ ][x][x]
GDAX[x][x][ ][x][x]
Huobi[x][ ][ ][x][ ]
Delta Exchange[x][ ][ ][x][x]
Bybit[ ][ ][ ][x][ ]
bit.com[ ][ ][ ][ ][ ]
Bitfinex[ ][ ][ ][ ][ ]
Kraken[ ][ ][ ][ ][ ]
CME[ ][ ][ ][ ][ ]
Phemex[ ][ ][ ][ ][ ]
BTSE[ ][ ][ ][ ][ ]
KuCoin[ ][ ][ ][ ][ ]
BitMax[ ][ ][ ][ ][ ]
Bitget[ ][ ][ ][ ][ ]
MEXC[ ][ ][ ][ ][ ]
PrimeXBT[ ][ ][ ][ ][ ]
Gate.io[ ][ ][ ][ ][ ]
Coinflex[ ][ ][ ][ ][ ]
bitFlyer[ ][ ][ ][ ][ ]

tai requires Elixir 1.11+ & Erlang/OTP 22+. Add tai to your list of dependencies in mix.exs

def deps do
[
{:tai, "~> 0.0.75"}
# Choose your order data store
# {:ecto_sqlite3, "~> 0.5.6"}
# {:postgrex, "~> 0.15"}
]
end

Create an .iex.exs file in the root of your project and import the tai helper

.iex.exs
Application.put_env(:elixir, :ansi_enabled, true)
import Tai.IEx

Run the setup mix task to:

  • Download dependencies
  • Create an orders database
  • Generate tai migrations for the orders database
  • Run migrations
Terminal window
$ mix setup

tai runs as an OTP application.

During development we can leverage mix to compile and run our application with an interactive Elixir shell that imports the set of tai helper [commands]!(./docs/COMMANDS.md).

Terminal window
iex -S mix

Bump the required version number in mix.exs and download the dependencies.

Terminal window
$ mix deps.update tai

Regenerate new or updated migrations

Terminal window
$ mix tai.gen.migration

Rerun ecto migrations

Terminal window
$ mix ecto.migrate

If you think this tai thing might be worthwhile and you don’t see a feature or venue listed we would love your contributions to add them! Feel free to drop us an email or open a Github issue.

tai is released under the [MIT license]!(./LICENSE.md)