Current section
Files
Jump to
Current section
Files
lib/alpa.ex
defmodule Alpa do
@moduledoc """
api wrapper for alpaca.markets
"""
require Jason
@doc """
gets account info
"""
def account do
get("/v2/account")
end
@doc """
posts an order
"""
def order(symbol, qty, side, type, time_in_force, limit_price \\ nil, stop_price \\ nil) do
body = Jason.encode!(%{
symbol: symbol,
qty: qty,
side: side,
type: type,
time_in_force: time_in_force,
limit_price: limit_price,
stop_price: stop_price})
post("/v2/orders", body)
end
@doc """
buy day market order wrapper
"""
def buy(symbol, qty) do
order(symbol, qty, "buy", "market", "day")
end
@doc """
sell day market order wrapper
"""
def sell(symbol, qty) do
order(symbol, qty, "sell", "market", "day")
end
@doc """
delete an order
"""
def delete_order(id) do
delete("/v2/orders/#{id}")
end
@doc """
delete all orders
"""
def delete_all_orders do
delete("/v2/orders")
end
defp get(path) do
url = Application.get_env(:alpa, :api) <> path
HTTPoison.get(url, headers())
|> handle_response
end
defp post(path, params) do
url = Application.get_env(:alpa, :api) <> path
HTTPoison.post(url, params, headers())
|> handle_response
end
defp delete(path) do
url = Application.get_env(:alpa, :api) <> path
HTTPoison.delete(url, headers())
|> handle_response
end
defp handle_response(response) do
case response do
{:ok, %HTTPoison.Response{status_code: 200, body: body}} ->
{:ok, Jason.decode! body}
{:ok, %HTTPoison.Response{status_code: 204}} -> # delete success
{:ok, :success}
{:ok, %HTTPoison.Response{status_code: 207}} -> # multipart success
{:ok, :success}
{:ok, %HTTPoison.Response{status_code: 403, body: body}} ->
{:ok, Jason.decode!(body)}
{:error, reason} ->
{:error, reason}
end
end
def headers do
[
"APCA-API-KEY-ID": Application.get_env(:alpa, :key),
"APCA-API-SECRET-KEY": Application.get_env(:alpa, :secret)
]
end
end