Hi - I am trying to run a minimum variance portfolio optimization and scipy.optimize.minimize keeps giving me a very generic error. Can anybody help me out? Debug shows it errors out when executing the minimize() function. This code runs perfectly offline when I replicate the price data (using Python 3.4 and scipy 0.14.0)
import datetime
from pandas import Timestamp
import numpy as np
import pandas as pd
import math
from scipy.optimize import minimize
def initialize(context):
context.secs = [
sid(8554),
sid(21769),
sid(14520),
sid(24705),
sid(26669),
sid(33072),
sid(23870),
sid(23921),
sid(28054),
sid(26981)
]
context.cov_lookback = 60
set_commission(commission.PerTrade(cost=0.05))
schedule_function(
func=rebalance,
date_rule=date_rules.week_start(days_offset=1),
time_rule=time_rules.market_open(minutes=1)
)
def meanvaropt(x, cov_matrix):
scaling = 1/x.sum()
x = x * scaling
port_var_components = cov_matrix * x
port_var_components = port_var_components.transpose() * x
port_var = port_var_components.sum()
return port_var
def rebalance(context, data):
df = history(252, '1d', 'price').filter(items = context.secs)
securities_df = pd.DataFrame(data=np.ones(len(df.columns)),index=df.columns.values,columns=['weight'])
# calculate covariance matrix for selected stocks
selected_returns = df.filter(items = securities_df.index).pct_change()[1:]
selected_returns_cov = selected_returns[len(selected_returns) - context.cov_lookback:].cov()
# solve minimum variance optimization for portfolio of selected securities
solution = minimize(meanvaropt,
securities_df['weight'].values,
args = [selected_returns_cov.as_matrix()],
method = 'L-BFGS-B',
bounds = [(0.,1.) for _ in range(len(securities_df['weight']))],
options = {'disp':True}
)
scaling = 1 / solution.x.sum()
securities_df['weight'] = solution.x * scaling
for sec in securities_df.index:
order_target_percent(sec, securities_df['weight'][sec])
def handle_data(context, data):
return