Packages
tai
0.0.69
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/orders/transitions/partial_fill.ex
defmodule Tai.Orders.Transitions.PartialFill do
@moduledoc """
An order has been partially filled. This is a self transition and does not
update the status attribute.
"""
use Ecto.Schema
import Ecto.Changeset
@behaviour Tai.Orders.Transition
@type t :: %__MODULE__{}
@primary_key false
embedded_schema do
field(:venue_order_id, :string)
field(:cumulative_qty, :decimal)
field(:leaves_qty, :decimal)
field(:last_received_at, :utc_datetime_usec)
field(:last_venue_timestamp, :utc_datetime_usec)
end
def changeset(transition, params) do
transition
|> cast(params, [
:venue_order_id,
:cumulative_qty,
:leaves_qty,
:last_received_at,
:last_venue_timestamp
])
|> validate_required([:leaves_qty, :last_received_at])
end
def from do
~w[enqueued create_accepted open pending_cancel cancel_accepted pending_amend amend_accepted]a
end
def attrs(transition) do
qty = Decimal.add(transition.cumulative_qty, transition.leaves_qty)
[
venue_order_id: transition.venue_order_id,
cumulative_qty: transition.cumulative_qty,
leaves_qty: transition.leaves_qty,
qty: qty,
last_received_at: transition.last_received_at,
last_venue_timestamp: transition.last_venue_timestamp
]
end
def status(:enqueued), do: :open
def status(:create_accepted), do: :open
def status(current), do: current
end