Alpa.Trading.Orders (AlpaEx v1.0.3)

View Source

Order operations for the Alpaca Trading API.

Summary

Functions

Helper to place a market buy order.

Cancel an order by ID.

Cancel all open orders.

Get an order by ID.

Get an order by client order ID.

Get all orders.

Place a new order.

Replace (modify) an existing order.

Helper to place a market sell order.

Functions

buy(symbol, qty, opts \\ [])

@spec buy(String.t(), pos_integer() | String.t(), keyword()) ::
  {:ok, Alpa.Models.Order.t()} | {:error, Alpa.Error.t()}

Helper to place a market buy order.

cancel(order_id, opts \\ [])

@spec cancel(
  String.t(),
  keyword()
) :: {:ok, :deleted} | {:error, Alpa.Error.t()}

Cancel an order by ID.

Examples

iex> Alpa.Trading.Orders.cancel("order-id")
{:ok, :deleted}

cancel_all(opts \\ [])

@spec cancel_all(keyword()) :: {:ok, [map()]} | {:error, Alpa.Error.t()}

Cancel all open orders.

Examples

iex> Alpa.Trading.Orders.cancel_all()
{:ok, [%{"id" => "...", "status" => 200}, ...]}

get(order_id, opts \\ [])

@spec get(
  String.t(),
  keyword()
) :: {:ok, Alpa.Models.Order.t()} | {:error, Alpa.Error.t()}

Get an order by ID.

Examples

iex> Alpa.Trading.Orders.get("order-id-here")
{:ok, %Alpa.Models.Order{...}}

get_by_client_id(client_order_id, opts \\ [])

@spec get_by_client_id(
  String.t(),
  keyword()
) :: {:ok, Alpa.Models.Order.t()} | {:error, Alpa.Error.t()}

Get an order by client order ID.

Examples

iex> Alpa.Trading.Orders.get_by_client_id("my-custom-id")
{:ok, %Alpa.Models.Order{...}}

list(opts \\ [])

@spec list(keyword()) :: {:ok, [Alpa.Models.Order.t()]} | {:error, Alpa.Error.t()}

Get all orders.

Options

  • :status - Order status ("open", "closed", "all")
  • :limit - Max number of orders (default 50, max 500)
  • :after - Filter orders after this timestamp
  • :until - Filter orders until this timestamp
  • :direction - Sort direction ("asc", "desc")
  • :nested - Include nested orders (boolean)
  • :symbols - List of symbols to filter

Examples

iex> Alpa.Trading.Orders.list(status: "open")
{:ok, [%Alpa.Models.Order{...}]}

place(params)

@spec place(keyword()) :: {:ok, Alpa.Models.Order.t()} | {:error, Alpa.Error.t()}

Place a new order.

Required Parameters

  • :symbol - Symbol or asset ID to trade
  • :side - "buy" or "sell"
  • :type - "market", "limit", "stop", "stop_limit", "trailing_stop"
  • :time_in_force - "day", "gtc", "opg", "cls", "ioc", "fok"

Quantity (one required)

  • :qty - Number of shares (integer or decimal string)
  • :notional - Dollar amount to trade (for fractional trading)

Optional Parameters

  • :limit_price - Limit price (required for limit/stop_limit)
  • :stop_price - Stop price (required for stop/stop_limit)
  • :trail_price - Trail price in dollars (for trailing_stop)
  • :trail_percent - Trail percent (for trailing_stop)
  • :extended_hours - Allow trading in extended hours (boolean)
  • :client_order_id - Custom order ID (max 48 chars)
  • :order_class - "simple", "bracket", "oco", "oto"
  • :take_profit - Take profit config for bracket orders
  • :stop_loss - Stop loss config for bracket orders

Examples

# Market order
iex> Alpa.Trading.Orders.place(symbol: "AAPL", qty: 10, side: "buy", type: "market", time_in_force: "day")
{:ok, %Alpa.Models.Order{...}}

# Limit order
iex> Alpa.Trading.Orders.place(symbol: "AAPL", qty: 10, side: "buy", type: "limit", limit_price: "150.00", time_in_force: "gtc")
{:ok, %Alpa.Models.Order{...}}

# Bracket order
iex> Alpa.Trading.Orders.place(
...>   symbol: "AAPL",
...>   qty: 10,
...>   side: "buy",
...>   type: "market",
...>   time_in_force: "day",
...>   order_class: "bracket",
...>   take_profit: %{limit_price: "160.00"},
...>   stop_loss: %{stop_price: "140.00", limit_price: "139.00"}
...> )
{:ok, %Alpa.Models.Order{...}}

replace(order_id, params)

@spec replace(
  String.t(),
  keyword()
) :: {:ok, Alpa.Models.Order.t()} | {:error, Alpa.Error.t()}

Replace (modify) an existing order.

Parameters

  • :qty - New quantity
  • :time_in_force - New time in force
  • :limit_price - New limit price
  • :stop_price - New stop price
  • :trail - New trail amount
  • :client_order_id - New client order ID

Examples

iex> Alpa.Trading.Orders.replace("order-id", qty: 20, limit_price: "155.00")
{:ok, %Alpa.Models.Order{...}}

sell(symbol, qty, opts \\ [])

@spec sell(String.t(), pos_integer() | String.t(), keyword()) ::
  {:ok, Alpa.Models.Order.t()} | {:error, Alpa.Error.t()}

Helper to place a market sell order.