All Projects → 117 → alpaca

117 / alpaca

Licence: ISC License
A TypeScript Node.js library for the https://alpaca.markets REST API and WebSocket streams.

Programming Languages

typescript
32286 projects
HTML
75241 projects
javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to alpaca

cira
Cira algorithmic trading made easy. A Façade library for simpler interaction with alpaca-trade-API from Alpaca Markets.
Stars: ✭ 21 (-79%)
Mutual labels:  trading, stocks, alpaca, alpaca-markets
alpaca-trade-api-cpp
C++ client library for the Alpaca Trading API.
Stars: ✭ 48 (-52%)
Mutual labels:  trading, alpaca, alpaca-markets
TerminalStocks
Pure terminal stock ticker for Windows.
Stars: ✭ 88 (-12%)
Mutual labels:  trading, stock, stocks
Stocksharp
Algorithmic trading and quantitative trading open source platform to develop trading robots (stock markets, forex, crypto, bitcoins, and options).
Stars: ✭ 4,601 (+4501%)
Mutual labels:  trading, markets, stocks
degiro-trading-tracker
Simplified tracking of your investments
Stars: ✭ 16 (-84%)
Mutual labels:  trading, stock, stocks
stockbot
Alpaca algo stock trading bot
Stars: ✭ 105 (+5%)
Mutual labels:  stocks, alpaca, alpaca-markets
IEX CPP API
Unofficial C++ Lib for the IEXtrading API
Stars: ✭ 34 (-66%)
Mutual labels:  stock, stocks
TradingView-Machine-Learning-GUI
Let Python optimize the best stop loss and take profits for your TradingView strategy.
Stars: ✭ 396 (+296%)
Mutual labels:  trading, stock
sse-option-crawler
SSE 50 index options crawler 上证50期权数据爬虫
Stars: ✭ 17 (-83%)
Mutual labels:  stock, stocks
Beibo
🤖 Predict the stock market with AI 用AI预测股票市场
Stars: ✭ 46 (-54%)
Mutual labels:  stock, stocks
tstock
📈A command line tool to view stock charts in the terminal.
Stars: ✭ 498 (+398%)
Mutual labels:  trading, stocks
ig-markets
IG Markets API wrapper for Node.js
Stars: ✭ 23 (-77%)
Mutual labels:  stock, stocks
Finance-Robinhood
Trade stocks and ETFs with free brokerage Robinhood and Perl
Stars: ✭ 42 (-58%)
Mutual labels:  stocks, stocks-api
web trader
📊 Python Flask game that consolidates data from Nasdaq, allowing the user to practice buying and selling stocks.
Stars: ✭ 21 (-79%)
Mutual labels:  trading, stock
finam-export
Python client library to download historical data from finam.ru
Stars: ✭ 84 (-16%)
Mutual labels:  trading, stocks
nordnet
Uonfficial wrapper for financial data api from the Scandinavian broker Nordnet
Stars: ✭ 13 (-87%)
Mutual labels:  trading, stock
tvdatafeed
A simple TradingView historical Data Downloader
Stars: ✭ 189 (+89%)
Mutual labels:  trading, stocks
stocktwits-sentiment
Stocktwits market sentiment analysis in Python with Keras and TensorFlow.
Stars: ✭ 23 (-77%)
Mutual labels:  stock, stocks
AutoTrader
A Python-based development platform for automated trading systems - from backtesting to optimisation to livetrading.
Stars: ✭ 227 (+127%)
Mutual labels:  trading, stocks
dukascopy-tools
✨ Download historical price tick data for Crypto, Stocks, ETFs, CFDs, Forex via CLI and Node.js ✨
Stars: ✭ 128 (+28%)
Mutual labels:  trading, stock

alpaca

version code build prettier

A TypeScript Node.js library for the https://alpaca.markets REST API and WebSocket streams.

Contents

