In [1]:
# load the packages needed
import numpy as np
import sys
if "../" not in sys.path:
sys.path.append("../")
from tsap.solver import Solver
from tsap.model import AR, MA
import tsap.data_processor as dp
import tsap.inference as inf
from tsap.ts_gen import ar1_gen
import tsap.trading as tr
data = np.loadtxt("../data/GS.csv", delimiter=',')
In [2]:
X = np.array([data[0:100]])
Y = dp.get_return(X)
In [6]:
lag = 5
sigma = 1.0
intercept = 0.1
phi = np.array([[ 0.04560256],
[ 0.0535601 ],
[-0.78190871],
[ 1.30062633],
[ 0.46616754]])
phi = np.random.randn(5,1)
phi=np.array([[-0.62736565],
[-1.1567537 ],
[ 1.50057093],
[-0.6409699 ],
[-2.35534488]])
AR_model = AR(lag=lag, phi=phi, sigma=sigma, intercept=intercept)
AR_model.params
Out[6]:
In [7]:
_, grads = AR_model.loss(Y)
solver = Solver(AR_model, Y,
update_rule='sgd_momentum',
optim_config={
'learning_rate': 1e-6,
},
num_epochs=10000, batch_size=1,
print_every=10)
solver.train()
AR_model.params
Out[7]:
In [23]:
l=100
nstep=6
window=3
money=100
profit, signal, pred_price = tr.rolltrade(np.array([data]),AR_model,l,nstep,window,money)
#signal
In [24]:
import matplotlib.pyplot as plt
plt.figure()
plt.plot(pred_price[0,0:data.shape[0]-11],'r')
plt.plot(data,'b')
plt.hold(True)
plt.xlabel('time')
plt.ylabel('stock price')
plt.title('price prediction')
plt.show()
plt.figure()
plt.plot(data[0:],'b')
for i in range(data.shape[0]-l):
if signal[0,i]==1:
plt.plot(i,data[i],'ro')
if signal[0,i]==-1:
plt.plot(i,data[i],'g^')
plt.xlabel('time')
plt.ylabel('stock price')
plt.title('trading signal')
plt.show()
plt.figure()
plt.plot(profit[0,:],'r')
plt.xlabel('time')
plt.ylabel('profit')
plt.title('profit')
plt.show()
"""plt.figure()
plt.plot(data[l:],'b')
for i in range(data.shape[0]-l):
if signal[0,l+i]==1:
plt.plot(i,data[l+i],'ro')
if signal[0,l+i]==-1:
plt.plot(i,data[l+i],'g^')
plt.xlabel('time')
plt.ylabel('stock price')
plt.title('trading signal')"""
plt.figure()
plt.plot(data[l:l+20],'b')
for i in range(20):
if signal[0,100+i]==1:
plt.plot(i,data[100+i],'ro')
if signal[0,100+i]==-1:
plt.plot(i,data[100+i],'g^')
plt.xlabel('time')
plt.ylabel('stock price')
plt.title('trading signal')
plt.show()
print profit[0,-1]
In [11]:
phi_y, sigma_y = inf.yule_walker(Y, order =5, method='unbiased')
AR_model_y = AR(lag=5, phi=phi_y, sigma=sigma_y, intercept=0)
l=100
nstep=20
window=5
money=100
profit, signal, pred_price = tr.rolltrade(np.array([data]),AR_model_y,l,nstep,window,money)
signal
Out[11]:
In [13]:
import matplotlib.pyplot as plt
plt.figure()
plt.plot(pred_price[0,0:data.shape[0]-11],'r')
plt.plot(data[0:data.shape[0]-11],'b')
plt.hold(True)
plt.xlabel('time')
plt.ylabel('stock price')
plt.title('price prediction')
plt.show()
plt.figure()
plt.plot(data[0:],'b')
for i in range(data.shape[0]-l):
if signal[0,i]==1:
plt.plot(i,data[i],'ro')
if signal[0,i]==-1:
plt.plot(i,data[i],'g^')
plt.xlabel('time')
plt.ylabel('stock price')
plt.title('trading signal')
plt.show()
plt.figure()
plt.plot(profit[0,:],'r')
plt.xlabel('time')
plt.ylabel('profit')
plt.title('profit')
plt.show()
"""plt.figure()
plt.plot(data[l:],'b')
for i in range(data.shape[0]-l):
if signal[0,l+i]==1:
plt.plot(i,data[l+i],'ro')
if signal[0,l+i]==-1:
plt.plot(i,data[l+i],'g^')
plt.xlabel('time')
plt.ylabel('stock price')
plt.title('trading signal')"""
plt.figure()
plt.plot(data[l:l+20],'b')
for i in range(20):
if signal[0,100+i]==1:
plt.plot(i,data[100+i],'ro')
if signal[0,100+i]==-1:
plt.plot(i,data[100+i],'g^')
plt.xlabel('time')
plt.ylabel('stock price')
plt.title('trading signal')
plt.show()
print profit[0,-1]
In [ ]: