源代码,请在文末查询
前言
我们希望找出跟随价格上涨的模式。通过每日收盘价,MA,KD,RSI,yearAvgPrice 本次推文研究只是展示深入学习的一个例子。 结果估计不是很好。希望抛砖引玉,给大家带来更多的思考。策略使用的数据从雅虎财务获取。什么时候要买或者卖股票走势预测
CNN
交通标志的图像由4 5×5卷积内核过滤,创建4个特征图,这些特征图通过最大池合并采样。 下一层对这些子采样图像应用10 5×5卷积核,并再次汇集特征图。 最终层是完全连接的层,其中所有生成的特征被组合并在分类器中使用(基本上是逻辑回归)
股票市场应用
根据历史数据做出正确的决策
TensorFlow
DQN_CNN_image
这是这个策略的核心思路。我们将数据(年线,月线,收盘价)作为图像,并使用CNN来识别其模式。将图像转换为数组:
交易策略:达到+10%或者-5%时卖出。
下面来介绍一下DQN
(参考:知乎 - 智能单元 - Flood Sung)
编写基本DQN类的结构
class DQN():
#初始化
def __init__(self, env):
#创建Q网络
def create_Q_network(self):
#创建训练方法
def create_training_method(self):
#感知存储信息
def perceive(self,state,action,reward,next_state,done):
#训练网络
def train_Q_network(self):
#输出带随机的动作
def egreedy_action(self,state):
#输出动作
def action(self,state):
我们知道,我们的DQN一个很重要的功能就是要能存储数据,然后在训练的时候minibatch出来。所以,我们需要构造一个存储机制。这里使用deque来实现。
self.replay_buffer = deque()
初始化
def __init__(self, env):
# init experience replay
self.replay_buffer = deque()
# init some parameters
self.time_step = 0
self.epsilon = INITIAL_EPSILON
self.state_dim = env.observation_space.shape[0]
self.action_dim = env.action_space.n
self.create_Q_network()
self.create_training_method() # Init session
self.session = tf.InteractiveSession()
self.session.run(tf.initialize_all_variables())
这里要注意一点就是egreedy的epsilon是不断变小的,也就是随机性不断变小。怎么理解呢?就是一开始需要更多的探索,所以动作偏随机,慢慢的我们需要动作能够有效,因此减少随机。
创建Q网络
我们这里创建最基本的MLP,中间层设置为20:
def create_Q_network(self):
# network weights
W1 = self.weight_variable([self.state_dim,20])
b1 = self.bias_variable([20])
W2 = self.weight_variable([20,self.action_dim])
b2 = self.bias_variable([self.action_dim])
# input layer
self.state_input = tf.placeholder("float",[None,self.state_dim])
# hidden layers
h_layer = tf.nn.relu(tf.matmul(self.state_input,W1) + b1)
# Q Value layer
self.Q_value = tf.matmul(h_layer,W2) + b2
def weight_variable(self,shape):
initial = tf.truncated_normal(shape)
return tf.Variable(initial)
def bias_variable(self,shape):
initial = tf.constant(0.01, shape = shape)