Skip to content
/ alpa Public

Elixir api wrapper module for alpaca.markets

Notifications You must be signed in to change notification settings

phiat/alpa

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

Elixir api wrapper module for alpaca.markets

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages