Exemplo n.º 1
0
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')
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
Arquivo: trainer.py Projeto: rreas/drl
    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
Exemplo n.º 4
0
Arquivo: plotter.py Projeto: rreas/drl
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")
Exemplo n.º 5
0
Arquivo: trainer.py Projeto: rreas/drl
    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
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
Arquivo: jnj.py Projeto: rreas/drl
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)
Exemplo n.º 8
0
#                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)
Exemplo n.º 9
0
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)
Exemplo n.º 10
0
Arquivo: mexico.py Projeto: rreas/drl
                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)
Exemplo n.º 11
0
                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')
Exemplo n.º 12
0
#                        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)
Exemplo n.º 13
0
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')