Packages
tai
0.0.45
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/advisors/instance.ex
defmodule Tai.Advisors.Instance do
alias Tai.Advisors.{Instance, Spec}
@type spec :: Spec.t()
@type status :: :unstarted | :running
@type t :: %Instance{
mod: Spec.mod(),
restart: Tai.AdvisorGroup.restart(),
shutdown: Tai.AdvisorGroup.shutdown(),
group_id: Spec.group_id(),
advisor_id: Spec.advisor_id(),
products: [Spec.product()],
config: Spec.config(),
trades: [struct],
run_store: Tai.Advisor.run_store(),
pid: pid,
status: status
}
@enforce_keys ~w(mod start_on_boot restart shutdown group_id advisor_id products config pid status)a
defstruct ~w(mod start_on_boot restart shutdown group_id advisor_id products config trades run_store pid status)a
@spec from_spec(spec) :: t
def from_spec(spec) do
pid = spec |> whereis()
status = pid |> to_status()
%Instance{
mod: spec.mod,
start_on_boot: spec.start_on_boot,
restart: spec.restart,
shutdown: spec.shutdown,
group_id: spec.group_id,
advisor_id: spec.advisor_id,
products: spec.products,
config: spec.config,
trades: spec.trades,
run_store: spec.run_store,
pid: pid,
status: status
}
end
@spec to_spec(t) :: spec
def to_spec(instance) do
%Spec{
mod: instance.mod,
start_on_boot: instance.start_on_boot,
restart: instance.restart,
shutdown: instance.shutdown,
group_id: instance.group_id,
advisor_id: instance.advisor_id,
products: instance.products,
config: instance.config,
trades: instance.trades,
run_store: instance.run_store
}
end
defp whereis(spec) do
name = Tai.Advisor.to_name(spec.group_id, spec.advisor_id)
Process.whereis(name)
end
defp to_status(val) when is_pid(val), do: :running
defp to_status(_), do: :unstarted
end