mirror of
https://github.com/wassname/catalyst.git
synced 2026-06-28 15:55:02 +08:00
216 lines
6.3 KiB
Plaintext
216 lines
6.3 KiB
Plaintext
Release 0.7.0
|
|
-------------
|
|
|
|
:Release: 0.7.0
|
|
:Date: July 25, 2014
|
|
|
|
Highlights
|
|
~~~~~~~~~~
|
|
|
|
|
|
* Command line interface to run algorithms directly.
|
|
* IPython Magic ``%%zipline`` that runs algorithm defined in an IPython
|
|
notebook cell.
|
|
* API methods for building safeguards against runaway ordering and
|
|
undesired short positions.
|
|
* New history() function to get a moving DataFrame of past market data
|
|
(replaces BatchTransform).
|
|
* A new `beginner
|
|
tutorial <http://nbviewer.ipython.org/github/quantopian/zipline/blob/master/docs/tutorial.ipynb>`__.
|
|
|
|
|
|
Enhancements
|
|
~~~~~~~~~~~~
|
|
|
|
* CLI: Adds a CLI and IPython magic for zipline.
|
|
Example:
|
|
|
|
::
|
|
|
|
python run_algo.py -f dual_moving_avg.py --symbols AAPL --start 2011-1-1 --end 2012-1-1 -o dma.pickle
|
|
|
|
Grabs the data from yahoo finance, runs the file
|
|
dual\_moving\_avg.py (and looks for ``dual_moving_avg_analyze.py``
|
|
which, if found, will be executed after the algorithm has been run),
|
|
and outputs the perf ``DataFrame`` to ``dma.pickle`` (:issue:`325`).
|
|
|
|
- IPython magic command (at the top of an IPython notebook cell).
|
|
Example:
|
|
|
|
::
|
|
|
|
%%zipline --symbols AAPL --start 2011-1-1 --end 2012-1-1 -o perf
|
|
|
|
Does the same as above except instead of executing the file looks
|
|
for the algorithm in the cell and instead of outputting the perf df
|
|
to a file, creates a variable in the namespace called perf (:issue:`325`).
|
|
|
|
* Adds Trading Controls to the algorithm API.
|
|
|
|
The following functions are now available on ``TradingAlgorithm``
|
|
and for algo scripts:
|
|
|
|
``set_max_order_size(self, sid=None, max_shares=None, max_notional=None)``
|
|
Set a limit on the absolute magnitude, in shares and/or total
|
|
dollar value, of any single order placed by this algorithm for a
|
|
given sid. If ``sid`` is None, then the rule is applied to any order
|
|
placed by the algorithm.
|
|
Example:
|
|
|
|
.. code-block:: python
|
|
|
|
def initialize(context):
|
|
# Algorithm will raise an exception if we attempt to place an
|
|
# order which would cause us to hold more than 10 shares
|
|
# or 1000 dollars worth of sid(24).
|
|
set_max_order_size(sid(24), max_shares=10, max_notional=1000.0)
|
|
|
|
``set_max_position_size(self, sid=None, max_shares=None, max_notional=None)``
|
|
-Set a limit on the absolute magnitude, in either shares or
|
|
dollar value, of any position held by the algorithm for a given
|
|
sid. If ``sid`` is None, then the rule is applied to any position
|
|
held by the algorithm.
|
|
Example:
|
|
|
|
.. code-block:: python
|
|
|
|
def initialize(context):
|
|
# Algorithm will raise an exception if we attempt to order more than
|
|
# 10 shares or 1000 dollars worth of sid(24) in a single order.
|
|
set_max_order_size(sid(24), max_shares=10, max_notional=1000.0)
|
|
|
|
``set_max_order_count(self, max_count)``
|
|
Set a limit on the number of orders that can be placed by the algorithm in
|
|
a single trading day.
|
|
Example:
|
|
|
|
.. code-block:: python
|
|
|
|
def initialize(context):
|
|
# Algorithm will raise an exception if more than 50 orders are placed in a day.
|
|
set_max_order_count(50)
|
|
|
|
``set_long_only(self)``
|
|
Set a rule specifying that the
|
|
algorithm may not hold short positions.
|
|
Example:
|
|
|
|
.. code-block:: python
|
|
|
|
def initialize(context):
|
|
# Algorithm will raise an exception if it attempts to place
|
|
# an order that would cause it to hold a short position.
|
|
set_long_only()
|
|
|
|
(:issue:`329`).
|
|
|
|
* Adds an ``all_api_methods`` classmethod on ``TradingAlgorithm`` that
|
|
returns a list of all ``TradingAlgorithm`` API methods (:issue:`333`).
|
|
|
|
* Expanded record() functionality for dynamic naming.
|
|
The record() function can now take positional args before the
|
|
kwargs. All original usage and functionality is the same, but now
|
|
these extra usages will work:
|
|
|
|
.. code-block:: python
|
|
|
|
name = 'Dynamically_Generated_String'
|
|
record( name, value, ... )
|
|
record( name, value1, 'name2', value2, name3=value3, name4=value4 )
|
|
|
|
The requirements are simply that the poritional args occur only
|
|
before the kwargs (:issue:`355`).
|
|
|
|
* history() has been ported from Quantopian to Zipline and provides
|
|
moving window of market data.
|
|
history() replaces BatchTransform. It is faster, works for minute level data
|
|
and has a superior interface. To use it, call ``add_history()`` inside of
|
|
``initialize()`` and then receive a pandas ``DataFrame`` by calling history()
|
|
from inside ``handle_data()``. Check out the `tutorial
|
|
<http://nbviewer.ipython.org/github/quantopian/zipline/blob/master/docs/tutorial.ipynb>`__
|
|
and an `example
|
|
<https://github.com/quantopian/zipline/blob/master/zipline/examples/dual_moving_average.py>`__.
|
|
(:issue:`345` and :issue:`357`).
|
|
|
|
* history() now supports ``1m`` window lengths (:issue:`345`).
|
|
|
|
Bug Fixes
|
|
~~~~~~~~~
|
|
|
|
* Fix alignment of trading days and open and closes in trading
|
|
environment (:issue:`331`).
|
|
* RollingPanel fix when adding/dropping new fields (:issue:`349`).
|
|
|
|
Performance
|
|
~~~~~~~~~~~
|
|
|
|
None
|
|
|
|
Maintenance and Refactorings
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
* Removed undocumented and untested HDF5 and CSV data sources (:issue:`267`).
|
|
* Refactor sim\_params (:issue:`352`).
|
|
* Refactoring of history (:issue:`340`).
|
|
|
|
Build
|
|
~~~~~
|
|
|
|
* The following dependencies have been updated (zipline might work with
|
|
other versions too):
|
|
|
|
.. code-block:: diff
|
|
|
|
-pytz==2013.9
|
|
+pytz==2014.4
|
|
+numpy==1.8.1
|
|
-numpy==1.8.0
|
|
+scipy==0.12.0
|
|
+patsy==0.2.1
|
|
+statsmodels==0.5.0
|
|
-six==1.5.2
|
|
+six==1.6.1
|
|
-Cython==0.20
|
|
+Cython==0.20.1
|
|
-TA-Lib==0.4.8
|
|
+--allow-external TA-Lib --allow-unverified TA-Lib TA-Lib==0.4.8
|
|
-requests==2.2.0
|
|
+requests==2.3.0
|
|
-nose==1.3.0
|
|
+nose==1.3.3
|
|
-xlrd==0.9.2
|
|
+xlrd==0.9.3
|
|
-pep8==1.4.6
|
|
+pep8==1.5.7
|
|
-pyflakes==0.7.3
|
|
-pip-tools==0.3.4
|
|
+pyflakes==0.8.1`
|
|
-scipy==0.13.2
|
|
-tornado==3.2
|
|
-pyparsing==2.0.1
|
|
-patsy==0.2.1
|
|
-statsmodels==0.4.3
|
|
+tornado==3.2.1
|
|
+pyparsing==2.0.2
|
|
-Markdown==2.3.1
|
|
+Markdown==2.4.1
|
|
|
|
Contributors
|
|
~~~~~~~~~~~~
|
|
|
|
The following people have contributed to this release, ordered by
|
|
numbers of commit:
|
|
|
|
::
|
|
|
|
38 Scott Sanderson
|
|
29 Thomas Wiecki
|
|
26 Eddie Hebert
|
|
6 Delaney Granizo-Mackenzie
|
|
3 David Edwards
|
|
3 Richard Frank
|
|
2 Jonathan Kamens
|
|
1 Pankaj Garg
|
|
1 Tony Lambiris
|
|
1 fawce
|