Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
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
Esempio n. 4
0
    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
Esempio n. 5
0
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))
Esempio n. 6
0
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
Esempio n. 7
0
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: