Skip to main content

A Complete Python Wrapper for Polygon.io APIs.

Project description

polygon: A Complete Polygon.io API Wrapper

Discord Downloads Documentation Status pypi CodeFactor ff fd Licenses gh

what is polygon

polygon is a Complete Python Wrapper for Polygon.io APIs. It offers simple and elegant programmatic access over each endpoint. Functionalities include but not limited to:

  • Stocks, Index and Options data
  • Forex and Crypto data
  • Real time Websocket streaming (both callback and async based)
  • Technical Indicators (SMA, EMA, RSI, MACD)
  • Market Info, News, Holidays, Schedules, Tickers, Conditions, Dividends, Splits
  • Async support for REST endpoints
  • Built In stream reconnection functionality (Experimental, async streamer only)
  • Full builtin Pagination support (with internal merging of responses)
  • Bulk data download functions: bulk OCHLV aggregates bars, bulk ticker details etc.
  • Extensive Option Symbology supporting 6 option symbol formats

and a lot more...

How Do I Use polygon

The complete description of everything you need to know is available in the Documentation which has answers to any question you might have with example uses included wherever needed. Docs are a must-read for most people.

  • For examples to get started with, see the examples
  • For an advanced use case example code involving redis queue and postgresql database, check out
  • MarketMakerLite/polygon
  • The lib is also officially supported by the popular TA library pandas-ta as an underlying data source instead of the default yfinance. See relevant docs to know how to use
  • To see an advanced use case of downloading ALL OCHLV data for ALL tickers for 20+ years and write it to a timescale enabled postgresql database efficiently, see This Script by MML.
  • The documentation also contain TONS of sample code snippets wherever necessary.

Quick Setup Guide With Examples

Before you do anything, you'll need to have a polygon account and get your API key. Visit Your Dashboard to get yours.

Next, you'd need to install polygon

pip install polygon

and You're good to Go!

Here are a few quick usage examples.

Getting a Stock's Previous Day OCHLV

import polygon

api_key = 'YOUR_KEY'

stocks_client = polygon.StocksClient(api_key)

previous_close = stocks_client.get_previous_close('AMD')

print(previous_close)

An Async Example for REST endpoints - Previous Close

import polygon
import asyncio

async def main():
    api_key = 'YOUR_KEY'
    
    stocks_client = polygon.StocksClient(api_key, True)
    
    previous_close = await stocks_client.get_previous_close('AMD')
    await stocks_client.close()  # Recommended to close the httpx session when it's not needed. 
    print(previous_close)

if __name__ == '__main__':
    asyncio.run(main())

A Streaming Example (Callback Based)

import polygon
from polygon.enums import StreamCluster

def my_own_message_handler(ws, msg):
    print(f'msg received: {msg}')

def main():
    api_key = 'YOUR_KEY'

    stream_client = polygon.StreamClient(api_key, StreamCluster.STOCKS, on_message=my_own_message_handler)
    stream_client.start_stream_thread()
    stream_client.subscribe_stock_trades(['AMD', 'NVDA'])

if __name__ == '__main__':
    main()

An Async Streaming Example

import asyncio
import polygon
from polygon.enums import StreamCluster

async def stock_trades_handler(msg):   # it is possible to create one common message handler for different services.
    print(f'msg received: {msg}')
    
async def main():
    api_key = 'YOUR_KEY'
    
    stream_client = polygon.AsyncStreamClient(api_key, StreamCluster.STOCKS)
    
    await stream_client.subscribe_stock_trades(['AMD', 'NVDA'], stock_trades_handler)
    
    while 1:
        await stream_client.handle_messages()  # the lib provides auto reconnect functionality. See docs for info
if __name__ == '__main__':
    asyncio.run(main())

This only scratches the surface of the library.

See the Documentation to start using the library with its full functionalities.

Latest development source code of the library can be found on the development branch

What if I need help?

We have a helpful & vibrant community in our Discord Server. Join in to ask a question, share your ideas or observations or to just chat with interesting people, or maybe just for lurking :eyes:

See Getting Help or you can also start a quick discussion

Quick Links for Speed Runners

What else?

  • Bug reports, suggestions and pull requests are always welcome.
  • See Contributing if you wish to contribute.
  • Read This before raising a bug.
  • CHANGELOG for the project is available within the same repository
  • polygon is released under the MIT License

Made with Passion & Python by P S Solanki

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

polygon-1.2.5-py2.py3-none-any.whl (111.9 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file polygon-1.2.5-py2.py3-none-any.whl.

File metadata

  • Download URL: polygon-1.2.5-py2.py3-none-any.whl
  • Upload date:
  • Size: 111.9 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.11

File hashes

Hashes for polygon-1.2.5-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 05f583ff5273d7d83529aea53aaa24e7aa2f66edc548a1e376868c2bded6cbf4
MD5 a1baaf0a6987577b6942bb83ea2b2614
BLAKE2b-256 326aeb17f113fa1f79a24177cc9a0beec038fe4cd9206bf1c3127f8c33c696e4

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page