Packages

Elixir client library for the Alpaca Trading API. Supports trading, market data, and account management.

Current section

Files

Jump to
alpa_ex lib alpa models asset.ex
Raw

lib/alpa/models/asset.ex

defmodule Alpa.Models.Asset do
@moduledoc """
Asset information model.
"""
use TypedStruct
import Alpa.Helpers, only: [parse_decimal: 1]
@type status :: :active | :inactive
@type asset_class :: :us_equity | :crypto
typedstruct do
field(:id, String.t())
field(:class, asset_class())
field(:exchange, String.t())
field(:symbol, String.t())
field(:name, String.t())
field(:status, status())
field(:tradable, boolean())
field(:marginable, boolean())
field(:maintenance_margin_requirement, Decimal.t())
field(:shortable, boolean())
field(:easy_to_borrow, boolean())
field(:fractionable, boolean())
field(:min_order_size, Decimal.t())
field(:min_trade_increment, Decimal.t())
field(:price_increment, Decimal.t())
end
@doc """
Parse asset data from API response.
"""
@spec from_map(map()) :: t()
def from_map(data) when is_map(data) do
%__MODULE__{
id: data["id"],
class: parse_class(data["class"]),
exchange: data["exchange"],
symbol: data["symbol"],
name: data["name"],
status: parse_status(data["status"]),
tradable: data["tradable"],
marginable: data["marginable"],
maintenance_margin_requirement: parse_decimal(data["maintenance_margin_requirement"]),
shortable: data["shortable"],
easy_to_borrow: data["easy_to_borrow"],
fractionable: data["fractionable"],
min_order_size: parse_decimal(data["min_order_size"]),
min_trade_increment: parse_decimal(data["min_trade_increment"]),
price_increment: parse_decimal(data["price_increment"])
}
end
defp parse_class("us_equity"), do: :us_equity
defp parse_class("crypto"), do: :crypto
defp parse_class(_), do: nil
defp parse_status("active"), do: :active
defp parse_status("inactive"), do: :inactive
defp parse_status(_), do: nil
end