Skip to content

Instantly share code, notes, and snippets.

@jameskyle
Last active February 20, 2016 22:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jameskyle/5e97f92e0a5cc1fb2e41 to your computer and use it in GitHub Desktop.
Save jameskyle/5e97f92e0a5cc1fb2e41 to your computer and use it in GitHub Desktop.
from __future__ import division
import timeit
import unittest
import datetime as dt
import marketsim as sim
from marketsim import compute_portfolio_stats
class Mc2P1Test(unittest.TestCase):
pass
def t_generator(expected, computed):
def t(self):
self.assertAlmostEqual(expected, computed)
return t
if __name__ == '__main__':
tests = {
"orders_short": {
"final_value": 998035.0,
"file": "orders-short.csv",
"sharpe": -0.446948390642,
"sharpe_spy": 0.882168679776,
"cumulative_return": -0.001965,
"cumulative_return_spy": 0.00289841448894,
"stdev": 0.00634128215394,
"stdev_spy": 0.00544933521991,
"average_daily": -0.000178539446839,
"average_daily_spy": 0.000302827205547,
},
"orders": {
"final_value": 1133860.0,
"file": "orders.csv",
"sharpe": 1.21540888742,
"sharpe_spy": 0.0183389807443,
"cumulative_return": 0.13386,
"cumulative_return_spy": -0.0224059854302,
"stdev": 0.00720514136323,
"stdev_spy": 0.0149716091522,
"average_daily": 0.000551651296638,
"average_daily_spy": 1.7295909534e-05,
},
"orders2": {
"final_value": 1078752.6,
"file": "orders2.csv",
"sharpe": 0.788982285751,
"sharpe_spy": -0.177203019906,
"cumulative_return": 0.0787526,
"cumulative_return_spy": -0.0629581516192,
"stdev": 0.00711102080156,
"stdev_spy": 0.0150564855724,
"average_daily": 0.000353426354584,
"average_daily_spy": -0.000168071648902,
},
"orders3": {
"final_value": 1050160.0,
"file": "orders3.csv",
"sharpe": 1.03455887842,
"sharpe_spy": 0.247809335326,
"cumulative_return": 0.05016,
"cumulative_return_spy": 0.0135380980508,
"stdev": 0.00560508094997,
"stdev_spy": 0.00840618502785,
"average_daily": 0.000365289198877,
"average_daily_spy": 0.000131224926273,
},
"orders_leverage_1": {
"final_value": 1050160.0,
"file": "orders-leverage-1.csv",
"sharpe": 1.19402406143,
"sharpe_spy": 0.0814792462178,
"cumulative_return": 0.05016,
"cumulative_return_spy": 0.000968694624926,
"stdev": 0.00647534272091,
"stdev_spy": 0.00801527501158,
"average_daily": 0.000487052265169,
"average_daily_spy": 4.11400826828e-05,
},
"orders_leverage_2": {
"final_value": 1074650.0,
"file": "orders-leverage-2.csv",
"sharpe": 4.92529481246,
"sharpe_spy": 2.65553881849,
"cumulative_return": 0.07465,
"cumulative_return_spy": 0.0482142153967,
"stdev": 0.00651837064888,
"stdev_spy": 0.00801128120646,
"average_daily": 0.00202241842159,
"average_daily_spy": 0.00134015293001,
},
"orders_leverage_3": {
"final_value": 1050160.0,
"file": "orders-leverage-3.csv",
"sharpe": 1.03455887842,
"sharpe_spy": 0.247809335326,
"cumulative_return": 0.05016,
"cumulative_return_spy": 0.0135380980508,
"stdev": 0.00560508094997,
"stdev_spy": 0.00840618502785,
"average_daily": 0.000365289198877,
"average_daily_spy": 0.000131224926273,
},
}
for k, values in tests.iteritems():
filename = "orders/{0}".format(values['file'])
portvals = sim.compute_portvals(filename, 1000000)
results = compute_portfolio_stats(portvals, [1])
# results = (final value, ...
# cumulative return, average daily return, stdev, sharpe)
name = "test_{0}_{1}"
for idx, key in enumerate(('final_value',
'cumulative_return',
'average_daily',
'stdev',
'sharpe',
)):
expected, computed = values[key], results[idx]
t = t_generator(expected, computed)
setattr(Mc2P1Test, name.format(k, key), t)
# time constraint test
def wrapper():
portvals = sim.compute_portvals(filename, 1000000)
number = 10
timer = timeit.Timer(wrapper)
result = timer.timeit(number=number)
print("Ran 10 trials with mean time: {0}".format(result / number))
t = lambda self: self.assertLessEqual(result / number, 10)
setattr(Mc2P1Test, "test_time_limit_{0}".format(k), t)
unittest.main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment