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 activity.ex
Raw

lib/alpa/models/activity.ex

defmodule Alpa.Models.Activity do
@moduledoc """
Account activity model for trades, dividends, fees, etc.
"""
use TypedStruct
typedstruct do
field :id, String.t()
field :activity_type, String.t()
field :date, Date.t()
field :net_amount, Decimal.t()
field :symbol, String.t()
field :qty, Decimal.t()
field :per_share_amount, Decimal.t()
field :price, Decimal.t()
field :cum_qty, Decimal.t()
field :leaves_qty, Decimal.t()
field :side, String.t()
field :type, String.t()
field :order_id, String.t()
field :transaction_time, DateTime.t()
field :description, String.t()
field :status, String.t()
end
@spec from_map(map()) :: t()
def from_map(data) when is_map(data) do
%__MODULE__{
id: data["id"],
activity_type: data["activity_type"],
date: parse_date(data["date"]),
net_amount: parse_decimal(data["net_amount"]),
symbol: data["symbol"],
qty: parse_decimal(data["qty"]),
per_share_amount: parse_decimal(data["per_share_amount"]),
price: parse_decimal(data["price"]),
cum_qty: parse_decimal(data["cum_qty"]),
leaves_qty: parse_decimal(data["leaves_qty"]),
side: data["side"],
type: data["type"],
order_id: data["order_id"],
transaction_time: parse_datetime(data["transaction_time"]),
description: data["description"],
status: data["status"]
}
end
defp parse_decimal(nil), do: nil
defp parse_decimal(value) when is_binary(value), do: Decimal.new(value)
defp parse_decimal(value) when is_integer(value), do: Decimal.new(value)
defp parse_decimal(value) when is_float(value), do: Decimal.from_float(value)
defp parse_date(nil), do: nil
defp parse_date(value) when is_binary(value) do
case Date.from_iso8601(value) do
{:ok, date} -> date
_ -> nil
end
end
defp parse_datetime(nil), do: nil
defp parse_datetime(value) when is_binary(value) do
case DateTime.from_iso8601(value) do
{:ok, dt, _} -> dt
_ -> nil
end
end
end