def print_port(of, sv=1000000, output=False, lvrg=False, symbol='SPY'):
'''
:param of: .csv order file
:param sv: starting value of the portfolio
:param output: whether to output info
:param lvrg: whether to consider leverage of the portfolio
:param symbol: stock symbol to consider
:return: void
'''
portvals, start_date, end_date = compute_portvals(orders_file=of, start_val=sv, lvrg=lvrg)
if isinstance(portvals, pd.DataFrame):
portvals = portvals[portvals.columns[0]] # just get the first column
else:
"warning, code did not return a DataFrame"
cum_ret, avg_daily_ret, std_daily_ret, sharpe_ratio = compute_portfolio_stats(portvals)
# SPX data originally has a'$" in front which creates problem as an improper name
symb_vals = get_data([symbol], pd.date_range(start_date, end_date))
cum_ret_SPY, avg_daily_ret_SPY, std_daily_ret_SPY, sharpe_ratio_SPY = compute_portfolio_stats(symb_vals.SPY_test)
if output:
# Compare portfolio against $SPX
print "Date Range: {} to {}".format(start_date, end_date)
print
print "Sharpe Ratio of Fund: {}".format(sharpe_ratio)
print "Sharpe Ratio of SPY : {}".format(sharpe_ratio_SPY)
print
print "Cumulative Return of Fund: {}".format(cum_ret)
print "Cumulative Return of SPY : {}".format(cum_ret_SPY)
print
print "Standard Deviation of Fund: {}".format(std_daily_ret)
print "Standard Deviation of SPY : {}".format(std_daily_ret_SPY)
print
print "Average Daily Return of Fund: {}".format(avg_daily_ret)
print "Average Daily Return of SPY : {}".format(avg_daily_ret_SPY)
print
print "Final Portfolio Value: {}".format(portvals[-1])
norm_port = portvals / portvals[0]
norm_SPY = symb_vals.SPY_test / symb_vals.SPY_test[0]
plt.plot(norm_port)
plt.plot(norm_SPY)
plt.title('Daily portfolio value and SPY')
plt.ylabel('Normalized price')
plt.legend(['Portfolio', 'SPY'], loc=2)
plt.show()
teststrategy.py 文件源码
python
阅读 20
收藏 0
点赞 0
评论 0
评论列表
文章目录