Features

  • Fully typed.
  • Fully asynchronous promise based API.
  • Extensible AlpacaClient and AlpacaStream classes.
  • Built-in rate limiting.
  • Built-in number and date parsing.
  • A 1:1 mapping of the official Alpaca docs.
  • Auto-transpiled modern ESM alternative.
  • OAuth integration support.
  • Minified and non-minified bundles.
  • Various bundles provided:
    • alpaca.js - ESM bundle (for node)
    • alpaca.bundle.js - ESM bundle with dependencies (for node)
    • alpaca.browser.js - UMD bundle (for browser)
    • alpaca.browser.modern.js - ESM modern bundle (for browser)

Install

From NPM:

> npm i @master-chief/alpaca

From GitHub:

From these popular CDNs:

Import

Import with CommonJS:

let { AlpacaClient, AlpacaStream } = require('@master-chief/alpaca')

Import with ESM:

import { AlpacaClient, AlpacaStream } from '@master-chief/alpaca'

Import as script:

<script src="https://unpkg.com/@master-chief/alpaca/dist/alpaca.browser.min.js"></script>

Import as module:

<script type="module">
  import alpaca from 'alpaca.browser.modern.min.js'
</script>

Client

Creating a new client

If you wish to use env vars, populate these fields with process.env on your own. Paper account key detection is automatic. Using OAuth? Simply pass an access_token in the credentials object.

const client = new AlpacaClient({
  credentials: {
    key: 'xxxxxx',
    secret: 'xxxxxxxxxxxx',
    // access_token: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
    paper: true,
  },
  rate_limit: true,
})

Built-in parsing

Alpaca provides numbers as strings. From their docs:

Decimal numbers are returned as strings to preserve full precision across platforms. When making a request, it is recommended that you also convert your numbers to strings to avoid truncation and precision errors.

This package provides numbers as number instead, and date strings as Date objects which is what most developers want out of the box. If you want the original data, as it came from Alpaca, you can call raw() on any entity.

const account = await client.getAccount()

console.log(typeof account.buying_power) // number
console.log(typeof account.raw().buying_power) // string

Methods

The following methods are available on the client.

Account

Market Data v1

Market Data v2

isAuthenticated

await client.isAuthenticated()

getAccount

await client.getAccount()

getOrder

await client.getOrder({ order_id: '6187635d-04e5-485b-8a94-7ce398b2b81c' })

getOrders

await client.getOrders({ limit: 25, status: 'all' })

placeOrder

await client.placeOrder({
  symbol: 'SPY',
  qty: 1,
  // or
  // notional: 100,
  side: 'buy',
  type: 'market',
  time_in_force: 'day',
})

replaceOrder

await client.replaceOrder({
  order_id: '69a3db8b-cc63-44da-a26a-e3cca9490308',
  limit_price: 9.74,
})

cancelOrder

await client.cancelOrder({ order_id: '69a3db8b-cc63-44da-a26a-e3cca9490308' })

cancelOrders

await client.cancelOrders()

getPosition

await client.getPosition({ symbol: 'SPY' })

getPositions

await client.getPositions()

closePosition

await client.closePosition({ symbol: 'SPY' })

closePositions

await client.closePositions()

getAsset

await client.getAsset({ asset_id_or_symbol: 'SPY' })

getAssets

await client.getAssets({ status: 'active' })

getWatchlist

await client.getWatchlist({ uuid: '2000e463-6f87-41c0-a8ba-3e40cbf67128' })

getWatchlists

await client.getWatchlists()

createWatchlist

await client.createWatchlist({
  name: 'my watchlist',
  symbols: ['SPY', 'DIA', 'EEM', 'XLF'],
})

updateWatchlist

await client.updateWatchlist({
  uuid: '2000e463-6f87-41c0-a8ba-3e40cbf67128',
  name: 'new watchlist name',
  symbols: ['TSLA', 'AAPL'],
})

addToWatchlist

await client.addToWatchlist({
  uuid: '2000e463-6f87-41c0-a8ba-3e40cbf67128',
  symbol: 'F',
})

removeFromWatchlist

await client.removeFromWatchlist({
  uuid: '2000e463-6f87-41c0-a8ba-3e40cbf67128',
  symbol: 'F',
})

deleteWatchlist

await client.deleteWatchlist({ uuid: '2000e463-6f87-41c0-a8ba-3e40cbf67128' })

getCalendar

await client.getCalendar({ start: new Date(), end: new Date() })

