コード例 #1
0
class AccountMetrics:
 
    def __init__(self,con):
        self.account_manager=AccountManager(con)
        self.security_data=SecurityData(con)

    def compare_vs_sharpe(self, acct1, acct2, acct2_vals): #acct1=S&P500 (unless comparing against S&P 500, where acct1=4% fixed rate); acct2=strategy
        acct1_returns = self.all_returns(acct1)
        acct2_returns = self.all_returns(acct2)
        acct1_total = sum(acct1_returns)
        acct2_total = sum(acct2_returns)
        stdev_val = stdev(acct2_vals)
        sharpe = (acct2_total - acct1_total) / stdev_val
        return sharpe
 
    def month_returns(self,account_id,as_of_date):
        my_stocks=self.account_manager.get_holdings(account_id,as_of_date)
        stock_ids=[ h[0] for h in my_stocks ]
        stock_returns=self.security_data.get_returns(stock_ids,as_of_date)
        my_value=0
        my_base=0
        for i in range(len(my_stocks)):
            if stock_returns[i] is not None:
                my_value=my_value+my_stocks[i][1]*(1+stock_returns[i])
            else:
                my_value=my_value+my_stocks[i][1]
            my_base=my_base+my_stocks[i][1]
        return (my_value - my_base)        
 
    def all_returns(self,account_id):
        dates=self.security_data.get_dates()
        annual=[]
        for d in dates:
            month=self.month_returns(account_id,d)
            annual.append(month)
        return annual

    def show_stats(self,vals):
        mean_val=mean(vals);
        variance_val=variance(vals)
        stdev_val=stdev(vals)
        mdd_val=mdd(vals)
        print("Average Return: %s" %mean_val)
        #print("The variance: %s" %variance_val)
        #print("The stdev: %s" %stdev_val)
        print("Maximum drawdown: %s" %mdd_val)
コード例 #2
0
    for d in dates:
        sp500_ids=security_data.get_sp500(d)
        if len(sp500_ids)<500:
            print("Warning! There are only %s securities on %s" %(len(sp500_ids), d))
        for id in sp500_ids:
            row=[new_id, id, 100, d]
            rows.append(row)
    account_manager.add_holdings(rows)
    account_manager.add_account(new_id,0,"Invest 100 each month in stocks in the SP500 index")
    all_acct=account_manager.get_accounts()

    print "... All Accounts ..."
    pprint(all_acct)
    print

    stocks_071231=account_manager.get_holdings(new_id,"2007-12-31")
    num=len(stocks_071231)
    print("The number of stocks in the account %s is %s on 2007-12-31" %(new_id,num))

    #### Show performance metrics for the new account ####

    rslt=account_metrics.all_returns(new_id)
    total=sum(rslt)
    up_months = 0
    down_months = 0
    for result in rslt:
            if result > 0:
                up_months += 1
            else:
                down_months += 1
    print("Account %s Monthly Returns: " %new_id)