def save(filename, title, prices, returns, decisions): padding = zeros(len(prices) - len(returns)) returns = append(padding, returns) decisions = append(padding, decisions) x_axis = range(len(prices)) # Two subplots, the axes array is 1-d nplots = 4 f, axarr = plt.subplots(nplots, sharex=True) axarr[0].plot(x_axis, array(prices) / prices[0]) axarr[0].set_ylabel('Prices') axarr[0].set_title(title) axarr[1].plot(x_axis, wealth(returns)) axarr[1].set_ylabel('Wealth') #axarr[2].plot(x_axis, sharpe(returns)) #axarr[2].set_ylabel('Sharpe') axarr[2].plot(x_axis, returns) axarr[2].set_ylabel('Returns') axarr[3].plot(x_axis, decisions) axarr[3].set_ylabel('Decisions') for i in xrange(nplots): axarr[i].locator_params(axis='y', nbins=6) axarr[nplots - 1].set_xlabel('Time step (t)') plt.savefig(filename, bbox_inches='tight')
def run(self, trX, trY, tsX, tsY, maxiter, validating=False): self.scale(trX, tsX) weights = self.model.weights(trX, seed=1) gradients = zeros(weights.shape) trR = zeros(maxiter + 1) tsR = zeros(maxiter + 1) costs = [] for i in range(maxiter): #rs = RandomState(i) #r = rs.randint(0, trX.shape[0]/2) #tempX = trX[r:, :] #tempY = trY[r:] gradient = self.model.grad(weights, trX, trY) gradients += power(gradient, 2) rate = 1. / sqrt(gradients) weights = weights - rate * gradient if validating: costs.append(self.model.cost(weights, tsX, tsY)) # Calculate returns and decisions on test set. returns, decisions = self.model.returns(weights, tsX, tsY) s = sharpe(returns) w = wealth(returns) return returns, decisions
def run(self, trX, trY, tsX, tsY, maxiter, validating=False): self.scale(trX, tsX) weights = self.model.weights(trX, seed=1) gradients = zeros(weights.shape) trR = zeros(maxiter+1) tsR = zeros(maxiter+1) costs = [] for i in range(maxiter): #rs = RandomState(i) #r = rs.randint(0, trX.shape[0]/2) #tempX = trX[r:, :] #tempY = trY[r:] gradient = self.model.grad(weights, trX, trY) gradients += power(gradient, 2) rate = 1. / sqrt(gradients) weights = weights - rate*gradient if validating: costs.append(self.model.cost(weights, tsX, tsY)) # Calculate returns and decisions on test set. returns, decisions = self.model.returns(weights, tsX, tsY) s = sharpe(returns) w = wealth(returns) return returns, decisions
def save(filename, title, prices, returns, decisions): padding = zeros(len(prices) - len(returns)) returns = append(padding, returns) decisions = append(padding, decisions) x_axis = range(len(prices)) # Two subplots, the axes array is 1-d nplots = 4 f, axarr = plt.subplots(nplots, sharex=True) axarr[0].plot(x_axis, array(prices) / prices[0]) axarr[0].set_ylabel("Prices") axarr[0].set_title(title) axarr[1].plot(x_axis, wealth(returns)) axarr[1].set_ylabel("Wealth") # axarr[2].plot(x_axis, sharpe(returns)) # axarr[2].set_ylabel('Sharpe') axarr[2].plot(x_axis, returns) axarr[2].set_ylabel("Returns") axarr[3].plot(x_axis, decisions) axarr[3].set_ylabel("Decisions") for i in xrange(nplots): axarr[i].locator_params(axis="y", nbins=6) axarr[nplots - 1].set_xlabel("Time step (t)") plt.savefig(filename, bbox_inches="tight")
def train(self, window=100, lookback=5, slide=50, maxiter=100): returns = array([]) decisions = array([]) self.dataset.reset(window=window, lookback=lookback, slide=slide) trX, trY, vsX, vsY = self.dataset.gen() while(self.dataset.can_gen()): score = float('-inf') best = None for model in self.models: self.model = model r, _ = self.run(trX, trY, vsX, vsY, maxiter, validating=True) w = wealth(r)[-1] if w > score: score = w best = model next_trX, next_trY, tsX, tsY = self.dataset.gen() self.model = best r, d = self.run(next_trX, next_trY, tsX, tsY, maxiter) returns = append(returns, r) decisions = append(decisions, d) print "Wealth: %f\tModel: %s" % (wealth(r)[-1], self.model) # Done with loop carry over to next iteration. trX = next_trX trY = next_trY vsX = tsX vsY = tsY return returns, decisions
def train(self, window=100, lookback=5, slide=50, maxiter=100): returns = array([]) decisions = array([]) self.dataset.reset(window=window, lookback=lookback, slide=slide) trX, trY, vsX, vsY = self.dataset.gen() while (self.dataset.can_gen()): score = float('-inf') best = None for model in self.models: self.model = model r, _ = self.run(trX, trY, vsX, vsY, maxiter, validating=True) w = wealth(r)[-1] if w > score: score = w best = model next_trX, next_trY, tsX, tsY = self.dataset.gen() self.model = best r, d = self.run(next_trX, next_trY, tsX, tsY, maxiter) returns = append(returns, r) decisions = append(decisions, d) print "Wealth: %f\tModel: %s" % (wealth(r)[-1], self.model) # Done with loop carry over to next iteration. trX = next_trX trY = next_trY vsX = tsX vsY = tsY return returns, decisions
hidden = 10 model = Linear(delta=delta, lmb=lmb) #model = Nonlinear(delta=delta, lmb=lmb, hidden=hidden) data = Dataset(cov, [jnj, nvs, pfe]) trainer = AdaGradTrainer(data, model) returns, decisions = trainer.train( window=window, lookback=lookback, slide=slide, maxiter=40) padding = zeros(len(jnj)-len(returns)) returns = append(padding, returns) decisions = append(padding, decisions) print "Wealth: ", wealth(returns)[-1] x_axis = range(len(jnj)) # Two subplots, the axes array is 1-d f, axarr = plt.subplots(2, sharex=True) axarr[0].plot(x_axis, jnj / jnj[0], 'r', label='Prices') axarr[0].plot(x_axis, wealth(returns), 'b', label='Wealth') axarr[0].set_title('Performance') axarr[0].legend(loc="upper left") #axarr[1].plot(x_axis, sharpe(returns)) #axarr[1].set_title('Sharpe') #axarr[3].plot(x_axis, returns) #axarr[3].set_title('Returns') axarr[1].plot(x_axis, decisions)
# filename = 'figures/synthetic_noside_single_w_%i_s_%i_l_%i_d_%f.pdf' % ( # window, slide, lookback, delta) # title = 'Single Layer - Synthetic (No Side Information)' # print "%s\tWealth: %f\tSharpe: %f" % (filename, # wealth(returns)[-1], sharpe(returns)[-1]) # plotter.save(filename, title, series, returns, decisions) for window in [200]: for slide in [5]: for lookback in [10]: for delta in [0.001]: models = [] for hidden in [4, 6, 8]: for lmb in [0.0, 0.0001, 0.001, 0.01]: models.append( Nonlinear(delta=delta, lmb=lmb, hidden=hidden)) trainer = ValidatingTrainer(data, models) returns, decisions = trainer.train(window=window, lookback=lookback, slide=slide, maxiter=20) filename = 'figures/synthetic_noside_multi_w_%i_s_%i_l_%i_d_%f.pdf' % ( window, slide, lookback, delta) title = 'Multiple Layer - Synthetic (No Side Information)' print "%s\tWealth: %f\tSharpe: %f" % ( filename, wealth(returns)[-1], sharpe(returns)[-1]) plotter.save(filename, title, series, returns, decisions)
model = Linear(delta=delta, lmb=lmb) #model = Nonlinear(delta=delta, lmb=lmb, hidden=hidden) data = Dataset(cov, [jnj, nvs, pfe]) trainer = AdaGradTrainer(data, model) returns, decisions = trainer.train(window=window, lookback=lookback, slide=slide, maxiter=40) padding = zeros(len(jnj) - len(returns)) returns = append(padding, returns) decisions = append(padding, decisions) print "Wealth: ", wealth(returns)[-1] x_axis = range(len(jnj)) # Two subplots, the axes array is 1-d f, axarr = plt.subplots(2, sharex=True) axarr[0].plot(x_axis, jnj / jnj[0], 'r', label='Prices') axarr[0].plot(x_axis, wealth(returns), 'b', label='Wealth') axarr[0].set_title('Performance') axarr[0].legend(loc="upper left") #axarr[1].plot(x_axis, sharpe(returns)) #axarr[1].set_title('Sharpe') #axarr[3].plot(x_axis, returns) #axarr[3].set_title('Returns') axarr[1].plot(x_axis, decisions)
padding = zeros(len(mxe)-len(returns)) returns = append(padding, returns) decisions = append(padding, decisions) x_axis = range(len(mxe)) # Two subplots, the axes array is 1-d nplots = 4 f, axarr = plt.subplots(nplots, sharex=True) axarr[0].plot(x_axis, array(mxf)/mxf[0], 'r', label='MXF') axarr[0].plot(x_axis, array(mxe)/mxe[0], 'b', label='MXE') axarr[0].legend(loc=2) axarr[0].set_ylabel('Prices') axarr[0].set_title('Trading MXE & MXF (Side) with Cost %f' % (delta)) axarr[1].plot(x_axis, wealth(returns)) axarr[1].set_ylabel('Wealth') #axarr[2].plot(x_axis, sharpe(returns)) #axarr[2].set_ylabel('Sharpe') axarr[2].plot(x_axis, returns) axarr[2].set_ylabel('Returns') axarr[3].plot(x_axis, decisions) axarr[3].set_ylabel('Decisions') for i in xrange(nplots): axarr[i].locator_params(axis='y', nbins=6) axarr[nplots-1].set_xlabel('Time step (t)') plt.draw() fn = 'figures/mexico_cost_%f.pdf' % (delta)
returns = append(padding, returns) decisions = append(padding, decisions) x_axis = range(len(mxe)) # Two subplots, the axes array is 1-d nplots = 4 f, axarr = plt.subplots(nplots, sharex=True) axarr[0].plot(x_axis, array(mxf) / mxf[0], 'r', label='MXF') axarr[0].plot(x_axis, array(mxe) / mxe[0], 'b', label='MXE') axarr[0].legend(loc=2) axarr[0].set_ylabel('Prices') axarr[0].set_title('Trading MXE & MXF (Side) with Cost %f' % (delta)) axarr[1].plot(x_axis, wealth(returns)) axarr[1].set_ylabel('Wealth') #axarr[2].plot(x_axis, sharpe(returns)) #axarr[2].set_ylabel('Sharpe') axarr[2].plot(x_axis, returns) axarr[2].set_ylabel('Returns') axarr[3].plot(x_axis, decisions) axarr[3].set_ylabel('Decisions') for i in xrange(nplots): axarr[i].locator_params(axis='y', nbins=6) axarr[nplots - 1].set_xlabel('Time step (t)') plt.draw() fn = 'figures/mexico_cost_%f.pdf' % (delta) plt.savefig(fn, bbox_inches='tight')
# slide=slide, maxiter=20) # # filename = 'figures/synthetic_noside_single_w_%i_s_%i_l_%i_d_%f.pdf' % ( # window, slide, lookback, delta) # title = 'Single Layer - Synthetic (No Side Information)' # print "%s\tWealth: %f\tSharpe: %f" % (filename, # wealth(returns)[-1], sharpe(returns)[-1]) # plotter.save(filename, title, series, returns, decisions) for window in [200]: for slide in [5]: for lookback in [10]: for delta in [0.001]: models = [] for hidden in [4, 6, 8]: for lmb in [0.0, 0.0001, 0.001, 0.01]: models.append(Nonlinear(delta=delta, lmb=lmb, hidden=hidden)) trainer = ValidatingTrainer(data, models) returns, decisions = trainer.train(window=window, lookback=lookback, slide=slide, maxiter=20) filename = 'figures/synthetic_noside_multi_w_%i_s_%i_l_%i_d_%f.pdf' % ( window, slide, lookback, delta) title = 'Multiple Layer - Synthetic (No Side Information)' print "%s\tWealth: %f\tSharpe: %f" % (filename, wealth(returns)[-1], sharpe(returns)[-1]) plotter.save(filename, title, series, returns, decisions)
trainer = AdaGradTrainer(data, model) returns, decisions = trainer.train( window=window, lookback=lookback, slide=slide, maxiter=40) padding = zeros(len(series)-len(returns)) returns = append(padding, returns) decisions = append(padding, decisions) # Linear : 2,618,987,047.18 # Nonlin (15): 2,272,781,214.71 # Nonlin (10): 2,884,104,773.60 # Nonlin (5) : 1,232,632,146.82 # Linear: print "Wealth: ", wealth(returns)[-1] x_axis = range(len(series)) # Two subplots, the axes array is 1-d f, axarr = plt.subplots(5, sharex=True) axarr[0].plot(x_axis, series) axarr[0].set_title('Prices') axarr[1].plot(x_axis, wealth(returns)) axarr[1].set_title('Wealth') axarr[2].plot(x_axis, sharpe(returns)) axarr[2].set_title('Sharpe') axarr[3].plot(x_axis, returns) axarr[3].set_title('Returns') axarr[4].plot(x_axis, decisions) axarr[4].set_title('Decisions')