tai v0.0.13 Tai.Trading.OrderStore
ETS backed store for the local state of orders
Link to this section Summary
Functions
Returns a specification to start this module under a supervisor
Invoked when the server is started. start_link/3
or start/3
will
block until it returns
Link to this section Types
client_id()
client_id() :: String.t()
client_id() :: String.t()
order()
order() :: Tai.Trading.Order.t()
order() :: Tai.Trading.Order.t()
order_status()
order_status() :: Tai.Trading.Order.status()
order_status() :: Tai.Trading.Order.status()
passive_cancel_required()
passive_cancel_required() ::
:open
| :expired
| :filled
| :pending_cancel
| :pending_amend
| :canceled
| :amend
passive_cancel_required() :: :open | :expired | :filled | :pending_cancel | :pending_amend | :canceled | :amend
passive_fills_required()
passive_fills_required() ::
:open | :pending_amend | :pending_cancel | :amend_error | :cancel_error
passive_fills_required() :: :open | :pending_amend | :pending_cancel | :amend_error | :cancel_error
submission()
submission() :: Tai.Trading.BuildOrderFromSubmission.submission()
submission() :: Tai.Trading.BuildOrderFromSubmission.submission()
venue_order_id()
venue_order_id() :: Tai.Trading.Order.venue_order_id()
venue_order_id() :: Tai.Trading.Order.venue_order_id()
Link to this section Functions
add(submission)
add(submission()) :: {:ok, order()} | no_return()
add(submission()) :: {:ok, order()} | no_return()
all()
all() :: [] | [order()]
all() :: [] | [order()]
amend(client_id, venue_updated_at, price, leaves_qty)
amend_error(client_id, reason)
cancel(client_id, venue_updated_at)
cancel(client_id(), DateTime.t()) ::
{:ok, {old :: order(), updated :: order()}}
| {:error,
:not_found
| {:invalid_status, current :: atom(), required :: :pending_cancel}}
cancel(client_id(), DateTime.t()) :: {:ok, {old :: order(), updated :: order()}} | {:error, :not_found | {:invalid_status, current :: atom(), required :: :pending_cancel}}
cancel_error(client_id, reason)
child_spec(init_arg)
Returns a specification to start this module under a supervisor.
See Supervisor
.
count()
count() :: non_neg_integer()
count() :: non_neg_integer()
create_error(client_id, error_reason)
expire(client_id, venue_order_id, venue_created_at, avg_price, cumulative_qty, leaves_qty)
expire(
client_id(),
venue_order_id(),
DateTime.t(),
Decimal.t(),
Decimal.t(),
Decimal.t()
) ::
{:ok, {old :: order(), updated :: order()}}
| {:error,
:not_found | {:invalid_status, current :: atom(), required :: :enqueued}}
expire( client_id(), venue_order_id(), DateTime.t(), Decimal.t(), Decimal.t(), Decimal.t() ) :: {:ok, {old :: order(), updated :: order()}} | {:error, :not_found | {:invalid_status, current :: atom(), required :: :enqueued}}
fill(client_id, venue_order_id, venue_created_at, avg_price, cumulative_qty)
fill(client_id(), venue_order_id(), DateTime.t(), Decimal.t(), Decimal.t()) ::
{:ok, {old :: order(), updated :: order()}}
| {:error,
:not_found | {:invalid_status, current :: atom(), required :: :enqueued}}
fill(client_id(), venue_order_id(), DateTime.t(), Decimal.t(), Decimal.t()) :: {:ok, {old :: order(), updated :: order()}} | {:error, :not_found | {:invalid_status, current :: atom(), required :: :enqueued}}
find_by_client_id(client_id)
init(state)
Invoked when the server is started. start_link/3
or start/3
will
block until it returns.
init_arg
is the argument term (second argument) passed to start_link/3
.
Returning {:ok, state}
will cause start_link/3
to return
{:ok, pid}
and the process to enter its loop.
Returning {:ok, state, timeout}
is similar to {:ok, state}
except handle_info(:timeout, state)
will be called after timeout
milliseconds if no messages are received within the timeout.
Returning {:ok, state, :hibernate}
is similar to {:ok, state}
except the process is hibernated before entering the loop. See
c:handle_call/3
for more information on hibernation.
Returning {:ok, state, {:continue, continue}}
is similar to
{:ok, state}
except that immediately after entering the loop
the c:handle_continue/2
callback will be invoked with the value
continue
as first argument.
Returning :ignore
will cause start_link/3
to return :ignore
and
the process will exit normally without entering the loop or calling
c:terminate/2
. If used when part of a supervision tree the parent
supervisor will not fail to start nor immediately try to restart the
GenServer
. The remainder of the supervision tree will be started
and so the GenServer
should not be required by other processes.
It can be started later with Supervisor.restart_child/2
as the child
specification is saved in the parent supervisor. The main use cases for
this are:
- The
GenServer
is disabled by configuration but might be enabled later. - An error occurred and it will be handled by a different mechanism than the
Supervisor
. Likely this approach involves callingSupervisor.restart_child/2
after a delay to attempt a restart.
Returning {:stop, reason}
will cause start_link/3
to return
{:error, reason}
and the process to exit with reason reason
without
entering the loop or calling c:terminate/2
.
Callback implementation for GenServer.init/1
.
open(client_id, venue_order_id, venue_created_at, avg_price, cumulative_qty, leaves_qty)
open(
client_id(),
venue_order_id(),
DateTime.t(),
Decimal.t(),
Decimal.t(),
Decimal.t()
) ::
{:ok, {old :: order(), updated :: order()}}
| {:error,
:not_found | {:invalid_status, current :: atom(), required :: :enqueued}}
open( client_id(), venue_order_id(), DateTime.t(), Decimal.t(), Decimal.t(), Decimal.t() ) :: {:ok, {old :: order(), updated :: order()}} | {:error, :not_found | {:invalid_status, current :: atom(), required :: :enqueued}}
passive_cancel(client_id, venue_updated_at)
passive_cancel(client_id(), DateTime.t()) ::
{:ok, {old :: order(), updated :: order()}}
| {:error,
:not_found
| {:invalid_status, current :: atom(), passive_cancel_required()}}
passive_cancel(client_id(), DateTime.t()) :: {:ok, {old :: order(), updated :: order()}} | {:error, :not_found | {:invalid_status, current :: atom(), passive_cancel_required()}}
passive_fill(client_id, venue_updated_at, cumulative_qty)
passive_fill(client_id(), DateTime.t(), Decimal.t()) ::
{:ok, {old :: order(), updated :: order()}}
| {:error,
:not_found | {:invalid_status, current :: atom(), passive_fills_required()}}
passive_fill(client_id(), DateTime.t(), Decimal.t()) :: {:ok, {old :: order(), updated :: order()}} | {:error, :not_found | {:invalid_status, current :: atom(), passive_fills_required()}}
passive_partial_fill(client_id, venue_updated_at, avg_price, cumulative_qty, leaves_qty)
passive_partial_fill(
client_id(),
DateTime.t(),
Decimal.t(),
Decimal.t(),
Decimal.t()
) ::
{:ok, {old :: order(), updated :: order()}}
| {:error,
:not_found | {:invalid_status, current :: atom(), passive_fills_required()}}
passive_partial_fill( client_id(), DateTime.t(), Decimal.t(), Decimal.t(), Decimal.t() ) :: {:ok, {old :: order(), updated :: order()}} | {:error, :not_found | {:invalid_status, current :: atom(), passive_fills_required()}}
pend_amend(client_id, updated_at)
pend_amend(client_id(), DateTime.t()) ::
{:ok, {old :: order(), updated :: order()}}
| {:error,
:not_found
| {:invalid_status, current :: atom(), required :: :open | :amend_error}}
pend_amend(client_id(), DateTime.t()) :: {:ok, {old :: order(), updated :: order()}} | {:error, :not_found | {:invalid_status, current :: atom(), required :: :open | :amend_error}}
pend_cancel(client_id, updated_at)
pend_cancel(client_id(), DateTime.t()) ::
{:ok, {old :: order(), updated :: order()}}
| {:error,
:not_found | {:invalid_status, current :: atom(), required :: :open}}
pend_cancel(client_id(), DateTime.t()) :: {:ok, {old :: order(), updated :: order()}} | {:error, :not_found | {:invalid_status, current :: atom(), required :: :open}}