westonplatter / fast_arrow

(no longer maintained) A simple yet robust (stock+options) API client for Robinhood
MIT License
127 stars 37 forks source link
option-strategies portfolio quantitative-finance robinhood robinhood-api robinhood-portfolio robinhood-python stocks trading

PLEASE NOTE - PROJECT IS UNMAINTAINED

I've made a personal choice to use a different brokerage due to Robinhood's outages during the Covid19 market moves. There are some other fantastic Robinhood focused python clients out there. I'd suggest finding them and using them going forward. Best of luck.

fast_arrow

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

Build Status   Coverage
Status   Version

please note - breaking changes introduced in 1.0.0 release

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:

I have released 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
# 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

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,

features

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

Stocks

Options

Portfolio

Authentication/Security

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