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
Exemple #2
0
    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']))
Exemple #3
0
    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)
Exemple #4
0
    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)
Exemple #5
0
    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)
Exemple #6
0
    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)
Exemple #7
0
    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)
Exemple #8
0
    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)
Exemple #9
0
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
Exemple #10
0
    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.