Metadata-Version: 2.1
Name: zipline-norgatedata
Version: 0.9.1
Summary: Zipline extension to provide bundles of data from Norgate Data into the Zipline algorithmic trading library for the Python programming language
Home-page: https://norgatedata.com
Author: NorgateData Pty Ltd
Author-email: support@norgatedata.com
License: EULA
Platform: UNKNOWN
Classifier: Intended Audience :: Financial and Insurance Industry
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Win32 (MS Windows)
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: License :: Other/Proprietary License
Classifier: Operating System :: Microsoft :: Windows
Classifier: Topic :: Office/Business :: Financial :: Investment
Requires-Python: >=3.5.0,<3.6
Description-Content-Type: text/markdown
Requires-Dist: zipline
Requires-Dist: pandas
Requires-Dist: norgatedata
Requires-Dist: numpy


# Project description

Creates an interface between Norgate data and Zipline, the pythonic algorithmic trading library, to create bundles.

This is currently in alpha stage testing to selected users of Norgate Data.

Currently, equities are supported.  Futures data support is coming very soon.

# Installation

```sh
pip install zipline-norgatedata
```
or, if you prefer to use conda:
```sh
conda install -c norgatedata zipline-norgatedata
```

# Requirements

* Python 3.5 (Note: 3.6 and 3.7 will be supported only when Zipline supports this)
* Zipline 1.3
* Microsoft Windows
* An active Norgate Data subscription

# Usage

Add the following lines at the top of your extension.py file (typically located at c:\users\<username>\.zipline)

```py
from pandas import Timestamp
from norgatedata import StockPriceAdjustmentType
from zipline_norgatedata import register_norgatedata_equities_bundle,register_norgatedata_futures_bundle
```

Then create as many bundles as you desire.  These bundles will use one or more watchlists from your Norgate Data installation.

Here are some examples:

```py
bundlename = 'norgatedata-sp500-backtest'
watchlists = ['S&P 500 Current & Past']
stock_price_adjustment_setting = StockPriceAdjustmentType.TOTALRETURN
start_session = Timestamp("1990-01-01",tz='utc') 
end_session = Timestamp.now(tz='utc')
calendar_name = 'NYSE'
register_norgatedata_equities_bundle(bundlename,stock_price_adjustment_setting,watchlists,start_session,end_session,calendar_name)


bundlename = 'norgatedata-russell3000-backtest'
watchlists = ['Russell 3000 Current & Past','Russell 3000 indexes']
stock_price_adjustment_setting = StockPriceAdjustmentType.TOTALRETURN
start_session = Timestamp("1990-01-01",tz='utc') 
end_session = Timestamp.now(tz='utc')
calendar_name = 'NYSE'
register_norgatedata_equities_bundle(bundlename,stock_price_adjustment_setting,watchlists,start_session,end_session,calendar_name)


bundlename = 'norgatedata-cme-futures'
watchlists = ['CME Futures']
start_session = Timestamp("2000-01-01",tz='utc') # Start date of data ingestion - NOTE: zipline cannot handle dates prior to 1990
end_session = Timestamp.now(tz='utc')
calendar_name = 'us_futures'
register_norgatedata_futures_bundle(bundlename,watchlists,start_session,end_session,calendar_name)
```

Note:  You'll need to create your own watchlist(s) for use with futures as there's no default watchlists for futures.  This is done from within the Norgate Data Updater app.

In the above example, we also have a static watchlist called Russell 3000 indexes that contain $RUA and $RUATR.  This is useful for trading systems where you want to look at the overall index and not just the constituents.

# Metadata

The following fields are available in the metadata dataframe: start_date, end_date, ac_date, symbol, asset_name, exchange, exchange_full, asset_type, norgate_data_symbol, norgate_data_assetid.  

# Zipline Limitations

- Zipline can only handle equities data from 1990 onwards.
- Zipline can only handle futuress data from 2000 onwards.
- Zipline has unnecessarily complicated futures contracts by restricting symbols to 2 characters.  We hope they see the light and allow variable at least 5 characters.
- Zipline doesn't define all futures markets and doesn't provide any extensibility in this area - you will need to add them to site-packages\zipline\finance\constants.py if they are not defined.  Be sure to backup this file as it will be overwritten any time you update zipline.

# Assumptions
- Stocks are automatically set an auto_close_date of the last quoted date 
- Futures are automatically set an auto_close_date to the earlier of following: Last trading date (for cash settled futures, and physically delivered futures that only allow delivery after the last trading date), or 1 trading day prior to first notice date for futures that have a first notice date prior to the last trading date.

# Ingest data

To ingest data from one of the bundles you've defined in extension.py, you simply run 

```sh 
zipline ingest -b <bundlename>
```

For example:

```sh
zipline ingest -b norgatedata-sp500-backtest
zipline ingest -b norgatedata-russell3000-backtest
zipline ingest -b norgatedata-cme-futures

```

# Support

[Norgate Data support](https://norgatedata.com/contact.php)

# Thanks

Thanks to [Andreas Clenow](https://www.followingthetrend.com) for his pioneering work in documenting Zipline bundles in his latest book [Trading Evolved: Anyone can Build Killer Trading Strategies in Python](https://amzn.to/2SphnLr).  We used many of the techniques described in the book to build our bundles.


