TradingEngine e uma base de motor de matching para ordens de compra e venda em Elixir. O projeto hoje concentra tres pecas principais:
- Order, que representa uma ordem com
id,price,quantity,sideetimestamp. - Matcher, que contem a logica de confronto entre uma ordem de entrada e uma fila de ordens opostas.
- OrderBook, que guarda os lados de compra e venda e o historico do livro.
Na pratica, isso significa que o repositório ainda esta na fase de nucleo tecnico: ha a estrutura do dominio e parte da logica de matching, mas ainda falta integrar tudo em um fluxo publico de uso, persistencia e distribuicao.
O codigo existente ja aponta para estes comportamentos:
- Criacao de ordens com preco em
Decimal. - Ordenacao das ordens por preco para ambos os lados do livro.
- Regras basicas de matching quando ha compatibilidade entre compra e venda.
- Inicializacao de um processo GenServer para a aplicacao principal.
Ao mesmo tempo, o projeto ainda esta incompleto. Hoje ha, por exemplo, teste quebrando por falta de
TradingEngine.hello/0, e oOrderBookainda tem funcoes internas nao conectadas ao fluxo publico.
Para compilar o projeto:
mix deps.get
mix compilePara iniciar o IEx com o projeto carregado:
iex -S mixExemplos do que ja existe hoje no codigo:
buy = Order.new("1", "100.50", 10, :buy)
sell = Order.new("2", "99.00", 10, :sell)
Matcher.match_order(buy, [sell])Teste automatizado:
mix testExiste uma demo nativa em Elixir que sobe varios nodes concorrentes, gera ordens aleatorias e desenha o book real da engine no terminal em tempo real.
Para abrir, rode:
mix demoVoce tambem pode ajustar o numero de nodes e a velocidade:
mix demo --nodes 7 --speed 1.4