def check_analysis(self, name, start_date, end_date, symbols, allocations, sv, rfr, sf, v_cr, v_adr, v_sddr, v_sr, v_ev): print name cr, adr, sddr, sr, ev = assess_portfolio(sd=start_date, ed=end_date, syms=symbols, allocs=allocations, sv=sv, rfr=rfr, gen_plot=False) np.testing.assert_almost_equal([v_cr, v_adr, v_sddr, v_sr, v_ev], [cr, adr, sddr, sr, ev], 5) print ev
def _run_test(self, params, results): start_date = params['start_date'] end_date = params['end_date'] symbols = params['symbols'] allocations = params['allocations'] start_value = params['start_value'] risk_free_rate = params['risk_free_rate'] sample_freq = params['sample_freq'] cumulative_return, \ average_daily_return, \ volatility, \ sharpe_ratio, \ end_value = analysis.assess_portfolio(sd=start_date, ed=end_date, syms=symbols, allocs=allocations, sv=start_value, rfr=risk_free_rate, sf=sample_freq, gen_plot=False) self.assertAlmostEqual( cumulative_return, results['cumulative_return'], delta=1e-8, msg="Incorrect cumulative return {}, expected to be {}".format( cumulative_return, results['cumulative_return'])) self.assertAlmostEqual( average_daily_return, results['average_daily_return'], delta=1e-8, msg="Incorrect avg. daily return {}, expected to be {}".format( average_daily_return, results['average_daily_return'])) self.assertAlmostEqual( volatility, results['volatility'], delta=1e-8, msg="Incorrect volatility {}, expected to be {}".format( volatility, results['volatility'])) self.assertAlmostEqual( sharpe_ratio, results['sharpe_ratio'], delta=1e-8, msg="Incorrect sharpe ratio {}, expected to be {}".format( sharpe_ratio, results['sharpe_ratio'])) if results['end_value']: # The reason behind lowering the delta to 1e-5 here is # because portfolio values are given only up to the 5th decimal self.assertAlmostEqual( end_value, results['end_value'], delta=1e-5, msg="Incorrect end value {}, expected to be {}".format( end_value, results['end_value']))
def test_results1(self): start_date = dt.datetime(2010, 1, 1) end_date = dt.datetime(2010, 12, 31) symbols = ['GOOG', 'AAPL', 'GLD', 'XOM'] allocations = [0.2, 0.3, 0.4, 0.1] start_val = 1000000 risk_free_rate = 0.0 sample_freq = 252 cr, adr, sddr, sr, ev = assess_portfolio(sd=start_date, ed=end_date, \ syms=symbols, \ allocs=allocations, \ sv=start_val, \ gen_plot=False) np.testing.assert_almost_equal([0.255646784534, 0.000957366234238, 0.0100104028, 1.51819243641, 1255646.78453], [cr, adr, sddr, sr, ev], 5)
def test_results3(self): start_date = dt.datetime(2010, 6, 1) end_date = dt.datetime(2010, 12, 31) symbols = ['GOOG', 'AAPL', 'GLD', 'XOM'] allocations = [0.2, 0.3, 0.4, 0.1] start_val = 1000000 risk_free_rate = 0.0 sample_freq = 252 cr, adr, sddr, sr, ev = assess_portfolio(sd=start_date, ed=end_date, \ syms=symbols, \ allocs=allocations, \ sv=start_val, \ gen_plot=False) np.testing.assert_almost_equal( [0.205113938792, 0.00129586924366, 0.00929734619707, 2.21259766672, 1205113.93879], [cr, adr, sddr, sr, ev], 5)
def test_results2(self): start_date = dt.datetime(2010, 1, 1) end_date = dt.datetime(2010, 12, 31) symbols = ['AXP', 'HPQ', 'IBM', 'HNZ'] allocations = [0.0, 0.0, 0.0, 1.0] start_val = 1000000 risk_free_rate = 0.0 sample_freq = 252 cr, adr, sddr, sr, ev = assess_portfolio(sd=start_date, ed=end_date, \ syms=symbols, \ allocs=allocations, \ sv=start_val, \ gen_plot=False) np.testing.assert_almost_equal( [0.198105963655, 0.000763106152672, 0.00926153128768, 1.30798398744, 1198105.96365], [cr, adr, sddr, sr, ev], 5)
def test_example1(self): start_date = dt.datetime(2010, 1, 1) end_date = dt.datetime(2010, 12, 31) symbols = ['GOOG', 'AAPL', 'GLD', 'XOM'] allocations = [0.2, 0.3, 0.4, 0.1] start_val = 1000000 risk_free_rate = 0.0 sample_freq = 252.0 # Assess the portfolio cr, adr, sddr, sr, ev = a.assess_portfolio(sd=start_date, ed=end_date, syms=symbols, allocs=allocations, sv=start_val, gen_plot=False) self.assertAlmostEqual(0.255646784534, cr, 3, "Cumulative Return {} is incorrect".format(cr), delta=None) self.assertAlmostEqual(1.51819243641, sr, 3, "Sharpe Ratio {} is incorrect".format(sr), delta=None) self.assertAlmostEqual(0.000957366234238, adr, 5, "Avg Daily Return {} is incorrect".format(adr), delta=None) self.assertAlmostEqual(0.0100104028, sddr, 5, "Volatility (stdev of daily returns) {} is incorrect".format(sddr), delta=None)
def test_example3(self): start_date = dt.datetime(2010, 6, 1) end_date = dt.datetime(2010, 12, 31) symbols = ['GOOG', 'AAPL', 'GLD', 'XOM'] allocations = [0.2, 0.3, 0.4, 0.1] start_val = 1000000 risk_free_rate = 0.0 sample_freq = 252.0 # Assess the portfolio cr, adr, sddr, sr, ev = a.assess_portfolio(sd=start_date, ed=end_date, syms=symbols, allocs=allocations, sv=start_val, gen_plot=False) self.assertAlmostEqual(0.205113938792, cr, 3, "Cumulative Return {} is incorrect".format(cr), delta=None) self.assertAlmostEqual(2.21259766672, sr, 3, "Sharpe Ratio {} is incorrect".format(sr), delta=None) self.assertAlmostEqual(0.00129586924366, adr, 5, "Avg Daily Return {} is incorrect".format(adr), delta=None) self.assertAlmostEqual(0.00929734619707, sddr, 5, "Volatility (stdev of daily returns) {} is incorrect".format(sddr), delta=None)
def test_example2(self): start_date = dt.datetime(2010, 1, 1) end_date = dt.datetime(2010, 12, 31) symbols = ['AXP', 'HPQ', 'IBM', 'HNZ'] allocations = [0.0, 0.0, 0.0, 1.0] start_val = 1000000 risk_free_rate = 0.0 sample_freq = 252.0 # Assess the portfolio cr, adr, sddr, sr, ev = a.assess_portfolio(sd=start_date, ed=end_date, syms=symbols, allocs=allocations, sv=start_val, gen_plot=False) self.assertAlmostEqual(0.198105963655, cr, 3, "Cumulative Return {} is incorrect".format(cr), delta=None) self.assertAlmostEqual(1.30798398744, sr, 3, "Sharpe Ratio {} is incorrect".format(sr), delta=None) self.assertAlmostEqual(0.000763106152672, adr, 5, "Avg Daily Return {} is incorrect".format(adr), delta=None) self.assertAlmostEqual(0.00926153128768, sddr, 5, "Volatility (stdev of daily returns) {} is incorrect".format(sddr), delta=None)
def run_test(start_date, end_date, symbols, allocations, start_val, risk_free_rate, sample_freq): # Assess the portfolio cr, adr, sddr, sr, ev = analysis.assess_portfolio(sd = start_date, ed = end_date,\ syms = symbols, \ allocs = allocations,\ sv = start_val, \ rfr = risk_free_rate, \ sf = sample_freq, \ gen_plot = False) # Print statistics print "Start Date:", start_date print "End Date:", end_date print "Symbols:", symbols print "Allocations:", allocations print "Sharpe Ratio:", sr print "Volatility (stdev of daily returns):", sddr print "Average Daily Return:", adr print "Cumulative Return:", cr print "End Value:", ev
def try_assess_portfolio(self, portvals): statsMethodExists = True # First try from previous assignment file try: cum_ret, avg_daily_ret, std_daily_ret, sharpe_ratio = assess_portfolio( portvals) except AttributeError: statsMethodExists = False if statsMethodExists: return statsMethodExists, cum_ret, avg_daily_ret, std_daily_ret, sharpe_ratio # Otherwise try this function try: cum_ret, avg_daily_ret, std_daily_ret, sharpe_ratio = marketsim_editedv4.assess_my_portfolio( portvals) except AttributeError: statsMethodExists = False if statsMethodExists: return statsMethodExists, cum_ret, avg_daily_ret, std_daily_ret, sharpe_ratio return False, 0., 0., 0., 0.