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/venues/client.ex
defmodule Tai.Venues.Client do
alias Tai.Venues.Adapter
alias Tai.Trading.{Order, OrderResponses}
@type venue :: Tai.Venue.t()
@type credential_id :: Tai.Venue.credential_id()
@type order :: Order.t()
@type shared_error_reason :: Adapter.shared_error_reason()
@type product :: Tai.Venues.Product.t()
@spec products(venue) :: {:ok, [product]} | {:error, shared_error_reason}
def products(venue), do: venue.adapter.products(venue.id)
@type account :: Tai.Venues.Account.t()
@spec accounts(venue, credential_id) :: {:ok, [account]} | {:error, shared_error_reason}
def accounts(venue, credential_id) do
{:ok, credentials} = Map.fetch(venue.credentials, credential_id)
venue.adapter.accounts(venue.id, credential_id, credentials)
end
@type position :: Tai.Trading.Position.t()
@type positions_error_reason :: Adapter.positions_error_reason()
@spec positions(venue, credential_id) :: {:ok, [position]} | {:error, positions_error_reason}
def positions(venue, credential_id) do
{:ok, credentials} = Map.fetch(venue.credentials, credential_id)
venue.adapter.positions(venue.id, credential_id, credentials)
end
@spec maker_taker_fees(venue, credential_id) ::
{:ok, {maker :: Decimal.t(), taker :: Decimal.t()} | nil}
| {:error, shared_error_reason}
def maker_taker_fees(venue, credential_id) do
{:ok, credentials} = Map.fetch(venue.credentials, credential_id)
venue.adapter.maker_taker_fees(venue.id, credential_id, credentials)
end
@type create_response :: OrderResponses.Create.t() | OrderResponses.CreateAccepted.t()
@type create_order_error_reason :: Adapter.create_order_error_reason()
@spec create_order(order) :: {:ok, create_response} | {:error, create_order_error_reason}
def create_order(%Order{} = order, venues \\ Tai.Venues.Config.parse()) do
{venue, credentials} = find_venue_and_credentials(order, venues)
venue.adapter.create_order(order, credentials)
end
@type amend_attrs :: Tai.Trading.Orders.Amend.attrs()
@type amend_response :: OrderResponses.Amend.t()
@type amend_order_error_reason :: Adapter.amend_order_error_reason()
@spec amend_order(order, amend_attrs) ::
{:ok, amend_response} | {:error, amend_order_error_reason}
def amend_order(%Order{} = order, attrs, venues \\ Tai.Venues.Config.parse()) do
{venue, credentials} = find_venue_and_credentials(order, venues)
venue.adapter.amend_order(order, attrs, credentials)
end
@type amend_bulk_attrs :: Tai.Trading.Orders.AmendBulk.attrs()
@type amend_bulk_response :: OrderResponses.AmendBulk.t()
@type amend_bulk_order_error_reason :: Adapter.amend_order_error_reason()
@spec amend_bulk_orders([{order, amend_bulk_attrs}]) ::
{:ok, amend_bulk_response} | {:error, amend_bulk_order_error_reason}
def amend_bulk_orders(
[{%Order{} = order, _} | _] = orders_and_attributes,
venues \\ Tai.Venues.Config.parse()
) do
{venue, credentials} = find_venue_and_credentials(order, venues)
venue.adapter.amend_bulk_orders(orders_and_attributes, credentials)
end
@type cancel_response :: OrderResponses.Cancel.t() | OrderResponses.CancelAccepted.t()
@type cancel_order_error_reason :: Adapter.cancel_order_error_reason()
@spec cancel_order(order) :: {:ok, cancel_response} | {:error, cancel_order_error_reason}
def cancel_order(%Order{} = order, venues \\ Tai.Venues.Config.parse()) do
{venue, credentials} = find_venue_and_credentials(order, venues)
venue.adapter.cancel_order(order, credentials)
end
defp find_venue_and_credentials(order, venues) do
venue = venues |> Map.fetch!(order.venue_id)
credentials = Map.fetch!(venue.credentials, order.credential_id)
{venue, credentials}
end
end