import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
date_axis=np.linspace(0,30,31)
close_price=np.array([911.6,917,932.01,975,976.3,987.1,982.98,979.86,996.35,984,1031.86,1025,987.9,981.2,999.82,984.86,976.06,982.52,981.5,986.09,975.93,968,963.5,947.5,955.87,957.02,953.98,946.36,963,965.03])
open_price=np.array([907,917,940,932.5,969.97,978.3,992,985,985,985.99,1004.52,1025,1020,985.8,986,995.05,979.3,980.93,989.96,981.3,967.8,975.45,968,961.5,955,960,962.3,958.31,945.97,961.97])
plt.figure()
for i in range(30):
date=np.zeros([2])
date[0]=i+1
date[1]=i+1
gain=np.zeros([2])
gain[0]=open_price[i]
gain[1]=close_price[i]
if open_price[i]<close_price[i]:
plt.plot(date,gain,'r',lw=8)
else:
plt.plot(date,gain,'g',lw=8)
datenormal=np.zeros([30,1])
pricenormal=np.zeros([30,1])
max_price=max(close_price)
min_price=min(close_price)
for i in range(30):
datenormal[i]=(i+1-1)/(30-1)
pricenormal[i]=(close_price[i]-min_price)/(max_price-min_price)
x=tf.placeholder(tf.float32,shape=[None,1])
y=tf.placeholder(tf.float32,shape=[None,1])
w1=tf.Variable(tf.random_uniform([1,20],0,1))
w2=tf.Variable(tf.random_uniform([20,1],0,1))
b1 = tf.Variable(tf.zeros([1,20]))
b2 = tf.Variable(tf.zeros([30,1]))
h_input=tf.nn.relu(tf.matmul(x,w1)+b1)
y_=tf.nn.relu(tf.matmul(h_input,w2)+b2)
mse = tf.reduce_mean(tf.square(y-y_))
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(mse)
with tf.Session() as sess:
tf.global_variables_initializer().run()
for i in range(20000):
sess.run(train_step,feed_dict={x:datenormal,y:pricenormal})
pred = sess.run(y_,feed_dict={x:datenormal})
predPrice = np.zeros([30,1])
for i in range(30):
predPrice[i,0]=(pred*(max_price-min_price)+min_price)[i,0]
plt.plot(date_axis[1:],predPrice,'b',lw=2)
plt.grid()
plt.title("Forecast of Kweichow Moutai's closing price for 30 trading days from June 17 to July 26, 2019")
plt.show()
