def cal_sharpe(value): #average = cal_average(value) #std_value = cal_std(value) #sharpe_ratio = (sqrt(days)*average)/std_value daily_ret = daily_return(value) sharpe_ratio = tsu.get_sharpe_ratio(daily_ret) return sharpe_ratio
def cal_sharpe(value): #average = cal_average(value) #std_value = cal_std(value) #sharpe_ratio = (sqrt(days)*average)/std_value daily_ret = daily_return(value) sharpe_ratio = tsu.get_sharpe_ratio(daily_ret) return sharpe_ratio
def simulate(symbols, allocations, startday, endday): """ @symbols: list of symbols @allocations: list of weights @startday: ... @endday: ... """ timeofday = dt.timedelta(hours=16) timestamps = du.getNYSEdays(startday,endday,timeofday) dataobj = da.DataAccess('Yahoo') close = dataobj.get_data(timestamps, symbols, "close", verbose=False) close = close.values norm_close = close / close[0, :] allocations = allocations / np.sum(allocations) portfolio_value = np.dot(norm_close, allocations) portfolio_return = portfolio_value.copy() tsu.returnize0(portfolio_return) sharpe = tsu.get_sharpe_ratio(portfolio_return) accum = portfolio_value[-1] / portfolio_value[0] average = np.mean(portfolio_return) stddev = np.std(portfolio_return) result = {"sharpe":sharpe, "cumulative_return":accum, "average":average, "stddev":stddev} return result
def overall_metrics(self, timestamp='one_month', metrics=None, save=False, db_id=None): ''' Use zipline results to compute some performance indicators and store it in database ''' perfs = dict() # If no rolling perfs provided, computes it if metrics is None: metrics = self.rolling_performances(timestamp=timestamp, save=False, db_id=db_id) riskfree = np.mean(metrics['Treasury.Returns']) #NOTE Script args define default database table name (test), make it consistent if db_id is None: db_id = self.backtest_cfg['algorithm'] + pd.datetime.strftime(pd.datetime.now(), format='%Y%m%d') perfs['Name'] = db_id perfs['Sharpe.Ratio'] = tsu.get_sharpe_ratio(metrics['Returns'].values, risk_free = riskfree) perfs['Returns'] = (((metrics['Returns'] + 1).cumprod()) - 1)[-1] perfs['Max.Drawdown'] = max(metrics['Max.Drawdown']) perfs['Volatility'] = np.mean(metrics['Volatility']) perfs['Beta'] = np.mean(metrics['Beta']) perfs['Alpha'] = np.mean(metrics['Alpha']) perfs['Benchmark.Returns'] = (((metrics['Benchmark.Returns'] + 1).cumprod()) - 1)[-1] if save: self.feeds.stock_db.save_performances(perfs) return perfs
def get_sharpe_ratio(fund_ts): """ @summary Returns daily computed Sharpe ratio of fund time series @param fund_ts: pandas time series of daily fund values @return Sharpe ratio of fund time series """ return tsu.get_sharpe_ratio(tsu.daily(fund_ts))
def analyzeValue(valueFilename=valueFilename, benchmark=benchmark,figureName=figureName, closefield=closefield): valueCSV = open(valueFilename, 'rU') reader = csv.reader(valueCSV, delimiter=',') timestamp = [] values = [] for row in reader: timestamp.append(dt.date(int(row[0]),int(row[1]),int(row[2]))) values.append(float(row[3])) # # Plot portfolio value plt.clf() fig = plt.figure() ax = fig.add_subplot(111) ax.plot(timestamp, values) # adjust tick size for tick in ax.xaxis.get_major_ticks(): tick.label.set_fontsize(6) plt.plot(timestamp, values) savefig(figureName,format='pdf') # # Compute Cumulative Return, Sharpe ratio, std of daily return for the portfolio # if debug: print "-----Before calculate-----" for v in values: print v daily_returns0 = tsu.daily(values) if debug: print "-----After calculate-----" for v in daily_returns0: print v final_return = values[len(values)-1]/values[0]-1 print "Total Return:" , final_return mean = np.average(daily_returns0) print "Expected Return:", mean std2 = np.std(daily_returns0) print "Standard Deviation:", std2 sharp_ratio = tsu.get_sharpe_ratio(daily_returns0) print "Calculated Sharpe Ratio:", tsu.sqrt(252) * mean/std2 print "Get Sharpe Ration from QSTK:", sharp_ratio # # Calculate Benchmark metrics # timeofday = dt.timedelta(hours=h) timestamps = du.getNYSEdays(timestamp[0],timestamp[len(timestamp)-1],timeofday) dataobj = da.DataAccess('Yahoo') print "reading benchmark data...",benchmark close = dataobj.get_data(timestamps, benchmark, closefield) if debug: for time in timestamps: print time, close[benchmark[0]][time] close = (close.fillna(method='ffill')).fillna(method='backfill') bValues = close.values print final_return_b = (bValues[len(bValues)-1]/bValues[0])-1 print benchmark,"Total Return:" , final_return_b # daily returns b_daily_returns0 = tsu.daily(bValues) mean = np.average(b_daily_returns0) print benchmark, "Expected Return:", mean std2 = np.std(b_daily_returns0) print benchmark,"Standard Deviation:", std2 sharp_ratio = tsu.get_sharpe_ratio(b_daily_returns0) print benchmark,"Calculated Sharpe Ratio:", tsu.sqrt(252) * mean/std2 print benchmark,"Get Sharpe Ration from QSTK:", sharp_ratio
daily_returns0 = tsu.daily(values) if debug: print "-----After calculate-----" for v in daily_returns0: print v final_return = values[len(values)-1]/values[0]-1 print "Total Return:" , final_return mean = np.average(daily_returns0) print "Expected Return:", mean std2 = np.std(daily_returns0) print "Standard Deviation:", std2 sharp_ratio = tsu.get_sharpe_ratio(daily_returns0) print "Calculated Sharpe Ratio:", tsu.sqrt(252) * mean/std2 print "Get Sharpe Ration from QSTK:", sharp_ratio # # Calculate Benchmark metrics # timeofday = dt.timedelta(hours=h) timestamps = du.getNYSEdays(timestamp[0],timestamp[len(timestamp)-1],timeofday) dataobj = da.DataAccess('Yahoo') print "reading benchmark data...",benchmark close = dataobj.get_data(timestamps, benchmark, closefield) if debug: for time in timestamps: