Packages
tai
0.0.47
0.0.75
0.0.74
0.0.73
0.0.72
0.0.71
0.0.70
0.0.69
0.0.68
0.0.67
0.0.66
0.0.65
0.0.64
0.0.63
0.0.62
0.0.61
0.0.60
0.0.59
0.0.58
0.0.57
0.0.56
0.0.55
0.0.54
0.0.53
0.0.52
0.0.51
0.0.50
0.0.49
0.0.48
0.0.47
0.0.46
0.0.45
0.0.44
0.0.43
0.0.42
0.0.41
0.0.40
0.0.39
0.0.38
0.0.37
0.0.36
0.0.35
0.0.34
0.0.33
0.0.32
0.0.31
0.0.30
0.0.29
0.0.28
0.0.27
0.0.26
0.0.25
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
A composable, real time, market data and trade execution toolkit
Current section
Files
Jump to
Current section
Files
lib/tai/commands/markets.ex
defmodule Tai.Commands.Markets do
@moduledoc """
Display the bid/ask for each symbol on all order book feeds
"""
import Tai.Commands.Table, only: [render!: 2]
alias Tai.Markets.Quote
@header [
"Venue",
"Product",
"Bid Price",
"Ask Price",
"Bid Size",
"Ask Size"
]
@spec markets :: no_return
def markets do
Tai.Markets.QuoteStore.all()
|> format_rows
|> sort_rows
|> render!(@header)
end
defp format_rows(market_quotes) do
market_quotes
|> Enum.map(fn market_quote ->
inside_bid = Quote.inside_bid(market_quote)
inside_ask = Quote.inside_ask(market_quote)
[
market_quote.venue_id,
market_quote.product_symbol,
{inside_bid, :price},
{inside_ask, :price},
{inside_bid, :size},
{inside_ask, :size}
]
|> format_row
end)
end
defp sort_rows(rows), do: rows |> Enum.sort(&(&1 < &2))
defp format_row(row) when is_list(row), do: row |> Enum.map(&format_col/1)
defp format_col({nil, _}), do: format_col(nil)
defp format_col({receiver, message}), do: receiver |> get_in([message]) |> format_col
defp format_col(num) when is_number(num), do: num |> Decimal.cast()
defp format_col(%DateTime{} = date), do: Timex.from_now(date)
defp format_col(nil), do: "~"
defp format_col(pass_through), do: pass_through
end