diff --git a/catalyst/examples/buy_and_hodl.py b/catalyst/examples/buy_and_hodl.py index d0779145..35701a6e 100644 --- a/catalyst/examples/buy_and_hodl.py +++ b/catalyst/examples/buy_and_hodl.py @@ -101,7 +101,7 @@ def analyze(context=None, results=None): ax3 = plt.subplot(513, sharex=ax1) results[['leverage', 'alpha', 'beta']].plot(ax=ax3) - ax3.set_ylabel('Leverage (USD)') + ax3.set_ylabel('Leverage ') ax4 = plt.subplot(514, sharex=ax1) results[['starting_cash', 'cash']].plot(ax=ax4) @@ -123,7 +123,7 @@ def analyze(context=None, results=None): 'algorithm', 'benchmark', ]].plot(ax=ax5) - ax5.set_ylabel('Dollars (USD)') + ax5.set_ylabel('Percent Change') plt.legend(loc=3) diff --git a/catalyst/examples/buyapple.ipynb b/catalyst/examples/buyapple.ipynb deleted file mode 100644 index ea7ac392..00000000 --- a/catalyst/examples/buyapple.ipynb +++ /dev/null @@ -1,2225 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "%load_ext catalyst" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\nIdq3zzytft8+qXRpG29+OnzYJtnDh0s//yz17GnNEGNipJNPtoaXo0dbyv4HH9jSjIXVoUOWkTJ+\nvJU/tGtn25o2tUn7/fdnbEq5dKkFn6pWzfyae/bYd3DtWjv/xx/D8x1fv96yXubPt2yeq6+27031\n6tYjJDelOQAAoHjIdTDBOTdSUhdJv3nvM71n5pwbIulKSYck9fLeL0ne3knSK5JKShruvf9XJucS\nTACQpe+/t7uzVataAOGmm2xSGmnTp1uw4IMPrPnhgQM2Ia5a1Sbo111nZQPZeeEF62EwfnzGfR06\nWB37n/8cmfEXBGvXWlChRAkLwDhnJSAffCCNGGGBhqJo1Sor+VixwkpKeve2sofffrMsjB49pP/8\nJ+N5q1dbkOX33+079tJL9t0HAACIprwEEy6UdFDSe5kFE5xznSX18953ds61kfSq976tc66kpNWS\nOkraKmmhpB7e+5/TnU8wAShmdu60idLkyXZX9PzzrTa8bVtLhd+61VL59+61O79vv213UvPbrFnW\n9+Ddd20s778v/e1vthThxx/bnf/sHDhgS+yNHGmZBwEbNli5wZYtuV9OsbA6cMBWJOjSJdojibwl\nSyxoMGGCBQn27bPv+2efWaChVq2UY7/91gJLzz1nzUHHjrVMAnoYAACAaMtTmYNzro6kL7IIJrwp\naab3/oPk56skxUmqK+lJ732n5O1/kyTv/fPpzieYABQDCQlWaz59ugUSrr3W7vzv2WNp/t99Z3fx\nK1SQjh2z9P/69S3A0KxZ9MY9b571QjjpJAsk3HZbaOdPm2YZCP372+8gIcFSzevXt4AJir49e6zX\nxaxZtvrCwIFWdvDii9bLYswYW95y3Li8L9UJAAAQbpEMJnwh6Tnv/dzk519LelRSHUmdvPe9k7ff\nIqmN975/uvOjGkxISrJHZvWiR4/a/wQmJqZ9HD5s63Fn92dWjyNHbDm2Ro2svrZevezrVZOSpO3b\n7a7ovn3255Ej1s39+HGrp5050xq9lSlj165c2f5M/XOjRpaivXSpXefYMXscP253hGNiQvu9JSTY\nnbRff5XKlbO7q4FH6uennmqTsPwyfbrdyT540GqX//jDHkeOWP366afbne82baz52MaNUo0aVjtc\ns6ZNZDdtsjvHpUrZ0oEnnGC/p6NH7Xd29Kh9Jjt3WsryaafZ51GxYuTe15EjVne+fr3VYwc+69jY\n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\nQ4KmXy5JD71PJD30PpH00PtE0kPvE0kPvU8kPfQ+yX4CDiZ47/8FzkmyrV0a+78OvB740iQ30C99\n3qSfe96ln33epZ993qOfed6kn3vepZ+9JOXCnSjgnFOygoiIiIiIiEg25JzDh7ABo4iIiIiIiIjk\nUQomiIiIiIiIiEhAFEwQERERERERkYAomCAiIiIiIiIiAVEwQUREREREREQComCCiIiIiIiIiARE\nwQQRERERERERCYiCCSIiIiIiIiISEAUTRERERERERCQgCiaIiIiIiIiISEACCiY45y52zi1J8LHP\nOdfFOVfcOTfNObfGOfe9c65YgmN6OOfWOudWO+cahf4liIiIiIiIiEhWct774A507hTgL6AO0BnY\n5b3v55x7DjjLe9/dOVcV+BSoDZQBpgOVvfcnEpzHB7sGEREREREREck8zjm89y7p9oyUOTQE1nnv\nNwPNgJGx20cCLWI/bw6M8d4f995vBNZhwQcRERERERERyaHyZ+DYNsCY2M9LeO+3x36+HSgR+3lp\nYF6CY7ZgGQoiIiIiIiKSyWbMgG+/hQIF4MUX4fTTw70iyS2Cykxwzp0G3AZ8lvSx2JqFtOoWVNMg\nIiIiIiKSiQ4fhg4d4P774eyzYdkyaNkSnnsOOneGo0fDvULJ6YLNTGgM/OK93xn79XbnXEnv/d/O\nuVLAjtjtfwHnJziubOy2RCIjI///84iICCIiIoJcloiIiIiISN62bRs0bw4VKsDKlXDmmXD8ODz9\nNERHw9at0KQJfPklFC4c7tVKdhMVFUVUVNRJ9wuqAaNzbiww2Xs/MvbrfsA/3vs3nHPdgWJJGjDW\nIb4BY8WEHRfVgFFERERERCQ0liyxQMLDD8MLL4BL1jYPYmLg8cdh0SKYPBnOPTfr1yk5R2oNGAMO\nJjjnCgF/AuW99wditxUHxgPlgI3And77vbGPPQ90AKKBJ7z3U5OcT8EEERERERGRDPriCwsiDBkC\nrVunva/30LMnjBsH338PF1yQNWuUnCdkwYRQUzBBREREREQkY7ZuherVYdo0uPLK9B83YAD873+w\neHHmrU1yNgUTREREREREcqlevSygMGRIYMcdPw5Fi8KOHdZbQSSp1IIJQU1zEBERERERkewhOho+\n/BA6dgz82FNPtYyGZctCvy7J3RRMEBERERERycG+/x7KloXLLgvu+CuvhF9+if/6339Dsy7J3RRM\n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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
AAPLalgo_volatilityalgorithm_period_returnalphabenchmark_period_returnbenchmark_volatilitybetacapital_usedending_cashending_exposure...short_exposureshort_valueshorts_countsortinostarting_cashstarting_exposurestarting_valuetrading_daystransactionstreasury_period_return
2011-01-03 21:00:00+00:00329.570NaN0.000000e+00NaN0.011315NaNNaN0.0010000000.000.00...000NaN10000000.000.000.001[]0.0336
2011-01-04 21:00:00+00:00331.2900.000001-1.000000e-07-0.0000230.0099870.1417480.000008-3313.909996686.103312.90...000-11.22497210000000.000.000.002[{u'commission': None, u'amount': 10, u'sid': ...0.0336
2011-01-05 21:00:00+00:00334.0000.0000242.510000e-060.0002010.0150440.1002310.000008-3341.009993345.106680.00...000230.0453249996686.103312.903312.903[{u'commission': None, u'amount': 10, u'sid': ...0.0350
2011-01-06 21:00:00+00:00333.7300.0000231.870000e-060.0000590.0128890.0994810.000072-3338.309990006.8010011.90...00022.9137229993345.106680.006680.004[{u'commission': None, u'amount': 10, u'sid': ...0.0344
2011-01-07 21:00:00+00:00336.1200.0000518.940000e-060.0005240.0110210.093360-0.000132-3362.209986644.6013444.80...00097.9795779990006.8010011.9010011.905[{u'commission': None, u'amount': 10, u'sid': ...0.0334
2011-01-10 21:00:00+00:00342.4550.0001593.418000e-050.0016760.0096290.086675-0.000592-3425.559983219.0517122.75...000341.9613459986644.6013444.8013444.806[{u'commission': None, u'amount': 10, u'sid': ...0.0332
2011-01-11 21:00:00+00:00341.6400.0001563.000500e-050.0014150.0133900.080133-0.000694-3417.409979801.6520498.40...00042.6124199983219.0517122.7517122.757[{u'commission': None, u'amount': 10, u'sid': ...0.0337
2011-01-12 21:00:00+00:00344.4200.0001604.658500e-050.0015740.0225180.084200-0.000152-3445.209976356.4524109.40...00061.8854479979801.6520498.4020498.408[{u'commission': None, u'amount': 10, u'sid': ...0.0340
2011-01-13 21:00:00+00:00345.6800.0001515.530500e-050.0016600.0207690.082298-0.000193-3457.809972898.6527654.40...00069.2672989976356.4524109.4024109.409[{u'commission': None, u'amount': 10, u'sid': ...0.0334
2011-01-14 21:00:00+00:00348.4800.0001647.760500e-050.0018590.0283070.0816840.000136-3485.809969412.8531363.20...00092.2083319972898.6527654.4027654.4010[{u'commission': None, u'amount': 10, u'sid': ...0.0335
2011-01-18 21:00:00+00:00340.6500.0004067.035000e-06-0.0002160.0297220.0777940.000559-3407.509966005.3534065.00...0000.4765469969412.8531363.2031363.2011[{u'commission': None, u'amount': 10, u'sid': ...0.0339
2011-01-19 21:00:00+00:00338.8400.000396-1.116500e-05-0.0006040.0193060.0945440.000911-3389.409962615.9537272.40...000-0.7007089966005.3534065.0034065.0012[{u'commission': None, u'amount': 10, u'sid': ...0.0337
2011-01-20 21:00:00+00:00332.6800.000481-7.902500e-05-0.0020020.0179860.0914180.001344-3327.809959288.1539921.60...000-3.4908189962615.9537272.4037272.4013[{u'commission': None, u'amount': 10, u'sid': ...0.0347
2011-01-21 21:00:00+00:00326.7200.000539-1.506450e-04-0.0031480.0204430.0879400.001184-3268.209956019.9542473.60...000-5.2075469959288.1539921.6039921.6014[{u'commission': None, u'amount': 10, u'sid': ...0.0344
2011-01-24 21:00:00+00:00337.4500.000805-1.125500e-05-0.0013390.0263990.0866180.002605-3375.509952644.4547243.00...000-0.3752679956019.9542473.6042473.6015[{u'commission': None, u'amount': 10, u'sid': ...0.0343
2011-01-25 21:00:00+00:00341.4000.0008094.394500e-05-0.0003130.0266690.0838890.002405-3415.009949229.4551210.00...0001.4215659952644.4547243.0047243.0016[{u'commission': None, u'amount': 10, u'sid': ...0.0335
2011-01-26 21:00:00+00:00343.8500.0007948.059500e-050.0000260.0310030.0818220.002563-3439.509945789.9555016.00...0002.5287669949229.4551210.0051210.0017[{u'commission': None, u'amount': 10, u'sid': ...0.0345
2011-01-27 21:00:00+00:00343.2100.0007737.025500e-05-0.0001930.0333160.0793960.002547-3433.109942356.8558345.70...0002.1347609945789.9555016.0055016.0018[{u'commission': None, u'amount': 10, u'sid': ...0.0342
2011-01-28 21:00:00+00:00336.1000.000878-5.071500e-05-0.0015380.0148690.1053270.004306-3362.009938994.8560498.00...000-1.0693249942356.8558345.7058345.7019[{u'commission': None, u'amount': 10, u'sid': ...0.0336
2011-01-31 21:00:00+00:00339.3200.0008817.145000e-06-0.0012170.0226460.1053740.004547-3394.209935600.6564470.80...0000.1475159938994.8560498.0060498.0020[{u'commission': None, u'amount': 10, u'sid': ...0.0342
2011-02-01 21:00:00+00:00345.0300.0009371.155350e-04-0.0010150.0397170.1159780.005065-3451.309932149.3569006.00...0002.3189219935600.6564470.8064470.8021[{u'commission': None, u'amount': 10, u'sid': ...0.0348
2011-02-02 21:00:00+00:00344.3200.0009171.012350e-04-0.0009690.0368870.1142510.005050-3444.209928705.1572307.20...0001.9785149932149.3569006.0069006.0022[{u'commission': None, u'amount': 10, u'sid': ...0.0352
2011-02-03 21:00:00+00:00343.4400.0008998.265500e-05-0.0012540.0393280.1116470.005035-3435.409925269.7575556.80...0001.5710159928705.1572307.2072307.2023[{u'commission': None, u'amount': 10, u'sid': ...0.0358
2011-02-04 21:00:00+00:00346.5000.0009031.498750e-04-0.0006750.0423250.1092600.005094-3466.009921803.7579695.00...0002.7880939925269.7575556.8075556.8024[{u'commission': None, u'amount': 10, u'sid': ...0.0368
2011-02-07 21:00:00+00:00351.8800.0009592.735150e-040.0000990.0488300.1079050.005462-3519.809918283.9584451.20...0004.9846069921803.7579695.0079695.0025[{u'commission': None, u'amount': 10, u'sid': ...0.0368
2011-02-08 21:00:00+00:00355.2000.0009643.530950e-040.0005890.0532190.1059570.005571-3553.009914730.9588800.00...0006.3095019918283.9584451.2084451.2026[{u'commission': None, u'amount': 10, u'sid': ...0.0375
2011-02-09 21:00:00+00:00358.1600.0009634.269950e-040.0015660.0502850.1049310.005217-3582.609911148.3593121.60...0007.4869939914730.9588800.0088800.0027[{u'commission': None, u'amount': 10, u'sid': ...0.0365
2011-02-10 21:00:00+00:00354.5400.0010013.327750e-040.0005840.0510720.1030210.005313-3546.409907601.9595725.80...0005.0409089911148.3593121.6093121.6028[{u'commission': None, u'amount': 10, u'sid': ...0.0370
2011-02-11 21:00:00+00:00356.8500.0009943.950450e-040.0008040.0568600.1017530.005409-3569.509904032.4599918.00...0005.8797909907601.9595725.8095725.8029[{u'commission': None, u'amount': 10, u'sid': ...0.0364
2011-02-14 21:00:00+00:00359.1800.0009884.601850e-040.0012060.0593810.0999920.005427-3592.809900439.65104162.20...0006.7338749904032.4599918.0099918.0030[{u'commission': None, u'amount': 10, u'sid': ...0.0362
..................................................................
2012-11-16 21:00:00+00:00527.6780.0400482.943771e-020.0111450.0812950.1910820.085310-5277.787803736.932490640.16...0000.5812077809014.712475670.202475670.20473[{u'commission': None, u'amount': 10, u'sid': ...0.0158
2012-11-19 21:00:00+00:00565.7300.0419654.739815e-020.0191820.1027720.1914160.089783-5658.307798078.632675902.90...0000.9125427803736.932490640.162490640.16474[{u'commission': None, u'amount': 10, u'sid': ...0.0161
2012-11-20 21:00:00+00:00560.9130.0419544.511961e-020.0179570.1035030.1912140.089770-5610.137792468.502658727.62...0000.8688367798078.632675902.902675902.90475[{u'commission': None, u'amount': 10, u'sid': ...0.0166
2012-11-21 21:00:00+00:00561.7000.0419104.549255e-020.0179970.1060640.1910180.089773-5618.007786850.502668075.00...0000.8746877792468.502658727.622658727.62476[{u'commission': None, u'amount': 10, u'sid': ...0.0169
2012-11-23 18:00:00+00:00571.5000.0419865.014745e-020.0196480.1204720.1910420.090365-5716.007781134.502720340.00...0000.9580797786850.502668075.002668075.00477[{u'commission': None, u'amount': 10, u'sid': ...0.0170
2012-11-26 21:00:00+00:00589.5300.0423495.872963e-020.0240330.1181980.1908500.090085-5896.307775238.202812058.10...0001.1116657781134.502720340.002720340.00478[{u'commission': None, u'amount': 10, u'sid': ...0.0166
2012-11-27 21:00:00+00:00584.7800.0423365.646378e-020.0230940.1123530.1906920.090226-5848.807769389.402795248.40...0001.0684037775238.202812058.102812058.10479[{u'commission': None, u'amount': 10, u'sid': ...0.0164
2012-11-28 21:00:00+00:00582.9400.0422975.558416e-020.0222510.1210920.1905720.090047-5830.407763559.002792282.60...0001.0513517769389.402795248.402795248.40480[{u'commission': None, u'amount': 10, u'sid': ...0.0163
2012-11-29 21:00:00+00:00589.3600.0423025.865924e-020.0235180.1258790.1903950.090187-5894.607757664.402828928.00...0001.1050937763559.002792282.602792282.60481[{u'commission': None, u'amount': 10, u'sid': ...0.0162
2012-11-30 21:00:00+00:00585.2800.0422825.670074e-020.0224940.1260620.1901970.090191-5853.807751810.602815196.80...0001.0679247757664.402828928.002828928.00482[{u'commission': None, u'amount': 10, u'sid': ...0.0162
2012-12-03 21:00:00+00:00586.1900.0422395.713835e-020.0228910.1207180.1900340.090136-5862.907745947.702825435.80...0001.0745887751810.602815196.802815196.80483[{u'commission': None, u'amount': 10, u'sid': ...0.0163
2012-12-04 21:00:00+00:00575.8450.0423395.215196e-020.0204580.1188020.1898430.090272-5759.457740188.252781331.35...0000.9777567745947.702825435.802825435.80484[{u'commission': None, u'amount': 10, u'sid': ...0.0162
2012-12-05 21:00:00+00:00538.7920.0440583.425526e-020.0115280.1205750.1896490.089953-5388.927734799.332607753.28...0000.6050027740188.252781331.352781331.35485[{u'commission': None, u'amount': 10, u'sid': ...0.0160
2012-12-06 21:00:00+00:00547.2440.0441013.834593e-020.0133890.1242800.1894660.090110-5473.447729325.892654133.40...0000.6716277734799.332607753.282607753.28486[{u'commission': None, u'amount': 10, u'sid': ...0.0159
2012-12-07 21:00:00+00:00533.2500.0443123.155874e-020.0098630.1275640.1892800.089851-5333.507723992.392591595.00...0000.5533617729325.892654133.402654133.40487[{u'commission': None, u'amount': 10, u'sid': ...0.0164
2012-12-10 21:00:00+00:00529.8200.0442842.989166e-020.0089930.1279460.1890860.089851-5299.207718693.192580223.40...0000.5253207723992.392591595.002591595.00488[{u'commission': None, u'amount': 10, u'sid': ...0.0163
2012-12-11 21:00:00+00:00541.3880.0444083.552517e-020.0114540.1353330.1889450.090287-5414.887713278.312641973.44...0000.6163517718693.192580223.402580223.40489[{u'commission': None, u'amount': 10, u'sid': ...0.0166
2012-12-12 21:00:00+00:00539.0000.0443713.435973e-020.0108310.1358420.1887520.090285-5391.007707887.312635710.00...0000.5966967713278.312641973.442641973.44490[{u'commission': None, u'amount': 10, u'sid': ...0.0172
2012-12-13 21:00:00+00:00529.6900.0444412.980704e-020.0088130.1286620.1886190.090656-5297.907702589.412595481.00...0000.5198537707887.312635710.002635710.00491[{u'commission': None, u'amount': 10, u'sid': ...0.0174
2012-12-14 21:00:00+00:00509.7940.0449172.005790e-020.0040930.1239940.1884540.091242-5098.947697490.472503088.54...0000.3537857702589.412595481.002595481.00492[{u'commission': None, u'amount': 10, u'sid': ...0.0172
2012-12-17 21:00:00+00:00518.8300.0449772.449448e-020.0057090.1373370.1884440.091783-5189.307692301.172552643.60...0000.4238587697490.472503088.542503088.54493[{u'commission': None, u'amount': 10, u'sid': ...0.0178
2012-12-18 21:00:00+00:00533.9000.0452233.190882e-020.0087630.1504010.1884210.092771-5340.007686961.172632127.00...0000.5405047692301.172552643.602552643.60494[{u'commission': None, u'amount': 10, u'sid': ...0.0184
2012-12-19 21:00:00+00:00526.3100.0452542.816685e-020.0072290.1416700.1883150.093108-5264.107681697.072599971.40...0000.4797397686961.172632127.002632127.00495[{u'commission': None, u'amount': 10, u'sid': ...0.0182
2012-12-20 21:00:00+00:00521.7300.0452372.590423e-020.0058550.1479360.1881610.092905-5218.307676478.772582563.50...0000.4432997681697.072599971.402599971.40496[{u'commission': None, u'amount': 10, u'sid': ...0.0181
2012-12-21 21:00:00+00:00519.3300.0452002.471613e-020.0056940.1371700.1880990.092949-5194.307671284.472575876.80...0000.4241167676478.772582563.502582563.50497[{u'commission': None, u'amount': 10, u'sid': ...0.0177
2012-12-24 18:00:00+00:00520.1680.0451552.513167e-020.0060040.1343950.1879200.092924-5202.687666081.792585234.96...0000.4301927671284.472575876.802575876.80498[{u'commission': None, u'amount': 10, u'sid': ...0.0179
2012-12-26 21:00:00+00:00512.9990.0451792.156858e-020.0044440.1289640.1877660.093148-5130.997660950.802554735.02...0000.3729487666081.792585234.962585234.96499[{u'commission': None, u'amount': 10, u'sid': ...0.0177
2012-12-27 21:00:00+00:00515.0590.0451392.259436e-020.0050000.1275880.1875810.093124-5151.597655799.212570144.41...0000.3885927660950.802554735.022554735.02500[{u'commission': None, u'amount': 10, u'sid': ...0.0174
2012-12-28 21:00:00+00:00509.5890.0451351.986473e-020.0041460.1151280.1875660.093394-5096.897650702.322547945.00...0000.3450467655799.212570144.412570144.41501[{u'commission': None, u'amount': 10, u'sid': ...0.0173
2012-12-31 21:00:00+00:00532.1720.0457623.115613e-020.0087190.1340210.1877500.095640-5322.727645379.602666181.72...0000.5206447650702.322547945.002547945.00502[{u'commission': None, u'amount': 10, u'sid': ...0.0178
\n", - "

502 rows × 39 columns

\n", - "
" - ], - "text/plain": [ - " AAPL algo_volatility algorithm_period_return \\\n", - "2011-01-03 21:00:00+00:00 329.570 NaN 0.000000e+00 \n", - "2011-01-04 21:00:00+00:00 331.290 0.000001 -1.000000e-07 \n", - "2011-01-05 21:00:00+00:00 334.000 0.000024 2.510000e-06 \n", - "2011-01-06 21:00:00+00:00 333.730 0.000023 1.870000e-06 \n", - "2011-01-07 21:00:00+00:00 336.120 0.000051 8.940000e-06 \n", - "2011-01-10 21:00:00+00:00 342.455 0.000159 3.418000e-05 \n", - "2011-01-11 21:00:00+00:00 341.640 0.000156 3.000500e-05 \n", - "2011-01-12 21:00:00+00:00 344.420 0.000160 4.658500e-05 \n", - "2011-01-13 21:00:00+00:00 345.680 0.000151 5.530500e-05 \n", - "2011-01-14 21:00:00+00:00 348.480 0.000164 7.760500e-05 \n", - "2011-01-18 21:00:00+00:00 340.650 0.000406 7.035000e-06 \n", - "2011-01-19 21:00:00+00:00 338.840 0.000396 -1.116500e-05 \n", - "2011-01-20 21:00:00+00:00 332.680 0.000481 -7.902500e-05 \n", - "2011-01-21 21:00:00+00:00 326.720 0.000539 -1.506450e-04 \n", - "2011-01-24 21:00:00+00:00 337.450 0.000805 -1.125500e-05 \n", - "2011-01-25 21:00:00+00:00 341.400 0.000809 4.394500e-05 \n", - "2011-01-26 21:00:00+00:00 343.850 0.000794 8.059500e-05 \n", - "2011-01-27 21:00:00+00:00 343.210 0.000773 7.025500e-05 \n", - "2011-01-28 21:00:00+00:00 336.100 0.000878 -5.071500e-05 \n", - "2011-01-31 21:00:00+00:00 339.320 0.000881 7.145000e-06 \n", - "2011-02-01 21:00:00+00:00 345.030 0.000937 1.155350e-04 \n", - "2011-02-02 21:00:00+00:00 344.320 0.000917 1.012350e-04 \n", - "2011-02-03 21:00:00+00:00 343.440 0.000899 8.265500e-05 \n", - "2011-02-04 21:00:00+00:00 346.500 0.000903 1.498750e-04 \n", - "2011-02-07 21:00:00+00:00 351.880 0.000959 2.735150e-04 \n", - "2011-02-08 21:00:00+00:00 355.200 0.000964 3.530950e-04 \n", - "2011-02-09 21:00:00+00:00 358.160 0.000963 4.269950e-04 \n", - "2011-02-10 21:00:00+00:00 354.540 0.001001 3.327750e-04 \n", - "2011-02-11 21:00:00+00:00 356.850 0.000994 3.950450e-04 \n", - "2011-02-14 21:00:00+00:00 359.180 0.000988 4.601850e-04 \n", - "... ... ... ... \n", - "2012-11-16 21:00:00+00:00 527.678 0.040048 2.943771e-02 \n", - "2012-11-19 21:00:00+00:00 565.730 0.041965 4.739815e-02 \n", - "2012-11-20 21:00:00+00:00 560.913 0.041954 4.511961e-02 \n", - "2012-11-21 21:00:00+00:00 561.700 0.041910 4.549255e-02 \n", - "2012-11-23 18:00:00+00:00 571.500 0.041986 5.014745e-02 \n", - "2012-11-26 21:00:00+00:00 589.530 0.042349 5.872963e-02 \n", - "2012-11-27 21:00:00+00:00 584.780 0.042336 5.646378e-02 \n", - "2012-11-28 21:00:00+00:00 582.940 0.042297 5.558416e-02 \n", - "2012-11-29 21:00:00+00:00 589.360 0.042302 5.865924e-02 \n", - "2012-11-30 21:00:00+00:00 585.280 0.042282 5.670074e-02 \n", - "2012-12-03 21:00:00+00:00 586.190 0.042239 5.713835e-02 \n", - "2012-12-04 21:00:00+00:00 575.845 0.042339 5.215196e-02 \n", - "2012-12-05 21:00:00+00:00 538.792 0.044058 3.425526e-02 \n", - "2012-12-06 21:00:00+00:00 547.244 0.044101 3.834593e-02 \n", - "2012-12-07 21:00:00+00:00 533.250 0.044312 3.155874e-02 \n", - "2012-12-10 21:00:00+00:00 529.820 0.044284 2.989166e-02 \n", - "2012-12-11 21:00:00+00:00 541.388 0.044408 3.552517e-02 \n", - "2012-12-12 21:00:00+00:00 539.000 0.044371 3.435973e-02 \n", - "2012-12-13 21:00:00+00:00 529.690 0.044441 2.980704e-02 \n", - "2012-12-14 21:00:00+00:00 509.794 0.044917 2.005790e-02 \n", - "2012-12-17 21:00:00+00:00 518.830 0.044977 2.449448e-02 \n", - "2012-12-18 21:00:00+00:00 533.900 0.045223 3.190882e-02 \n", - "2012-12-19 21:00:00+00:00 526.310 0.045254 2.816685e-02 \n", - "2012-12-20 21:00:00+00:00 521.730 0.045237 2.590423e-02 \n", - "2012-12-21 21:00:00+00:00 519.330 0.045200 2.471613e-02 \n", - "2012-12-24 18:00:00+00:00 520.168 0.045155 2.513167e-02 \n", - "2012-12-26 21:00:00+00:00 512.999 0.045179 2.156858e-02 \n", - "2012-12-27 21:00:00+00:00 515.059 0.045139 2.259436e-02 \n", - "2012-12-28 21:00:00+00:00 509.589 0.045135 1.986473e-02 \n", - "2012-12-31 21:00:00+00:00 532.172 0.045762 3.115613e-02 \n", - "\n", - " alpha benchmark_period_return \\\n", - "2011-01-03 21:00:00+00:00 NaN 0.011315 \n", - "2011-01-04 21:00:00+00:00 -0.000023 0.009987 \n", - "2011-01-05 21:00:00+00:00 0.000201 0.015044 \n", - "2011-01-06 21:00:00+00:00 0.000059 0.012889 \n", - "2011-01-07 21:00:00+00:00 0.000524 0.011021 \n", - "2011-01-10 21:00:00+00:00 0.001676 0.009629 \n", - "2011-01-11 21:00:00+00:00 0.001415 0.013390 \n", - "2011-01-12 21:00:00+00:00 0.001574 0.022518 \n", - "2011-01-13 21:00:00+00:00 0.001660 0.020769 \n", - "2011-01-14 21:00:00+00:00 0.001859 0.028307 \n", - "2011-01-18 21:00:00+00:00 -0.000216 0.029722 \n", - "2011-01-19 21:00:00+00:00 -0.000604 0.019306 \n", - "2011-01-20 21:00:00+00:00 -0.002002 0.017986 \n", - "2011-01-21 21:00:00+00:00 -0.003148 0.020443 \n", - "2011-01-24 21:00:00+00:00 -0.001339 0.026399 \n", - "2011-01-25 21:00:00+00:00 -0.000313 0.026669 \n", - "2011-01-26 21:00:00+00:00 0.000026 0.031003 \n", - "2011-01-27 21:00:00+00:00 -0.000193 0.033316 \n", - "2011-01-28 21:00:00+00:00 -0.001538 0.014869 \n", - "2011-01-31 21:00:00+00:00 -0.001217 0.022646 \n", - "2011-02-01 21:00:00+00:00 -0.001015 0.039717 \n", - "2011-02-02 21:00:00+00:00 -0.000969 0.036887 \n", - "2011-02-03 21:00:00+00:00 -0.001254 0.039328 \n", - "2011-02-04 21:00:00+00:00 -0.000675 0.042325 \n", - "2011-02-07 21:00:00+00:00 0.000099 0.048830 \n", - "2011-02-08 21:00:00+00:00 0.000589 0.053219 \n", - "2011-02-09 21:00:00+00:00 0.001566 0.050285 \n", - "2011-02-10 21:00:00+00:00 0.000584 0.051072 \n", - "2011-02-11 21:00:00+00:00 0.000804 0.056860 \n", - "2011-02-14 21:00:00+00:00 0.001206 0.059381 \n", - "... ... ... \n", - "2012-11-16 21:00:00+00:00 0.011145 0.081295 \n", - "2012-11-19 21:00:00+00:00 0.019182 0.102772 \n", - "2012-11-20 21:00:00+00:00 0.017957 0.103503 \n", - "2012-11-21 21:00:00+00:00 0.017997 0.106064 \n", - "2012-11-23 18:00:00+00:00 0.019648 0.120472 \n", - "2012-11-26 21:00:00+00:00 0.024033 0.118198 \n", - "2012-11-27 21:00:00+00:00 0.023094 0.112353 \n", - "2012-11-28 21:00:00+00:00 0.022251 0.121092 \n", - "2012-11-29 21:00:00+00:00 0.023518 0.125879 \n", - "2012-11-30 21:00:00+00:00 0.022494 0.126062 \n", - "2012-12-03 21:00:00+00:00 0.022891 0.120718 \n", - "2012-12-04 21:00:00+00:00 0.020458 0.118802 \n", - "2012-12-05 21:00:00+00:00 0.011528 0.120575 \n", - "2012-12-06 21:00:00+00:00 0.013389 0.124280 \n", - "2012-12-07 21:00:00+00:00 0.009863 0.127564 \n", - "2012-12-10 21:00:00+00:00 0.008993 0.127946 \n", - "2012-12-11 21:00:00+00:00 0.011454 0.135333 \n", - "2012-12-12 21:00:00+00:00 0.010831 0.135842 \n", - "2012-12-13 21:00:00+00:00 0.008813 0.128662 \n", - "2012-12-14 21:00:00+00:00 0.004093 0.123994 \n", - "2012-12-17 21:00:00+00:00 0.005709 0.137337 \n", - "2012-12-18 21:00:00+00:00 0.008763 0.150401 \n", - "2012-12-19 21:00:00+00:00 0.007229 0.141670 \n", - "2012-12-20 21:00:00+00:00 0.005855 0.147936 \n", - "2012-12-21 21:00:00+00:00 0.005694 0.137170 \n", - "2012-12-24 18:00:00+00:00 0.006004 0.134395 \n", - "2012-12-26 21:00:00+00:00 0.004444 0.128964 \n", - "2012-12-27 21:00:00+00:00 0.005000 0.127588 \n", - "2012-12-28 21:00:00+00:00 0.004146 0.115128 \n", - "2012-12-31 21:00:00+00:00 0.008719 0.134021 \n", - "\n", - " benchmark_volatility beta capital_used \\\n", - "2011-01-03 21:00:00+00:00 NaN NaN 0.00 \n", - "2011-01-04 21:00:00+00:00 0.141748 0.000008 -3313.90 \n", - "2011-01-05 21:00:00+00:00 0.100231 0.000008 -3341.00 \n", - "2011-01-06 21:00:00+00:00 0.099481 0.000072 -3338.30 \n", - "2011-01-07 21:00:00+00:00 0.093360 -0.000132 -3362.20 \n", - "2011-01-10 21:00:00+00:00 0.086675 -0.000592 -3425.55 \n", - "2011-01-11 21:00:00+00:00 0.080133 -0.000694 -3417.40 \n", - "2011-01-12 21:00:00+00:00 0.084200 -0.000152 -3445.20 \n", - "2011-01-13 21:00:00+00:00 0.082298 -0.000193 -3457.80 \n", - "2011-01-14 21:00:00+00:00 0.081684 0.000136 -3485.80 \n", - "2011-01-18 21:00:00+00:00 0.077794 0.000559 -3407.50 \n", - "2011-01-19 21:00:00+00:00 0.094544 0.000911 -3389.40 \n", - "2011-01-20 21:00:00+00:00 0.091418 0.001344 -3327.80 \n", - "2011-01-21 21:00:00+00:00 0.087940 0.001184 -3268.20 \n", - "2011-01-24 21:00:00+00:00 0.086618 0.002605 -3375.50 \n", - "2011-01-25 21:00:00+00:00 0.083889 0.002405 -3415.00 \n", - "2011-01-26 21:00:00+00:00 0.081822 0.002563 -3439.50 \n", - "2011-01-27 21:00:00+00:00 0.079396 0.002547 -3433.10 \n", - "2011-01-28 21:00:00+00:00 0.105327 0.004306 -3362.00 \n", - "2011-01-31 21:00:00+00:00 0.105374 0.004547 -3394.20 \n", - "2011-02-01 21:00:00+00:00 0.115978 0.005065 -3451.30 \n", - "2011-02-02 21:00:00+00:00 0.114251 0.005050 -3444.20 \n", - "2011-02-03 21:00:00+00:00 0.111647 0.005035 -3435.40 \n", - "2011-02-04 21:00:00+00:00 0.109260 0.005094 -3466.00 \n", - "2011-02-07 21:00:00+00:00 0.107905 0.005462 -3519.80 \n", - "2011-02-08 21:00:00+00:00 0.105957 0.005571 -3553.00 \n", - "2011-02-09 21:00:00+00:00 0.104931 0.005217 -3582.60 \n", - "2011-02-10 21:00:00+00:00 0.103021 0.005313 -3546.40 \n", - "2011-02-11 21:00:00+00:00 0.101753 0.005409 -3569.50 \n", - "2011-02-14 21:00:00+00:00 0.099992 0.005427 -3592.80 \n", - "... ... ... ... \n", - "2012-11-16 21:00:00+00:00 0.191082 0.085310 -5277.78 \n", - "2012-11-19 21:00:00+00:00 0.191416 0.089783 -5658.30 \n", - "2012-11-20 21:00:00+00:00 0.191214 0.089770 -5610.13 \n", - "2012-11-21 21:00:00+00:00 0.191018 0.089773 -5618.00 \n", - "2012-11-23 18:00:00+00:00 0.191042 0.090365 -5716.00 \n", - "2012-11-26 21:00:00+00:00 0.190850 0.090085 -5896.30 \n", - "2012-11-27 21:00:00+00:00 0.190692 0.090226 -5848.80 \n", - "2012-11-28 21:00:00+00:00 0.190572 0.090047 -5830.40 \n", - "2012-11-29 21:00:00+00:00 0.190395 0.090187 -5894.60 \n", - "2012-11-30 21:00:00+00:00 0.190197 0.090191 -5853.80 \n", - "2012-12-03 21:00:00+00:00 0.190034 0.090136 -5862.90 \n", - "2012-12-04 21:00:00+00:00 0.189843 0.090272 -5759.45 \n", - "2012-12-05 21:00:00+00:00 0.189649 0.089953 -5388.92 \n", - "2012-12-06 21:00:00+00:00 0.189466 0.090110 -5473.44 \n", - "2012-12-07 21:00:00+00:00 0.189280 0.089851 -5333.50 \n", - "2012-12-10 21:00:00+00:00 0.189086 0.089851 -5299.20 \n", - "2012-12-11 21:00:00+00:00 0.188945 0.090287 -5414.88 \n", - "2012-12-12 21:00:00+00:00 0.188752 0.090285 -5391.00 \n", - "2012-12-13 21:00:00+00:00 0.188619 0.090656 -5297.90 \n", - "2012-12-14 21:00:00+00:00 0.188454 0.091242 -5098.94 \n", - "2012-12-17 21:00:00+00:00 0.188444 0.091783 -5189.30 \n", - "2012-12-18 21:00:00+00:00 0.188421 0.092771 -5340.00 \n", - "2012-12-19 21:00:00+00:00 0.188315 0.093108 -5264.10 \n", - "2012-12-20 21:00:00+00:00 0.188161 0.092905 -5218.30 \n", - "2012-12-21 21:00:00+00:00 0.188099 0.092949 -5194.30 \n", - "2012-12-24 18:00:00+00:00 0.187920 0.092924 -5202.68 \n", - "2012-12-26 21:00:00+00:00 0.187766 0.093148 -5130.99 \n", - "2012-12-27 21:00:00+00:00 0.187581 0.093124 -5151.59 \n", - "2012-12-28 21:00:00+00:00 0.187566 0.093394 -5096.89 \n", - "2012-12-31 21:00:00+00:00 0.187750 0.095640 -5322.72 \n", - "\n", - " ending_cash ending_exposure \\\n", - "2011-01-03 21:00:00+00:00 10000000.00 0.00 \n", - "2011-01-04 21:00:00+00:00 9996686.10 3312.90 \n", - "2011-01-05 21:00:00+00:00 9993345.10 6680.00 \n", - "2011-01-06 21:00:00+00:00 9990006.80 10011.90 \n", - "2011-01-07 21:00:00+00:00 9986644.60 13444.80 \n", - "2011-01-10 21:00:00+00:00 9983219.05 17122.75 \n", - "2011-01-11 21:00:00+00:00 9979801.65 20498.40 \n", - "2011-01-12 21:00:00+00:00 9976356.45 24109.40 \n", - "2011-01-13 21:00:00+00:00 9972898.65 27654.40 \n", - "2011-01-14 21:00:00+00:00 9969412.85 31363.20 \n", - "2011-01-18 21:00:00+00:00 9966005.35 34065.00 \n", - "2011-01-19 21:00:00+00:00 9962615.95 37272.40 \n", - "2011-01-20 21:00:00+00:00 9959288.15 39921.60 \n", - "2011-01-21 21:00:00+00:00 9956019.95 42473.60 \n", - "2011-01-24 21:00:00+00:00 9952644.45 47243.00 \n", - "2011-01-25 21:00:00+00:00 9949229.45 51210.00 \n", - "2011-01-26 21:00:00+00:00 9945789.95 55016.00 \n", - "2011-01-27 21:00:00+00:00 9942356.85 58345.70 \n", - "2011-01-28 21:00:00+00:00 9938994.85 60498.00 \n", - "2011-01-31 21:00:00+00:00 9935600.65 64470.80 \n", - "2011-02-01 21:00:00+00:00 9932149.35 69006.00 \n", - "2011-02-02 21:00:00+00:00 9928705.15 72307.20 \n", - "2011-02-03 21:00:00+00:00 9925269.75 75556.80 \n", - "2011-02-04 21:00:00+00:00 9921803.75 79695.00 \n", - "2011-02-07 21:00:00+00:00 9918283.95 84451.20 \n", - "2011-02-08 21:00:00+00:00 9914730.95 88800.00 \n", - "2011-02-09 21:00:00+00:00 9911148.35 93121.60 \n", - "2011-02-10 21:00:00+00:00 9907601.95 95725.80 \n", - "2011-02-11 21:00:00+00:00 9904032.45 99918.00 \n", - "2011-02-14 21:00:00+00:00 9900439.65 104162.20 \n", - "... ... ... \n", - "2012-11-16 21:00:00+00:00 7803736.93 2490640.16 \n", - "2012-11-19 21:00:00+00:00 7798078.63 2675902.90 \n", - "2012-11-20 21:00:00+00:00 7792468.50 2658727.62 \n", - "2012-11-21 21:00:00+00:00 7786850.50 2668075.00 \n", - "2012-11-23 18:00:00+00:00 7781134.50 2720340.00 \n", - "2012-11-26 21:00:00+00:00 7775238.20 2812058.10 \n", - "2012-11-27 21:00:00+00:00 7769389.40 2795248.40 \n", - "2012-11-28 21:00:00+00:00 7763559.00 2792282.60 \n", - "2012-11-29 21:00:00+00:00 7757664.40 2828928.00 \n", - "2012-11-30 21:00:00+00:00 7751810.60 2815196.80 \n", - "2012-12-03 21:00:00+00:00 7745947.70 2825435.80 \n", - "2012-12-04 21:00:00+00:00 7740188.25 2781331.35 \n", - "2012-12-05 21:00:00+00:00 7734799.33 2607753.28 \n", - "2012-12-06 21:00:00+00:00 7729325.89 2654133.40 \n", - "2012-12-07 21:00:00+00:00 7723992.39 2591595.00 \n", - "2012-12-10 21:00:00+00:00 7718693.19 2580223.40 \n", - "2012-12-11 21:00:00+00:00 7713278.31 2641973.44 \n", - "2012-12-12 21:00:00+00:00 7707887.31 2635710.00 \n", - "2012-12-13 21:00:00+00:00 7702589.41 2595481.00 \n", - "2012-12-14 21:00:00+00:00 7697490.47 2503088.54 \n", - "2012-12-17 21:00:00+00:00 7692301.17 2552643.60 \n", - "2012-12-18 21:00:00+00:00 7686961.17 2632127.00 \n", - "2012-12-19 21:00:00+00:00 7681697.07 2599971.40 \n", - "2012-12-20 21:00:00+00:00 7676478.77 2582563.50 \n", - "2012-12-21 21:00:00+00:00 7671284.47 2575876.80 \n", - "2012-12-24 18:00:00+00:00 7666081.79 2585234.96 \n", - "2012-12-26 21:00:00+00:00 7660950.80 2554735.02 \n", - "2012-12-27 21:00:00+00:00 7655799.21 2570144.41 \n", - "2012-12-28 21:00:00+00:00 7650702.32 2547945.00 \n", - "2012-12-31 21:00:00+00:00 7645379.60 2666181.72 \n", - "\n", - " ... short_exposure \\\n", - "2011-01-03 21:00:00+00:00 ... 0 \n", - "2011-01-04 21:00:00+00:00 ... 0 \n", - "2011-01-05 21:00:00+00:00 ... 0 \n", - "2011-01-06 21:00:00+00:00 ... 0 \n", - "2011-01-07 21:00:00+00:00 ... 0 \n", - "2011-01-10 21:00:00+00:00 ... 0 \n", - "2011-01-11 21:00:00+00:00 ... 0 \n", - "2011-01-12 21:00:00+00:00 ... 0 \n", - "2011-01-13 21:00:00+00:00 ... 0 \n", - "2011-01-14 21:00:00+00:00 ... 0 \n", - "2011-01-18 21:00:00+00:00 ... 0 \n", - "2011-01-19 21:00:00+00:00 ... 0 \n", - "2011-01-20 21:00:00+00:00 ... 0 \n", - "2011-01-21 21:00:00+00:00 ... 0 \n", - "2011-01-24 21:00:00+00:00 ... 0 \n", - "2011-01-25 21:00:00+00:00 ... 0 \n", - "2011-01-26 21:00:00+00:00 ... 0 \n", - "2011-01-27 21:00:00+00:00 ... 0 \n", - "2011-01-28 21:00:00+00:00 ... 0 \n", - "2011-01-31 21:00:00+00:00 ... 0 \n", - "2011-02-01 21:00:00+00:00 ... 0 \n", - "2011-02-02 21:00:00+00:00 ... 0 \n", - "2011-02-03 21:00:00+00:00 ... 0 \n", - "2011-02-04 21:00:00+00:00 ... 0 \n", - "2011-02-07 21:00:00+00:00 ... 0 \n", - "2011-02-08 21:00:00+00:00 ... 0 \n", - "2011-02-09 21:00:00+00:00 ... 0 \n", - "2011-02-10 21:00:00+00:00 ... 0 \n", - "2011-02-11 21:00:00+00:00 ... 0 \n", - "2011-02-14 21:00:00+00:00 ... 0 \n", - "... ... ... \n", - "2012-11-16 21:00:00+00:00 ... 0 \n", - "2012-11-19 21:00:00+00:00 ... 0 \n", - "2012-11-20 21:00:00+00:00 ... 0 \n", - "2012-11-21 21:00:00+00:00 ... 0 \n", - "2012-11-23 18:00:00+00:00 ... 0 \n", - "2012-11-26 21:00:00+00:00 ... 0 \n", - "2012-11-27 21:00:00+00:00 ... 0 \n", - "2012-11-28 21:00:00+00:00 ... 0 \n", - "2012-11-29 21:00:00+00:00 ... 0 \n", - "2012-11-30 21:00:00+00:00 ... 0 \n", - "2012-12-03 21:00:00+00:00 ... 0 \n", - "2012-12-04 21:00:00+00:00 ... 0 \n", - "2012-12-05 21:00:00+00:00 ... 0 \n", - "2012-12-06 21:00:00+00:00 ... 0 \n", - "2012-12-07 21:00:00+00:00 ... 0 \n", - "2012-12-10 21:00:00+00:00 ... 0 \n", - "2012-12-11 21:00:00+00:00 ... 0 \n", - "2012-12-12 21:00:00+00:00 ... 0 \n", - "2012-12-13 21:00:00+00:00 ... 0 \n", - "2012-12-14 21:00:00+00:00 ... 0 \n", - "2012-12-17 21:00:00+00:00 ... 0 \n", - "2012-12-18 21:00:00+00:00 ... 0 \n", - "2012-12-19 21:00:00+00:00 ... 0 \n", - "2012-12-20 21:00:00+00:00 ... 0 \n", - "2012-12-21 21:00:00+00:00 ... 0 \n", - "2012-12-24 18:00:00+00:00 ... 0 \n", - "2012-12-26 21:00:00+00:00 ... 0 \n", - "2012-12-27 21:00:00+00:00 ... 0 \n", - "2012-12-28 21:00:00+00:00 ... 0 \n", - "2012-12-31 21:00:00+00:00 ... 0 \n", - "\n", - " short_value shorts_count sortino \\\n", - "2011-01-03 21:00:00+00:00 0 0 NaN \n", - "2011-01-04 21:00:00+00:00 0 0 -11.224972 \n", - "2011-01-05 21:00:00+00:00 0 0 230.045324 \n", - "2011-01-06 21:00:00+00:00 0 0 22.913722 \n", - "2011-01-07 21:00:00+00:00 0 0 97.979577 \n", - "2011-01-10 21:00:00+00:00 0 0 341.961345 \n", - "2011-01-11 21:00:00+00:00 0 0 42.612419 \n", - "2011-01-12 21:00:00+00:00 0 0 61.885447 \n", - "2011-01-13 21:00:00+00:00 0 0 69.267298 \n", - "2011-01-14 21:00:00+00:00 0 0 92.208331 \n", - "2011-01-18 21:00:00+00:00 0 0 0.476546 \n", - "2011-01-19 21:00:00+00:00 0 0 -0.700708 \n", - "2011-01-20 21:00:00+00:00 0 0 -3.490818 \n", - "2011-01-21 21:00:00+00:00 0 0 -5.207546 \n", - "2011-01-24 21:00:00+00:00 0 0 -0.375267 \n", - "2011-01-25 21:00:00+00:00 0 0 1.421565 \n", - "2011-01-26 21:00:00+00:00 0 0 2.528766 \n", - "2011-01-27 21:00:00+00:00 0 0 2.134760 \n", - "2011-01-28 21:00:00+00:00 0 0 -1.069324 \n", - "2011-01-31 21:00:00+00:00 0 0 0.147515 \n", - "2011-02-01 21:00:00+00:00 0 0 2.318921 \n", - "2011-02-02 21:00:00+00:00 0 0 1.978514 \n", - "2011-02-03 21:00:00+00:00 0 0 1.571015 \n", - "2011-02-04 21:00:00+00:00 0 0 2.788093 \n", - "2011-02-07 21:00:00+00:00 0 0 4.984606 \n", - "2011-02-08 21:00:00+00:00 0 0 6.309501 \n", - "2011-02-09 21:00:00+00:00 0 0 7.486993 \n", - "2011-02-10 21:00:00+00:00 0 0 5.040908 \n", - "2011-02-11 21:00:00+00:00 0 0 5.879790 \n", - "2011-02-14 21:00:00+00:00 0 0 6.733874 \n", - "... ... ... ... \n", - "2012-11-16 21:00:00+00:00 0 0 0.581207 \n", - "2012-11-19 21:00:00+00:00 0 0 0.912542 \n", - "2012-11-20 21:00:00+00:00 0 0 0.868836 \n", - "2012-11-21 21:00:00+00:00 0 0 0.874687 \n", - "2012-11-23 18:00:00+00:00 0 0 0.958079 \n", - "2012-11-26 21:00:00+00:00 0 0 1.111665 \n", - "2012-11-27 21:00:00+00:00 0 0 1.068403 \n", - "2012-11-28 21:00:00+00:00 0 0 1.051351 \n", - "2012-11-29 21:00:00+00:00 0 0 1.105093 \n", - "2012-11-30 21:00:00+00:00 0 0 1.067924 \n", - "2012-12-03 21:00:00+00:00 0 0 1.074588 \n", - "2012-12-04 21:00:00+00:00 0 0 0.977756 \n", - "2012-12-05 21:00:00+00:00 0 0 0.605002 \n", - "2012-12-06 21:00:00+00:00 0 0 0.671627 \n", - "2012-12-07 21:00:00+00:00 0 0 0.553361 \n", - "2012-12-10 21:00:00+00:00 0 0 0.525320 \n", - "2012-12-11 21:00:00+00:00 0 0 0.616351 \n", - "2012-12-12 21:00:00+00:00 0 0 0.596696 \n", - "2012-12-13 21:00:00+00:00 0 0 0.519853 \n", - "2012-12-14 21:00:00+00:00 0 0 0.353785 \n", - "2012-12-17 21:00:00+00:00 0 0 0.423858 \n", - "2012-12-18 21:00:00+00:00 0 0 0.540504 \n", - "2012-12-19 21:00:00+00:00 0 0 0.479739 \n", - "2012-12-20 21:00:00+00:00 0 0 0.443299 \n", - "2012-12-21 21:00:00+00:00 0 0 0.424116 \n", - "2012-12-24 18:00:00+00:00 0 0 0.430192 \n", - "2012-12-26 21:00:00+00:00 0 0 0.372948 \n", - "2012-12-27 21:00:00+00:00 0 0 0.388592 \n", - "2012-12-28 21:00:00+00:00 0 0 0.345046 \n", - "2012-12-31 21:00:00+00:00 0 0 0.520644 \n", - "\n", - " starting_cash starting_exposure starting_value \\\n", - "2011-01-03 21:00:00+00:00 10000000.00 0.00 0.00 \n", - "2011-01-04 21:00:00+00:00 10000000.00 0.00 0.00 \n", - "2011-01-05 21:00:00+00:00 9996686.10 3312.90 3312.90 \n", - "2011-01-06 21:00:00+00:00 9993345.10 6680.00 6680.00 \n", - "2011-01-07 21:00:00+00:00 9990006.80 10011.90 10011.90 \n", - "2011-01-10 21:00:00+00:00 9986644.60 13444.80 13444.80 \n", - "2011-01-11 21:00:00+00:00 9983219.05 17122.75 17122.75 \n", - "2011-01-12 21:00:00+00:00 9979801.65 20498.40 20498.40 \n", - "2011-01-13 21:00:00+00:00 9976356.45 24109.40 24109.40 \n", - "2011-01-14 21:00:00+00:00 9972898.65 27654.40 27654.40 \n", - "2011-01-18 21:00:00+00:00 9969412.85 31363.20 31363.20 \n", - "2011-01-19 21:00:00+00:00 9966005.35 34065.00 34065.00 \n", - "2011-01-20 21:00:00+00:00 9962615.95 37272.40 37272.40 \n", - "2011-01-21 21:00:00+00:00 9959288.15 39921.60 39921.60 \n", - "2011-01-24 21:00:00+00:00 9956019.95 42473.60 42473.60 \n", - "2011-01-25 21:00:00+00:00 9952644.45 47243.00 47243.00 \n", - "2011-01-26 21:00:00+00:00 9949229.45 51210.00 51210.00 \n", - "2011-01-27 21:00:00+00:00 9945789.95 55016.00 55016.00 \n", - "2011-01-28 21:00:00+00:00 9942356.85 58345.70 58345.70 \n", - "2011-01-31 21:00:00+00:00 9938994.85 60498.00 60498.00 \n", - "2011-02-01 21:00:00+00:00 9935600.65 64470.80 64470.80 \n", - "2011-02-02 21:00:00+00:00 9932149.35 69006.00 69006.00 \n", - "2011-02-03 21:00:00+00:00 9928705.15 72307.20 72307.20 \n", - "2011-02-04 21:00:00+00:00 9925269.75 75556.80 75556.80 \n", - "2011-02-07 21:00:00+00:00 9921803.75 79695.00 79695.00 \n", - "2011-02-08 21:00:00+00:00 9918283.95 84451.20 84451.20 \n", - "2011-02-09 21:00:00+00:00 9914730.95 88800.00 88800.00 \n", - "2011-02-10 21:00:00+00:00 9911148.35 93121.60 93121.60 \n", - "2011-02-11 21:00:00+00:00 9907601.95 95725.80 95725.80 \n", - "2011-02-14 21:00:00+00:00 9904032.45 99918.00 99918.00 \n", - "... ... ... ... \n", - "2012-11-16 21:00:00+00:00 7809014.71 2475670.20 2475670.20 \n", - "2012-11-19 21:00:00+00:00 7803736.93 2490640.16 2490640.16 \n", - "2012-11-20 21:00:00+00:00 7798078.63 2675902.90 2675902.90 \n", - "2012-11-21 21:00:00+00:00 7792468.50 2658727.62 2658727.62 \n", - "2012-11-23 18:00:00+00:00 7786850.50 2668075.00 2668075.00 \n", - "2012-11-26 21:00:00+00:00 7781134.50 2720340.00 2720340.00 \n", - "2012-11-27 21:00:00+00:00 7775238.20 2812058.10 2812058.10 \n", - "2012-11-28 21:00:00+00:00 7769389.40 2795248.40 2795248.40 \n", - "2012-11-29 21:00:00+00:00 7763559.00 2792282.60 2792282.60 \n", - "2012-11-30 21:00:00+00:00 7757664.40 2828928.00 2828928.00 \n", - "2012-12-03 21:00:00+00:00 7751810.60 2815196.80 2815196.80 \n", - "2012-12-04 21:00:00+00:00 7745947.70 2825435.80 2825435.80 \n", - "2012-12-05 21:00:00+00:00 7740188.25 2781331.35 2781331.35 \n", - "2012-12-06 21:00:00+00:00 7734799.33 2607753.28 2607753.28 \n", - "2012-12-07 21:00:00+00:00 7729325.89 2654133.40 2654133.40 \n", - "2012-12-10 21:00:00+00:00 7723992.39 2591595.00 2591595.00 \n", - "2012-12-11 21:00:00+00:00 7718693.19 2580223.40 2580223.40 \n", - "2012-12-12 21:00:00+00:00 7713278.31 2641973.44 2641973.44 \n", - "2012-12-13 21:00:00+00:00 7707887.31 2635710.00 2635710.00 \n", - "2012-12-14 21:00:00+00:00 7702589.41 2595481.00 2595481.00 \n", - "2012-12-17 21:00:00+00:00 7697490.47 2503088.54 2503088.54 \n", - "2012-12-18 21:00:00+00:00 7692301.17 2552643.60 2552643.60 \n", - "2012-12-19 21:00:00+00:00 7686961.17 2632127.00 2632127.00 \n", - "2012-12-20 21:00:00+00:00 7681697.07 2599971.40 2599971.40 \n", - "2012-12-21 21:00:00+00:00 7676478.77 2582563.50 2582563.50 \n", - "2012-12-24 18:00:00+00:00 7671284.47 2575876.80 2575876.80 \n", - "2012-12-26 21:00:00+00:00 7666081.79 2585234.96 2585234.96 \n", - "2012-12-27 21:00:00+00:00 7660950.80 2554735.02 2554735.02 \n", - "2012-12-28 21:00:00+00:00 7655799.21 2570144.41 2570144.41 \n", - "2012-12-31 21:00:00+00:00 7650702.32 2547945.00 2547945.00 \n", - "\n", - " trading_days \\\n", - "2011-01-03 21:00:00+00:00 1 \n", - "2011-01-04 21:00:00+00:00 2 \n", - "2011-01-05 21:00:00+00:00 3 \n", - "2011-01-06 21:00:00+00:00 4 \n", - "2011-01-07 21:00:00+00:00 5 \n", - "2011-01-10 21:00:00+00:00 6 \n", - "2011-01-11 21:00:00+00:00 7 \n", - "2011-01-12 21:00:00+00:00 8 \n", - "2011-01-13 21:00:00+00:00 9 \n", - "2011-01-14 21:00:00+00:00 10 \n", - "2011-01-18 21:00:00+00:00 11 \n", - "2011-01-19 21:00:00+00:00 12 \n", - "2011-01-20 21:00:00+00:00 13 \n", - "2011-01-21 21:00:00+00:00 14 \n", - "2011-01-24 21:00:00+00:00 15 \n", - "2011-01-25 21:00:00+00:00 16 \n", - "2011-01-26 21:00:00+00:00 17 \n", - "2011-01-27 21:00:00+00:00 18 \n", - "2011-01-28 21:00:00+00:00 19 \n", - "2011-01-31 21:00:00+00:00 20 \n", - "2011-02-01 21:00:00+00:00 21 \n", - "2011-02-02 21:00:00+00:00 22 \n", - "2011-02-03 21:00:00+00:00 23 \n", - "2011-02-04 21:00:00+00:00 24 \n", - "2011-02-07 21:00:00+00:00 25 \n", - "2011-02-08 21:00:00+00:00 26 \n", - "2011-02-09 21:00:00+00:00 27 \n", - "2011-02-10 21:00:00+00:00 28 \n", - "2011-02-11 21:00:00+00:00 29 \n", - "2011-02-14 21:00:00+00:00 30 \n", - "... ... \n", - "2012-11-16 21:00:00+00:00 473 \n", - "2012-11-19 21:00:00+00:00 474 \n", - "2012-11-20 21:00:00+00:00 475 \n", - "2012-11-21 21:00:00+00:00 476 \n", - "2012-11-23 18:00:00+00:00 477 \n", - "2012-11-26 21:00:00+00:00 478 \n", - "2012-11-27 21:00:00+00:00 479 \n", - "2012-11-28 21:00:00+00:00 480 \n", - "2012-11-29 21:00:00+00:00 481 \n", - "2012-11-30 21:00:00+00:00 482 \n", - "2012-12-03 21:00:00+00:00 483 \n", - "2012-12-04 21:00:00+00:00 484 \n", - "2012-12-05 21:00:00+00:00 485 \n", - "2012-12-06 21:00:00+00:00 486 \n", - "2012-12-07 21:00:00+00:00 487 \n", - "2012-12-10 21:00:00+00:00 488 \n", - "2012-12-11 21:00:00+00:00 489 \n", - "2012-12-12 21:00:00+00:00 490 \n", - "2012-12-13 21:00:00+00:00 491 \n", - "2012-12-14 21:00:00+00:00 492 \n", - "2012-12-17 21:00:00+00:00 493 \n", - "2012-12-18 21:00:00+00:00 494 \n", - "2012-12-19 21:00:00+00:00 495 \n", - "2012-12-20 21:00:00+00:00 496 \n", - "2012-12-21 21:00:00+00:00 497 \n", - "2012-12-24 18:00:00+00:00 498 \n", - "2012-12-26 21:00:00+00:00 499 \n", - "2012-12-27 21:00:00+00:00 500 \n", - "2012-12-28 21:00:00+00:00 501 \n", - "2012-12-31 21:00:00+00:00 502 \n", - "\n", - " transactions \\\n", - "2011-01-03 21:00:00+00:00 [] \n", - "2011-01-04 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-01-05 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-01-06 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-01-07 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-01-10 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-01-11 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-01-12 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-01-13 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-01-14 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-01-18 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-01-19 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-01-20 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-01-21 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-01-24 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-01-25 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-01-26 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-01-27 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-01-28 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-01-31 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-02-01 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-02-02 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-02-03 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-02-04 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-02-07 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-02-08 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-02-09 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-02-10 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-02-11 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2011-02-14 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "... ... \n", - "2012-11-16 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-11-19 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-11-20 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-11-21 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-11-23 18:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-11-26 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-11-27 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-11-28 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-11-29 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-11-30 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-12-03 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-12-04 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-12-05 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-12-06 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-12-07 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-12-10 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-12-11 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-12-12 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-12-13 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-12-14 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-12-17 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-12-18 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-12-19 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-12-20 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-12-21 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-12-24 18:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-12-26 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-12-27 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-12-28 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "2012-12-31 21:00:00+00:00 [{u'commission': None, u'amount': 10, u'sid': ... \n", - "\n", - " treasury_period_return \n", - "2011-01-03 21:00:00+00:00 0.0336 \n", - "2011-01-04 21:00:00+00:00 0.0336 \n", - "2011-01-05 21:00:00+00:00 0.0350 \n", - "2011-01-06 21:00:00+00:00 0.0344 \n", - "2011-01-07 21:00:00+00:00 0.0334 \n", - "2011-01-10 21:00:00+00:00 0.0332 \n", - "2011-01-11 21:00:00+00:00 0.0337 \n", - "2011-01-12 21:00:00+00:00 0.0340 \n", - "2011-01-13 21:00:00+00:00 0.0334 \n", - "2011-01-14 21:00:00+00:00 0.0335 \n", - "2011-01-18 21:00:00+00:00 0.0339 \n", - "2011-01-19 21:00:00+00:00 0.0337 \n", - "2011-01-20 21:00:00+00:00 0.0347 \n", - "2011-01-21 21:00:00+00:00 0.0344 \n", - "2011-01-24 21:00:00+00:00 0.0343 \n", - "2011-01-25 21:00:00+00:00 0.0335 \n", - "2011-01-26 21:00:00+00:00 0.0345 \n", - "2011-01-27 21:00:00+00:00 0.0342 \n", - "2011-01-28 21:00:00+00:00 0.0336 \n", - "2011-01-31 21:00:00+00:00 0.0342 \n", - "2011-02-01 21:00:00+00:00 0.0348 \n", - "2011-02-02 21:00:00+00:00 0.0352 \n", - "2011-02-03 21:00:00+00:00 0.0358 \n", - "2011-02-04 21:00:00+00:00 0.0368 \n", - "2011-02-07 21:00:00+00:00 0.0368 \n", - "2011-02-08 21:00:00+00:00 0.0375 \n", - "2011-02-09 21:00:00+00:00 0.0365 \n", - "2011-02-10 21:00:00+00:00 0.0370 \n", - "2011-02-11 21:00:00+00:00 0.0364 \n", - "2011-02-14 21:00:00+00:00 0.0362 \n", - "... ... \n", - "2012-11-16 21:00:00+00:00 0.0158 \n", - "2012-11-19 21:00:00+00:00 0.0161 \n", - "2012-11-20 21:00:00+00:00 0.0166 \n", - "2012-11-21 21:00:00+00:00 0.0169 \n", - "2012-11-23 18:00:00+00:00 0.0170 \n", - "2012-11-26 21:00:00+00:00 0.0166 \n", - "2012-11-27 21:00:00+00:00 0.0164 \n", - "2012-11-28 21:00:00+00:00 0.0163 \n", - "2012-11-29 21:00:00+00:00 0.0162 \n", - "2012-11-30 21:00:00+00:00 0.0162 \n", - "2012-12-03 21:00:00+00:00 0.0163 \n", - "2012-12-04 21:00:00+00:00 0.0162 \n", - "2012-12-05 21:00:00+00:00 0.0160 \n", - "2012-12-06 21:00:00+00:00 0.0159 \n", - "2012-12-07 21:00:00+00:00 0.0164 \n", - "2012-12-10 21:00:00+00:00 0.0163 \n", - "2012-12-11 21:00:00+00:00 0.0166 \n", - "2012-12-12 21:00:00+00:00 0.0172 \n", - "2012-12-13 21:00:00+00:00 0.0174 \n", - "2012-12-14 21:00:00+00:00 0.0172 \n", - "2012-12-17 21:00:00+00:00 0.0178 \n", - "2012-12-18 21:00:00+00:00 0.0184 \n", - "2012-12-19 21:00:00+00:00 0.0182 \n", - "2012-12-20 21:00:00+00:00 0.0181 \n", - "2012-12-21 21:00:00+00:00 0.0177 \n", - "2012-12-24 18:00:00+00:00 0.0179 \n", - "2012-12-26 21:00:00+00:00 0.0177 \n", - "2012-12-27 21:00:00+00:00 0.0174 \n", - "2012-12-28 21:00:00+00:00 0.0173 \n", - "2012-12-31 21:00:00+00:00 0.0178 \n", - "\n", - "[502 rows x 39 columns]" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "%%catalyst --start=2011-1-1 --end=2013-1-1\n", - "\n", - "from catalyst.api import order, record, symbol\n", - "import matplotlib.pyplot as plt\n", - "\n", - "def initialize(context):\n", - " pass\n", - "\n", - "def handle_data(context, data):\n", - " order(symbol('AAPL'), 10)\n", - " record(AAPL=data[symbol('AAPL')].price)\n", - " \n", - "def analyze(context, perf):\n", - " ax1 = plt.subplot(211)\n", - " perf.portfolio_value.plot(ax=ax1)\n", - " ax2 = plt.subplot(212, sharex=ax1)\n", - " perf.AAPL.plot(ax=ax2)\n", - " plt.gcf().set_size_inches(18, 8)\n", - " plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 2", - "language": "python", - "name": "python2" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 2 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.11" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/catalyst/examples/buyapple.py b/catalyst/examples/buyapple.py deleted file mode 100644 index 888ec87b..00000000 --- a/catalyst/examples/buyapple.py +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2014 Quantopian, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from catalyst.api import order, record, symbol - - -def initialize(context): - context.asset = symbol('AAPL') - - -def handle_data(context, data): - order(context.asset, 10) - record(AAPL=data.current(context.asset, 'price')) - - -# Note: this function can be removed if running -# this algorithm on quantopian.com -def analyze(context=None, results=None): - import matplotlib.pyplot as plt - # Plot the portfolio and asset data. - ax1 = plt.subplot(211) - results.portfolio_value.plot(ax=ax1) - ax1.set_ylabel('Portfolio value (USD)') - ax2 = plt.subplot(212, sharex=ax1) - results.AAPL.plot(ax=ax2) - ax2.set_ylabel('AAPL price (USD)') - - # Show the plot. - plt.gcf().set_size_inches(18, 8) - plt.show() - - -def _test_args(): - """Extra arguments to use when catalyst's automated tests run this example. - """ - import pandas as pd - - return { - 'start': pd.Timestamp('2014-01-01', tz='utc'), - 'end': pd.Timestamp('2014-11-01', tz='utc'), - } diff --git a/catalyst/examples/buybtc.py b/catalyst/examples/buybtc.py deleted file mode 100644 index 7222d369..00000000 --- a/catalyst/examples/buybtc.py +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2014 Quantopian, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from catalyst.api import ( - order_target_percent, - record, - symbol, - get_open_orders, -) - - -def initialize(context): - context.asset = symbol('USDT_BTC') - - -def handle_data(context, data): - if context.asset not in get_open_orders() and data.can_trade(context.asset): - order_target_percent(context.asset, 1.0) - - record( - USDT_BTC=data.current(context.asset, 'price'), - leverage=context.account.leverage, - ) - - -# Note: this function can be removed if running -# this algorithm on quantopian.com -def analyze(context=None, results=None): - import matplotlib.pyplot as plt - # Plot the portfolio and asset data. - ax1 = plt.subplot(311) - results.portfolio_value.plot(ax=ax1) - ax1.set_ylabel('Portfolio value (USD)') - ax2 = plt.subplot(312, sharex=ax1) - results.USDT_BTC.plot(ax=ax2) - ax2.set_ylabel('USDT_BTC price (USD)') - ax3 = plt.subplot(313, sharex=ax1) - results.leverage.plot(ax=ax3) - ax3.set_ylabel('Leverage (USD)') - - # Show the plot. - plt.gcf().set_size_inches(18, 8) - plt.show() - - -def _test_args(): - """Extra arguments to use when catalyst's automated tests run this example. - """ - import pandas as pd - - return { - 'start': pd.Timestamp('2014-01-01', tz='utc'), - 'end': pd.Timestamp('2014-11-01', tz='utc'), - } diff --git a/catalyst/examples/dual_ema_talib.py b/catalyst/examples/dual_ema_talib.py deleted file mode 100644 index c2b069ac..00000000 --- a/catalyst/examples/dual_ema_talib.py +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2014 Quantopian, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -"""Dual Moving Average Crossover algorithm. - -This algorithm buys apple once its short moving average crosses -its long moving average (indicating upwards momentum) and sells -its shares once the averages cross again (indicating downwards -momentum). - -""" - -from catalyst.api import order, record, symbol -# Import exponential moving average from talib wrapper -from talib import EMA - - -def initialize(context): - context.asset = symbol('AAPL') - - # To keep track of whether we invested in the stock or not - context.invested = False - - -def handle_data(context, data): - trailing_window = data.history(context.asset, 'price', 40, '1d') - if trailing_window.isnull().values.any(): - return - short_ema = EMA(trailing_window.values, timeperiod=20) - long_ema = EMA(trailing_window.values, timeperiod=40) - - buy = False - sell = False - - if (short_ema[-1] > long_ema[-1]) and not context.invested: - order(context.asset, 100) - context.invested = True - buy = True - elif (short_ema[-1] < long_ema[-1]) and context.invested: - order(context.asset, -100) - context.invested = False - sell = True - - record(AAPL=data.current(context.asset, "price"), - short_ema=short_ema[-1], - long_ema=long_ema[-1], - buy=buy, - sell=sell) - - -# Note: this function can be removed if running -# this algorithm on quantopian.com -def analyze(context=None, results=None): - import matplotlib.pyplot as plt - import logbook - logbook.StderrHandler().push_application() - log = logbook.Logger('Algorithm') - - fig = plt.figure() - ax1 = fig.add_subplot(211) - results.portfolio_value.plot(ax=ax1) - ax1.set_ylabel('Portfolio value (USD)') - - ax2 = fig.add_subplot(212) - ax2.set_ylabel('Price (USD)') - - # If data has been record()ed, then plot it. - # Otherwise, log the fact that no data has been recorded. - if 'AAPL' in results and 'short_ema' in results and 'long_ema' in results: - results[['AAPL', 'short_ema', 'long_ema']].plot(ax=ax2) - - ax2.plot(results.ix[results.buy].index, results.short_ema[results.buy], - '^', markersize=10, color='m') - ax2.plot(results.ix[results.sell].index, - results.short_ema[results.sell], - 'v', markersize=10, color='k') - plt.legend(loc=0) - plt.gcf().set_size_inches(18, 8) - else: - msg = 'AAPL, short_ema and long_ema data not captured using record().' - ax2.annotate(msg, xy=(0.1, 0.5)) - log.info(msg) - - plt.show() - - -def _test_args(): - """Extra arguments to use when catalyst's automated tests run this example. - """ - import pandas as pd - - return { - 'start': pd.Timestamp('2014-01-01', tz='utc'), - 'end': pd.Timestamp('2014-11-01', tz='utc'), - } diff --git a/catalyst/examples/dual_moving_average.py b/catalyst/examples/dual_moving_average.py deleted file mode 100644 index 7d6c6022..00000000 --- a/catalyst/examples/dual_moving_average.py +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2014 Quantopian, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Dual Moving Average Crossover algorithm. - -This algorithm buys apple once its short moving average crosses -its long moving average (indicating upwards momentum) and sells -its shares once the averages cross again (indicating downwards -momentum). -""" - -from catalyst.api import order_target, record, symbol - - -def initialize(context): - context.sym = symbol('AAPL') - context.i = 0 - - -def handle_data(context, data): - # Skip first 300 days to get full windows - context.i += 1 - if context.i < 300: - return - - # Compute averages - # history() has to be called with the same params - # from above and returns a pandas dataframe. - short_mavg = data.history(context.sym, 'price', 100, '1d').mean() - long_mavg = data.history(context.sym, 'price', 300, '1d').mean() - - # Trading logic - if short_mavg > long_mavg: - # order_target orders as many shares as needed to - # achieve the desired number of shares. - order_target(context.sym, 100) - elif short_mavg < long_mavg: - order_target(context.sym, 0) - - # Save values for later inspection - record(AAPL=data.current(context.sym, "price"), - short_mavg=short_mavg, - long_mavg=long_mavg) - - -# Note: this function can be removed if running -# this algorithm on quantopian.com -def analyze(context=None, results=None): - import matplotlib.pyplot as plt - import logbook - logbook.StderrHandler().push_application() - log = logbook.Logger('Algorithm') - - fig = plt.figure() - ax1 = fig.add_subplot(211) - results.portfolio_value.plot(ax=ax1) - ax1.set_ylabel('Portfolio value (USD)') - - ax2 = fig.add_subplot(212) - ax2.set_ylabel('Price (USD)') - - # If data has been record()ed, then plot it. - # Otherwise, log the fact that no data has been recorded. - if ('AAPL' in results and 'short_mavg' in results and - 'long_mavg' in results): - results['AAPL'].plot(ax=ax2) - results[['short_mavg', 'long_mavg']].plot(ax=ax2) - - trans = results.ix[[t != [] for t in results.transactions]] - buys = trans.ix[[t[0]['amount'] > 0 for t in - trans.transactions]] - sells = trans.ix[ - [t[0]['amount'] < 0 for t in trans.transactions]] - ax2.plot(buys.index, results.short_mavg.ix[buys.index], - '^', markersize=10, color='m') - ax2.plot(sells.index, results.short_mavg.ix[sells.index], - 'v', markersize=10, color='k') - plt.legend(loc=0) - else: - msg = 'AAPL, short_mavg & long_mavg data not captured using record().' - ax2.annotate(msg, xy=(0.1, 0.5)) - log.info(msg) - - plt.show() - - -def _test_args(): - """Extra arguments to use when catalyst's automated tests run this example. - """ - import pandas as pd - - return { - 'start': pd.Timestamp('2011', tz='utc'), - 'end': pd.Timestamp('2013', tz='utc'), - } diff --git a/catalyst/examples/dual_moving_average_btc.py b/catalyst/examples/dual_vwap.py similarity index 75% rename from catalyst/examples/dual_moving_average_btc.py rename to catalyst/examples/dual_vwap.py index 2b3d4688..947f3b75 100644 --- a/catalyst/examples/dual_moving_average_btc.py +++ b/catalyst/examples/dual_vwap.py @@ -14,8 +14,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -import numpy as np - from catalyst.api import ( order_target_percent, record, @@ -33,27 +31,21 @@ from catalyst.api import ( from catalyst.pipeline import Pipeline from catalyst.pipeline.data import CryptoPricing -from catalyst.pipeline.factors.crypto import ( - VWAP, - SimpleMovingAverage, -) +from catalyst.pipeline.factors.crypto import VWAP -from catalyst.finance.commission import PerDollar -from catalyst.finance.slippage import VolumeShareSlippage +ASSET = 'USDT_BTC' TARGET_INVESTMENT_RATIO = 0.8 SHORT_WINDOW = 30 LONG_WINDOW = 100 def initialize(context): - context.asset = symbol('USDT_BTC') context.i = 0 + context.asset = symbol(ASSET) - set_commission(PerDollar(cost=0.001)) - set_slippage(VolumeShareSlippage()) set_max_leverage(1.0) - attach_pipeline(make_pipeline(), 'my_pipeline') + attach_pipeline(make_pipeline(), 'vwap_pipeline') schedule_function( rebalance, @@ -62,21 +54,17 @@ def initialize(context): def before_trading_start(context, data): - context.pipeline_data = pipeline_output('my_pipeline') + context.pipeline_data = pipeline_output('vwap_pipeline') def make_pipeline(): return Pipeline( columns={ - 'price': CryptoPricing.close.latest, + 'price': CryptoPricing.open.latest, 'short_mavg': VWAP(window_length=SHORT_WINDOW), 'long_mavg': VWAP(window_length=LONG_WINDOW), } ) - -def handle_data(context, data): - pass - def rebalance(context, data): context.i += 1 @@ -98,24 +86,14 @@ def rebalance(context, data): if context.asset not in open_orders: # check that the asset of interest can currently be traded if data.can_trade(context.asset): - # adjust portfolio based on moving averages + # adjust portfolio based on comparison of long and short vwap if short_mavg > long_mavg: - order_target_percent( - context.asset, - TARGET_INVESTMENT_RATIO, - #limit_price=(2 * price), - #stop_price=(0.5 * price), - ) + order_target_percent(context.asset, TARGET_INVESTMENT_RATIO) elif short_mavg < long_mavg: - order_target_percent( - context.asset, - 0.0, - #limit_price=(2 * price), - #stop_price=(0.5 * price), - ) + order_target_percent(context.asset, 0.0) record( - USDT_BTC=price, + price=price, cash=context.portfolio.cash, leverage=context.account.leverage, short_mavg=short_mavg, @@ -135,27 +113,29 @@ def analyze(context=None, results=None): ax1.set_ylabel('Portfolio value (USD)') ax2 = plt.subplot(512, sharex=ax1) - ax2.set_ylabel('USDT_BTC (USD)') - results[['USDT_BTC', 'short_mavg', 'long_mavg']].plot(ax=ax2) + ax2.set_ylabel('{asset} (USD)'.format(asset=ASSET)) + results[['price', 'short_mavg', 'long_mavg']].plot(ax=ax2) trans = results.ix[[t != [] for t in results.transactions]] amounts = [t[0]['amount'] for t in trans.transactions] - print 'amounts:\n', amounts + buys = trans.ix[ [t[0]['amount'] > 0 for t in trans.transactions] ] sells = trans.ix[ [t[0]['amount'] < 0 for t in trans.transactions] ] - print 'buys:', buys.head() + ax2.plot( - buys.index, results.USDT_BTC[buys.index], + buys.index, + results.price[buys.index], '^', markersize=10, color='m', ) ax2.plot( - sells.index, results.USDT_BTC[sells.index], + sells.index, + results.price[sells.index], 'v', markersize=10, color='k', @@ -185,7 +165,7 @@ def analyze(context=None, results=None): 'algorithm', 'benchmark', ]].plot(ax=ax5) - ax5.set_ylabel('Dollars (USD)') + ax5.set_ylabel('Percent Change') plt.legend(loc=3) diff --git a/catalyst/examples/momentum_pipeline.py b/catalyst/examples/momentum_pipeline.py deleted file mode 100644 index f56b9e9b..00000000 --- a/catalyst/examples/momentum_pipeline.py +++ /dev/null @@ -1,110 +0,0 @@ -""" -A simple Pipeline algorithm that longs the top 3 stocks by RSI and shorts -the bottom 3 each day. -""" -from six import viewkeys -from catalyst.api import ( - attach_pipeline, - date_rules, - order_target_percent, - pipeline_output, - record, - schedule_function, - symbol, -) -from catalyst.pipeline import Pipeline -from catalyst.pipeline.factors.crypto import RSI - - -def make_pipeline(): - rsi = RSI() - return Pipeline( - columns={ - 'longs': rsi.top(3), - 'shorts': rsi.bottom(3), - }, - ) - - -def rebalance(context, data): - # Pipeline data will be a dataframe with boolean columns named 'longs' and - # 'shorts'. - pipeline_data = context.pipeline_data - all_assets = pipeline_data.index - - longs = all_assets[pipeline_data.longs] - shorts = all_assets[pipeline_data.shorts] - - record( - universe_size=len(all_assets), - leverage=context.account.leverage, - ) - - # Build a 2x-leveraged, equal-weight, long-short portfolio. - one_third = 1.0 / 3.0 - for asset in longs: - order_target_percent(asset, one_third) - - for asset in shorts: - order_target_percent(asset, -one_third) - - # Remove any assets that should no longer be in our portfolio. - portfolio_assets = longs | shorts - positions = context.portfolio.positions - for asset in viewkeys(positions) - set(portfolio_assets): - # This will fail if the asset was removed from our portfolio because it - # was delisted. - if data.can_trade(asset): - order_target_percent(asset, 0) - - -def initialize(context): - attach_pipeline(make_pipeline(), 'my_pipeline') - - # Rebalance each day. In daily mode, this is equivalent to putting - # `rebalance` in our handle_data, but in minute mode, it's equivalent to - # running at the start of the day each day. - schedule_function(rebalance, date_rules.every_day()) - - -def before_trading_start(context, data): - context.pipeline_data = pipeline_output('my_pipeline') - -def analyze(context=None, results=None): - import matplotlib.pyplot as plt - - ax1 = plt.subplot(311) - results.portfolio_value.plot(ax=ax1) - ax1.set_ylabel('Portfolio value (USD)') - ax2 = plt.subplot(312, sharex=ax1) - results.universe_size.plot(ax=ax2) - ax2.set_ylabel('Universe Size') - ax3 = plt.subplot(313, sharex=ax1) - results.leverage.plot(ax=ax3) - ax3.set_ylabel('Leverage (USD)') - - plt.gcf().set_size_inches(18, 8) - plt.show() - -def _test_args(): - """ - Extra arguments to use when catalyst's automated tests run this example. - - Notes for testers: - - Gross leverage should be roughly 2.0 on every day except the first. - Net leverage should be roughly 2.0 on every day except the first. - - Longs Count should always be 3 after the first day. - Shorts Count should be 3 after the first day, except on 2013-10-30, when it - dips to 2 for a day because DELL is delisted. - """ - import pandas as pd - - return { - # We run through october of 2013 because DELL is in the test data and - # it went private on 2013-10-29. - 'start': pd.Timestamp('2013-10-07', tz='utc'), - 'end': pd.Timestamp('2013-11-30', tz='utc'), - 'capital_base': 100000, - } diff --git a/catalyst/examples/olmar.py b/catalyst/examples/olmar.py deleted file mode 100644 index f54cf941..00000000 --- a/catalyst/examples/olmar.py +++ /dev/null @@ -1,167 +0,0 @@ -import sys -import logbook -import numpy as np - -from catalyst.finance import commission - -catalyst_logging = logbook.NestedSetup([ - logbook.NullHandler(), - logbook.StreamHandler(sys.stdout, level=logbook.INFO), - logbook.StreamHandler(sys.stderr, level=logbook.ERROR), -]) -catalyst_logging.push_application() - -STOCKS = ['AMD', 'CERN', 'COST', 'DELL', 'GPS', 'INTC', 'MMM'] - - -# On-Line Portfolio Moving Average Reversion - -# More info can be found in the corresponding paper: -# http://icml.cc/2012/papers/168.pdf -def initialize(algo, eps=1, window_length=5): - algo.stocks = STOCKS - algo.sids = [algo.symbol(symbol) for symbol in algo.stocks] - algo.m = len(algo.stocks) - algo.price = {} - algo.b_t = np.ones(algo.m) / algo.m - algo.last_desired_port = np.ones(algo.m) / algo.m - algo.eps = eps - algo.init = True - algo.days = 0 - algo.window_length = window_length - - algo.set_commission(commission.PerShare(cost=0)) - - -def handle_data(algo, data): - algo.days += 1 - if algo.days < algo.window_length: - return - - if algo.init: - rebalance_portfolio(algo, data, algo.b_t) - algo.init = False - return - - m = algo.m - - x_tilde = np.zeros(m) - - # find relative moving average price for each asset - mavgs = data.history(algo.sids, 'price', algo.window_length, '1d').mean() - for i, sid in enumerate(algo.sids): - price = data.current(sid, "price") - # Relative mean deviation - x_tilde[i] = mavgs[sid] / price - - ########################### - # Inside of OLMAR (algo 2) - x_bar = x_tilde.mean() - - # market relative deviation - mark_rel_dev = x_tilde - x_bar - - # Expected return with current portfolio - exp_return = np.dot(algo.b_t, x_tilde) - weight = algo.eps - exp_return - variability = (np.linalg.norm(mark_rel_dev)) ** 2 - - # test for divide-by-zero case - if variability == 0.0: - step_size = 0 - else: - step_size = max(0, weight / variability) - - b = algo.b_t + step_size * mark_rel_dev - b_norm = simplex_projection(b) - np.testing.assert_almost_equal(b_norm.sum(), 1) - - rebalance_portfolio(algo, data, b_norm) - - # update portfolio - algo.b_t = b_norm - - -def rebalance_portfolio(algo, data, desired_port): - # rebalance portfolio - desired_amount = np.zeros_like(desired_port) - current_amount = np.zeros_like(desired_port) - prices = np.zeros_like(desired_port) - - if algo.init: - positions_value = algo.portfolio.starting_cash - else: - positions_value = algo.portfolio.positions_value + \ - algo.portfolio.cash - - for i, sid in enumerate(algo.sids): - current_amount[i] = algo.portfolio.positions[sid].amount - prices[i] = data.current(sid, "price") - - desired_amount = np.round(desired_port * positions_value / prices) - - algo.last_desired_port = desired_port - diff_amount = desired_amount - current_amount - - for i, sid in enumerate(algo.sids): - algo.order(sid, diff_amount[i]) - - -def simplex_projection(v, b=1): - """Projection vectors to the simplex domain - - Implemented according to the paper: Efficient projections onto the - l1-ball for learning in high dimensions, John Duchi, et al. ICML 2008. - Implementation Time: 2011 June 17 by Bin@libin AT pmail.ntu.edu.sg - Optimization Problem: min_{w}\| w - v \|_{2}^{2} - s.t. sum_{i=1}^{m}=z, w_{i}\geq 0 - - Input: A vector v \in R^{m}, and a scalar z > 0 (default=1) - Output: Projection vector w - - :Example: - >>> proj = simplex_projection([.4 ,.3, -.4, .5]) - >>> proj # doctest: +NORMALIZE_WHITESPACE - array([ 0.33333333, 0.23333333, 0. , 0.43333333]) - >>> print(proj.sum()) - 1.0 - - Original matlab implementation: John Duchi (jduchi@cs.berkeley.edu) - Python-port: Copyright 2013 by Thomas Wiecki (thomas.wiecki@gmail.com). - """ - - v = np.asarray(v) - p = len(v) - - # Sort v into u in descending order - v = (v > 0) * v - u = np.sort(v)[::-1] - sv = np.cumsum(u) - - rho = np.where(u > (sv - b) / np.arange(1, p + 1))[0][-1] - theta = np.max([0, (sv[rho] - b) / (rho + 1)]) - w = (v - theta) - w[w < 0] = 0 - return w - - -# Note: this function can be removed if running -# this algorithm on quantopian.com -def analyze(context=None, results=None): - import matplotlib.pyplot as plt - fig = plt.figure() - ax = fig.add_subplot(111) - results.portfolio_value.plot(ax=ax) - ax.set_ylabel('Portfolio value (USD)') - plt.show() - - -def _test_args(): - """Extra arguments to use when catalyst's automated tests run this example. - """ - import pandas as pd - - return { - 'start': pd.Timestamp('2004', tz='utc'), - 'end': pd.Timestamp('2008', tz='utc'), - } diff --git a/catalyst/examples/test.py b/catalyst/examples/test.py deleted file mode 100644 index 04d49c31..00000000 --- a/catalyst/examples/test.py +++ /dev/null @@ -1,232 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2014 Quantopian, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import numpy as np - -from catalyst.api import ( - order_target_percent, - record, - symbol, - get_open_orders, - set_commission, - set_slippage, - set_max_leverage, - schedule_function, - date_rules, - time_rules, - attach_pipeline, - pipeline_output, -) - -from catalyst.pipeline import Pipeline -from catalyst.pipeline.data import CryptoPricing -from catalyst.pipeline.factors.crypto import ( - VWAP, - SimpleMovingAverage, - MACDSignal, -) - -from catalyst.finance.commission import PerDollar -from catalyst.finance.slippage import VolumeShareSlippage - -TARGET_INVESTMENT_RATIO = 0.2 -SHORT_WINDOW = 30 -LONG_WINDOW = 100 - -def initialize(context): - context.asset = symbol('USDT_BTC') - context.i = 0 - context.macd_cur = None - context.macd_last = None - - set_commission(PerDollar(cost=0.001)) - set_slippage(VolumeShareSlippage()) - set_max_leverage(1.0) - - attach_pipeline(make_pipeline(), 'my_pipeline') - - schedule_function( - rebalance, - date_rules.every_day(), - ) - - -def before_trading_start(context, data): - context.pipeline_data = pipeline_output('my_pipeline') - -def make_pipeline(): - return Pipeline( - columns={ - 'price': CryptoPricing.close.latest, - 'short_mavg': VWAP(window_length=SHORT_WINDOW), - 'long_mavg': VWAP(window_length=LONG_WINDOW), - 'macd': MACDSignal( - fast_period=24, - slow_period=52, - signal_period=18, - ), - }, - ) - - -def handle_data(context, data): - pass - -def rebalance(context, data): - context.i += 1 - - # get pipeline data for asset of interest - pipeline_data = context.pipeline_data - pipeline_data = pipeline_data[pipeline_data.index == context.asset].iloc[0] - - context.macd_last = context.macd_cur - context.macd_cur = pipeline_data.macd - - # skip first LONG_WINDOW bars to fill windows - if context.i < 2: - return - - # retrieve long and short moving averages from pipeline - short_mavg = pipeline_data.short_mavg - long_mavg = pipeline_data.long_mavg - price = pipeline_data.price - - # check that order has not already been placed - open_orders = get_open_orders() - if context.asset not in open_orders: - # check that the asset of interest can currently be traded - if data.can_trade(context.asset): - if context.macd_cur < (0.98 * context.macd_last): - order_target_percent( - context.asset, - TARGET_INVESTMENT_RATIO, - #limit_price=(2 * price), - #stop_price=(0.5 * price), - ) - elif context.macd_cur > (1.02 * context.macd_last): - order_target_percent( - context.asset, - 0.0, - #limit_price=(2 * price), - #stop_price=(0.5 * price), - ) - - """ - # adjust portfolio based on moving averages - if short_mavg > long_mavg: - order_target_percent( - context.asset, - TARGET_INVESTMENT_RATIO, - #limit_price=(2 * price), - #stop_price=(0.5 * price), - ) - elif short_mavg < long_mavg: - order_target_percent( - context.asset, - 0.0, - #limit_price=(2 * price), - #stop_price=(0.5 * price), - ) - """ - - record( - USDT_BTC=price, - cash=context.portfolio.cash, - leverage=context.account.leverage, - short_mavg=short_mavg, - long_mavg=long_mavg, - ) - - - -# Note: this function can be removed if running -# this algorithm on quantopian.com -def analyze(context=None, results=None): - import matplotlib.pyplot as plt - # Plot the portfolio and asset data. - ax1 = plt.subplot(511) - results[['portfolio_value']].plot(ax=ax1) - ax1.set_ylabel('Portfolio value (USD)') - - ax2 = plt.subplot(512, sharex=ax1) - ax2.set_ylabel('USDT_BTC (USD)') - results[['USDT_BTC', 'short_mavg', 'long_mavg']].plot(ax=ax2) - - trans = results.ix[[t != [] for t in results.transactions]] - amounts = [t[0]['amount'] for t in trans.transactions] - print 'amounts:\n', amounts - buys = trans.ix[ - [t[0]['amount'] > 0 for t in trans.transactions] - ] - sells = trans.ix[ - [t[0]['amount'] < 0 for t in trans.transactions] - ] - print 'buys:', buys.head() - ax2.plot( - buys.index, results.USDT_BTC[buys.index], - '^', - markersize=10, - color='m', - ) - ax2.plot( - sells.index, results.USDT_BTC[sells.index], - 'v', - markersize=10, - color='k', - ) - - ax3 = plt.subplot(513, sharex=ax1) - results[['leverage', 'alpha', 'beta']].plot(ax=ax3) - ax3.set_ylabel('Leverage (USD)') - - ax4 = plt.subplot(514, sharex=ax1) - results[['cash']].plot(ax=ax4) - ax4.set_ylabel('Cash (USD)') - - results[[ - 'treasury', - 'algorithm', - 'benchmark', - ]] = results[[ - 'treasury_period_return', - 'algorithm_period_return', - 'benchmark_period_return', - ]] - - ax5 = plt.subplot(515, sharex=ax1) - results[[ - 'treasury', - 'algorithm', - 'benchmark', - ]].plot(ax=ax5) - ax5.set_ylabel('Dollars (USD)') - - plt.legend(loc=3) - - # Show the plot. - plt.gcf().set_size_inches(18, 8) - plt.show() - - -def _test_args(): - """Extra arguments to use when catalyst's automated tests run this example. - """ - import pandas as pd - - return { - 'start': pd.Timestamp('2014-01-01', tz='utc'), - 'end': pd.Timestamp('2014-11-01', tz='utc'), - }