A simple yet robust (stock+options) API client for Robinhood
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 have released these changes under version 1.0.0 to follow semantic version guidelines (since auth changes are incompatible API changes).
from fast_arrow import Client, Stock, OptionChain, Option
#
# new auth process as of 1.0.0
# 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"
md = StockMarketdata.quote_by_symbol(client, symbol)
#
# get the TLT option chain
#
stock_id = md["instrument"].split("/")[-2]
option_chain = OptionChain.fetch(client, stock_id, symbol)
#
# 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 the package from pypi,
pip install fast_arrow
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 reason through & execute with code
- organize code in small and discrete python classes
- use fast_arrow_auth to handle authentication process
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)
- exposes token refresh method (example)
Want to propose a feature? Open a feature request or open a Pull Request.
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
Adding so I don't forget the next time I release a version,
python setup.py sdist bdist_wheel
twine upload dist/*
- fast_arrow_auth, https://github.com/westonplatter/fast_arrow_auth
-
simple_portfolio. Export trades from Robinhood and run basic reporting on portfolio performance. https://github.com/westonplatter/simple_portfolio
-
chesterton. A delightful little UI & trading bot for strategies on Robinhood. https://github.com/westonplatter/chesterton