/alpa

Elixir api wrapper module for alpaca.markets

Primary LanguageElixir

Alpa

Elixir API wrapper module for Alpaca Markets

(very alpha, not for production or real money accounts, not an official alpaca.markets package)

see hex docs for all functions

elixir libs: HTTPoison, Jason, ExDoc

implemented functions

  • account info
  • orders
  • market data (bars)
  • positions
  • watchlists
  • calendar
  • clock
  • account config
  • account activities
  • portfolio history
  • streaming

uses v2 alpaca markets api

config

export APCA_API_PAPER="https://paper-api.alpaca.markets"
export APCA_API_DATA="https://data.alpaca.markets"
export APCA_API_KEY="XXXXXXXXXXXXXXX"
export APCA_API_SECRET="XXXXXXXXXXXXXX"

Usage

account info

iex(1)> Alpa.account
{:ok,
 %{
   "account_blocked" => false,
   "account_number" => "XXXXXXXXXX",
   "buying_power" => "400000",
   "cash" => "100000",
   "created_at" => "2020-03-08T20:34:27.768721Z", 
   "currency" => "USD",
   "daytrade_count" => 0,
   "daytrading_buying_power" => "400000",
   "equity" => "100000",
   "id" => "d905b07d-240c-4c07-9bb5-707820aae345",
   "initial_margin" => "0",
   "last_equity" => "100000",
   "last_maintenance_margin" => "0",
   "long_market_value" => "0",
   "maintenance_margin" => "0",
   "multiplier" => "4",
   "pattern_day_trader" => false,
   "portfolio_value" => "100000",
   "regt_buying_power" => "200000",
   "short_market_value" => "0",
   "shorting_enabled" => true,
   "sma" => "0",
   "status" => "ACTIVE",
   "trade_suspended_by_user" => false,
   "trading_blocked" => false,
   "transfers_blocked" => false
 }}

generic buy order

iex(11)> Alpa.place_order("AMD", 10, "buy", "market", "day")

buy market day order helper

iex(5)> Alpa.buy("AMD",10)
{:ok,
 %{
   "asset_class" => "us_equity",
   "asset_id" => "03fb07bb-5db1-4077-8dea-5d711b272625",
   "canceled_at" => nil,
   "client_order_id" => "9bd7ecf4-5f77-4c97-97a3-77407238d4d7",
   "created_at" => "2020-03-09T01:27:48.111921Z",
   "expired_at" => nil,
   "extended_hours" => false,
   "failed_at" => nil,
   "filled_at" => nil,
   "filled_avg_price" => nil,
   "filled_qty" => "0",
   "id" => "24c8895d-0ecc-43f3-acfc-83ca79785908",
   "legs" => nil,
   "limit_price" => nil,
   "order_class" => "",
   "order_type" => "market",
   "qty" => "10",
   "replaced_at" => nil,
   "replaced_by" => nil,
   "replaces" => nil,
   "side" => "buy",
   "status" => "accepted",
   "stop_price" => nil,
   "submitted_at" => "2020-03-09T01:27:48.074728Z",
   "symbol" => "AMD",
   "time_in_force" => "day",
   "type" => "market",
   "updated_at" => "2020-03-09T01:27:48.111921Z"
 }}

sell market day order

iex(1)> Alpa.sell("AMD", 10)

delete a pending order

iex(2)> Alpa.delete_place_order("a5521a11-e664-44d8-b848-f613ae8c4fcc")
{:ok, :success}

delete all pending orders

iex(3)> Alpa.delete_all_orders
{:ok, :success}

Installation

If available in Hex, the package can be installed by adding alpa to your list of dependencies in mix.exs:

def deps do
  [
    {:alpa, "~> 0.1.6"}
  ]
end

Changelog

0.1.0 basic account info, buy, sell, delete orders

0.1.1 hex docs

0.1.2 added market data (bars), multiple endpoint support (paper-api, data)

0.1.3 added positions, watchlists

0.1.4 added portfolio history, README/docs cleanup

0.1.5 added calendar, clock, handle 422 error

0.1.6 added orders (list, update), account config

Contributing

Suggestions welcomed. Please open an issue

License

MIT

made with Elixir and 💙, by phiat