Skip to content

A simple yet robust (stock+options) API client for Robinhood

License

Notifications You must be signed in to change notification settings

geoffreywang1990/fast_arrow

Repository files navigation

fast_arrow

A simple yet robust API client for Robinhood

Build Status   Coverage Status   Version

NOTE - changes coming with version >= 1.0

Sometime during Spring 2019, Robinhood changed how their API handles authentication. In order to adapt to those changes, I've moved "authentication" outside this library to fast_arrow_auth, https://github.com/westonplatter/fast_arrow_auth.

Please see:

  • issue 35 for a detailed account of the issue
  • this comment for the approach I've taken to remediate auth issues
  • this PR for a run down on exact code changes

I will be releasing these changes under version 1.0.0 to follow semantic version guidelines (since auth changes are incompatible API changes).

example

from fast_arrow import Client, Stock, OptionChain, Option

#
# new auth process as of 1.0.0.rc1
# get auth_data (see https://github.com/westonplatter/fast_arrow_auth)
#
with open("fast_arrow_auth.json") as f:
    auth_data = json.loads(f.read())

#
# initialize client with auth_data
#
client = Client(auth_data)

#
# fetch the stock info for TLT
#
symbol = "TLT"
stock = Stock.fetch(client, symbol)

#
# get the TLT option chain
#
stock_id = stock["id"]
option_chain = OptionChain.fetch(client, stock_id)

#
# let's get TLT options (calls and puts) for next 4 expiration dates
#
oc_id = option_chain["id"]
eds = option_chain['expiration_dates'][0:3]

#
# get all options on the TLT option chain
#
ops = Option.in_chain(client, oc_id, expiration_dates=eds)

#
# merge in market data fro TLT option instruments (ask, bid, delta, theta, etc)
#
ops = Option.mergein_marketdata_list(client, ops)

install

Install the package from pypi,

pip install fast_arrow

design principles

You might be asking, "yet another Robinhood client? There's already a few out there. What's different about this one?"

fast_arrow holds to these design principles,

  • focus on simple features that expose data. Don't interpret data.
  • make stock & option operations easy to talk about and do with code
  • organize code in small and discrete python classes
  • use fast_arrow_auth to handle authentication process

features

Here's what you can do with fast_arrow (some features still in development)

Stocks

  • get quotes
  • fetch historical data
  • fetch all stock trades
  • submit orders
  • fetch earning events (past and future)
  • fetch company news articles
  • fetch company fundamentals
  • fetch popularity data

Options

  • fetch option quotes (example)
  • fetch open option positions (example)
  • fetch all option orders (filled, canceled, rejected)
  • fetch historical options data (example)
  • fetch option events (example)
  • generate option strategy orders
  • generate humanized names for option strategies
  • submit order (example)
  • cancel order (example)
  • replace order (example)

Portfolio

  • fetch historical value of portfolio (example)

Authentication/Security

  • Authentication has moved to fast_arrow_auth.
  • pin SSL certificate (see this PR)
  • automatically refreshes oauth2

Want to propose a feature? Open a feature request or open a Pull Request.

development

Install pipenv, and then run,

pipenv install --dev

Run the test suite via,

make test

Run all the examples (make sure you add username/password to config.debug.ini),

sh run_all_examples.sh

Run the test suite against a specific python version,

pipenv run tox -e py36

releases

Adding so I don't forget the next time I release a version,

python setup.py sdist bdist_wheel
twine upload dist/*

supporting libraries

projects using fast_arrow

About

A simple yet robust (stock+options) API client for Robinhood

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 99.2%
  • Other 0.8%