getClock

await client.getClock()

getAccountConfigurations

await client.getAccountConfigurations()

updateAccountConfigurations

await client.updateAccountConfigurations({
  no_shorting: true,
  suspend_trade: true,
})

getAccountActivities

await client.getAccountActivities({ activity_type: 'FILL' })

getPortfolioHistory

await client.getPortfolioHistory({ period: '1D', timeframe: '1Min' })

getLastTrade_v1

await client.getLastTrade_v1({ symbol: 'SPY' })

getLastQuote_v1

await client.getLastQuote_v1({ symbol: 'SPY' })

getBars_v1

await client.getBars_v1({ symbols: ['SPY', 'DIA', 'XLF'], timeframe: '1Min' })

getTrades

Basic
await client.getTrades({
  symbol: 'SPY',
  start: new Date('2021-02-26T14:30:00.007Z'),
  end: new Date('2021-02-26T14:35:00.007Z'),
})
Paginated
let trades = []
let page_token = ''

// until the next token we receive is null
while (page_token != null) {
  let resp = await client.getTrades({ ..., page_token })
  trades.push(...resp.trades)
  page_token = resp.next_page_token
}

// wooh! we have collected trades from multiple pages
console.log(trades.length)

getQuotes

Basic
await client.getQuotes({
  symbol: 'SPY',
  start: new Date('2021-02-26T14:30:00.007Z'),
  end: new Date('2021-02-26T14:35:00.007Z'),
})
Paginated
let quotes = []
let page_token = ''

// until the next token we receive is null
while (page_token != null) {
  let resp = await client.getQuotes({ ..., page_token })
  quotes.push(...resp.quotes)
  page_token = resp.next_page_token
}

// wooh! we have collected quotes from multiple pages
console.log(quotes.length)

getBars

Basic
await client.getBars({
  symbol: 'SPY',
  start: new Date('2021-02-26T14:30:00.007Z'),
  end: new Date('2021-02-26T14:35:00.007Z'),
  timeframe: '1Min',
  // page_token: "MjAyMS0wMi0wNlQxMzowOTo0Mlo7MQ=="
})
Paginated
let bars = []
let page_token = ''

// until the next token we receive is null
while (page_token != null) {
  let resp = await client.getBars({ ..., page_token })
  bars.push(...resp.bars)
  page_token = resp.next_page_token
}

// wooh! we have collected bars from multiple pages
console.log(bars.length)

getSnapshot

await client.getSnapshot({ symbol: 'SPY' })

getSnapshots

await client.getSnapshots({ symbols: ['SPY', 'DIA'] })

Stream

Creating a new stream

If you wish to use env vars, populate these fields with process.env on your own.

import { AlpacaStream } from '@master-chief/alpaca'

const stream = new AlpacaStream({
  credentials: {
    key: 'xxxxxx',
    secret: 'xxxxxxxxxxxx',
    paper: true,
  },
  type: 'market_data', // or "account"
  source: 'iex', // or "sip" depending on your subscription
})

Methods

The following methods are available on the stream.

Channels

Channel Type
trade_updates account
trades market_data
quotes market_data
bars market_data

subscribe

stream.once('authenticated', () =>
  stream.subscribe('bars', ['SPY', 'AAPL', 'TSLA']),
)

unsubscribe

stream.unsubscribe('bars', ['SPY'])

on

stream.on('message', (message) => console.log(message))
stream.on('trade', (trade) => console.log(trade))
stream.on('bar', (bar) => console.log(bar))
stream.on('quote', (quote) => console.log(quote))
stream.on('trade_updates', (update) => console.log(update))
stream.on('error', (error) => console.warn(error))

getConnection

stream.getConnection()

Common Issues

If you are having difficulty getting Jest to work with this library, add this to your configuration:

moduleNameMapper: {
  '@master-chief/alpaca': '<rootDir>/node_modules/@master-chief/alpaca/dist/cjs/index.cjs',
},

Credit to @calvintwr and @wailinkyaww for finding this solution.

Examples

Don't know where to start? Check out our community-made examples here.

Contributing

Feel free to contribute and PR to your 💖's content.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].