Example #1
0
from commonrandom import arbitrary_timeindex, skew_returns_annualised
from matplotlib.pyplot import show, hist
from common import DAYS_IN_YEAR, ROOT_DAYS_IN_YEAR, account_curve
import pandas as pd
import numpy as np
import scipy.stats as st

length_backtest_years=2
number_of_random_curves=100
annualSR=0.5
want_skew=0.0

length_bdays=length_backtest_years*DAYS_IN_YEAR
print length_bdays

random_curves=[skew_returns_annualised(annualSR=annualSR, want_skew=want_skew, size=length_bdays) 
               for NotUsed in range(number_of_random_curves)]

random_curves_npa=np.array(random_curves).transpose()

pddf_rand_data=pd.DataFrame(random_curves_npa, index=arbitrary_timeindex(length_bdays), columns=[str(i) for i in range(number_of_random_curves)])

acccurves_rand_data=[account_curve(pddf_rand_data[x]) for x in pddf_rand_data]

#results=[x.worst_drawdown() for x in acccurves_rand_data]
#results=[x.avg_drawdown() for x in acccurves_rand_data]
#print results
Example #2
0
                            want_skew=want_skew,
                            size=length_bdays)
    for NotUsed in range(number_of_random_curves)
]

## Turn into a dataframe

random_curves_npa = np.array(random_curves).transpose()
pddf_rand_data = pd.DataFrame(
    random_curves_npa,
    index=arbitrary_timeindex(length_bdays),
    columns=[str(i) for i in range(number_of_random_curves)])

## This is a nice representation as well
acccurves_rand_data = [
    account_curve(pddf_rand_data[x]) for x in pddf_rand_data
]
"""
Plot the curves, just for interest
"""

plot_random_curves(pddf_rand_data)
show()
"""
Get the statistic we are interested in

Change 'function_to_apply' to get what you want

"""

function_to_apply = np.percentile
 (adj_want_mean, adj_want_skew, adj_want_stdev)=adj_moments_for_rho(want_rho, want_mean, want_skew, want_stdev)
 
 avg_annual_returns_this_scenario=[]
 avg_drawdowns_this_scenario=[]
 max_drawdowns_this_scenario=[]
 avg_avg_ratio_this_scenario=[]
 avg_max_ratio_this_scenario=[]
 
 ## Window '1000' is no ovelay at all
 for N_length in N_windows:
     print "N_length: %d" % N_length
     ## Generate a lot of random data
     many_curves_raw=[arbitrary_timeseries(autocorr_skewed_returns(want_rho, adj_want_mean, adj_want_stdev, adj_want_skew, size=curve_length)) for notused in range(monte_runs)]
     
     ## Apply the overlay
     many_curves=[account_curve(apply_overlay(x, N_length, period_stdev, costs_SR)) for x in many_curves_raw]
     
     ## Calc statistics
     annual_returns_these_curves=[np.mean(x)*period_adj for x in many_curves]
     avg_drawdowns_these_curves=[x.avg_drawdown() for x in many_curves]
     max_drawdowns_these_curves=[x.worst_drawdown() for x in many_curves]
     
     ## Add results
     avg_annual_returns_this_scenario.append(np.mean(annual_returns_these_curves))
     avg_drawdowns_this_scenario.append(np.nanmean(avg_drawdowns_these_curves))
     max_drawdowns_this_scenario.append(np.nanmean(max_drawdowns_these_curves))
     avg_avg_ratio_this_scenario.append(np.nanmean([divxx(x) for x in zip(annual_returns_these_curves, avg_drawdowns_these_curves)]))
     avg_max_ratio_this_scenario.append(np.nanmean([divxx(x) for x in zip(annual_returns_these_curves, max_drawdowns_these_curves)]))
     
 avg_annual_returns.append(avg_annual_returns_this_scenario)
 avg_drawdowns.append(avg_drawdowns_this_scenario)
    for N_length in N_windows:
        print "N_length: %d" % N_length
        ## Generate a lot of random data
        many_curves_raw = [
            arbitrary_timeseries(
                autocorr_skewed_returns(want_rho,
                                        adj_want_mean,
                                        adj_want_stdev,
                                        adj_want_skew,
                                        size=curve_length))
            for notused in range(monte_runs)
        ]

        ## Apply the overlay
        many_curves = [
            account_curve(apply_overlay(x, N_length, period_stdev, costs_SR))
            for x in many_curves_raw
        ]

        ## Calc statistics
        annual_returns_these_curves = [
            np.mean(x) * period_adj for x in many_curves
        ]
        avg_drawdowns_these_curves = [x.avg_drawdown() for x in many_curves]
        max_drawdowns_these_curves = [x.worst_drawdown() for x in many_curves]

        ## Add results
        avg_annual_returns_this_scenario.append(
            np.mean(annual_returns_these_curves))
        avg_drawdowns_this_scenario.append(
            np.nanmean(avg_drawdowns_these_curves))