# 神经网络在算法交易上的应用系列——时序预测+回测

1、简单时间序列预测（已发表） 2、正确的时间序列预测+回测 3、多变量时间序列预测 4、波动率预测和自定义损失函数 5、多任务和多模式学习 6、超参数优化 7、用神经网络增强传统策略 8、概率编程和Pyro进行预测

```data = pd.read_csv('./data/AAPL.csv')[::-1]
close_price = data.ix[:, 'Adj Close'].tolist()
plt.plot(close_price)
plt.show()```

1、回归问题（试图准确预测收盘价或第二天的收益） 2、二元分类问题（价格将上升[1;0]或向下[0;1]）

`X = [(np.array(x) — np.mean(x)) / np.std(x) for x in X]`

`close_price_diffs = close.price.pct_change()`

```model = Sequential()
model.add(Dense(64, input_dim=30))
model.add(BatchNormalization())
model.add(LeakyReLU())
model.add(Dense(2))
model.add(Activation('softmax'))```

```reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.9,
patience=5, min_lr=0.000001, verbose=1)

model.compile(optimizer=opt,
loss='categorical_crossentropy', metrics=['accuracy'])```

```history = model.fit(X_train, Y_train, nb_epoch = 50,
batch_size = 128, verbose=1, validation_data=(X_test, Y_test),
shuffle=True, callbacks=[reduce_lr])```

```plt.figure()
plt.plot(history.history['loss']) plt.plot(history.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='best')```

First network loss

First network accuracy

```model = Sequential()
model.add(Dense(64, input_dim=30))
model.add(BatchNormalization())
model.add(LeakyReLU())
model.add(Dense(16))
model.add(BatchNormalization())
model.add(LeakyReLU())
model.add(Dense(2)) model.add(Activation('softmax'))```

Second network loss

Second network accuracy

```model = Sequential()
model.add(Dense(64, input_dim=30,
activity_regularizer=regularizers.l2(0.01))) model.add(BatchNormalization())
model.add(LeakyReLU())
model.add(Dense(16,
activity_regularizer=regularizers.l2(0.01))) model.add(BatchNormalization())
model.add(LeakyReLU())
model.add(Dense(2))
model.add(Activation('softmax'))```

https://www.quora.com/Loss-cross-entropy-is-decreasing-but-accuracy-remains-the-same-while-training-convolutional-neural-networks-How-can-it-happen

Regularized network loss

Regularized network accuracy

```model = Sequential()
model.add(Dense(64, input_dim=30,
activity_regularizer=regularizers.l2(0.01))) model.add(BatchNormalization())
model.add(LeakyReLU())
model.add(Dropout(0.5))
model.add(Dense(16,
activity_regularizer=regularizers.l2(0.01))) model.add(BatchNormalization())
model.add(LeakyReLU())
model.add(Dense(2))
model.add(Activation('softmax'))```

Hardcore regularized network loss

Hardcore regularized network accuracy

```model = Sequential()
model.add(Dense(64, input_dim=30,
activity_regularizer=regularizers.l2(0.01))) model.add(BatchNormalization())
model.add(LeakyReLU())
model.add(Dense(16,
activity_regularizer=regularizers.l2(0.01))) model.add(BatchNormalization())
model.add(LeakyReLU())
model.add(Dense(1))
model.add(Activation('linear'))```

```pred = model.predict(np.array(X_test))
original = Y_test
predicted = pred
plt.plot(original, color='black', label = 'Original data') plt.plot(predicted, color='blue', label = 'Predicted data') plt.legend(loc='best')
plt.title('Actual and predicted')
plt.show()```

```if np.argmax(pred) == 0 and not self.long_market:
self.long_market = True
signal = SignalEvent(1, sym, dt, 'LONG', 1.0)
self.events.put(signal)
print pred, 'LONG'
if np.argmax(pred) == 1 and self.long_market:
self.long_market = False
signal = SignalEvent(1, sym, dt, 'EXIT', 1.0)
self.events.put(signal)
print pred, 'EXIT'```

1、使用高频数据（每小时、分钟）——机器学习算法需要更多的数据，并且短期预测效果更好。

2、做一些超参数优化，不仅包括神经网络优化和训练参数优化，还包括训练的历史窗口优化。

3、使用更好的神经网络架构，如CNNs或RNNs。

4、不仅要使用收盘价或收益率，还可以使用每天的所有开高低成交量数据；如果可能的话——收集N个最相关的公司、行业财务状况、经济变量等信息。只依靠我们使用的简单数据是不可能建立好的预测模型的。

5、使用更复杂的，也许非对称的损失函数。例如，我们用于回归的MSE对符号是不变的，而符号却对我们的任务至关重要。

0 条评论

• ### 分隔百度百科中的名人信息与非名人信息

像错误提示说的那样需要的是字节类型而不是字符串类型，需要注意一下的是bytes-like翻译为字节。

• ### Finale

这几篇博客介绍的第一个feature transform方法就是kernel。kernel先出现是在SVM里面，原因就是为了减少 內积计算的复杂度，把特征转换和...

• ### 放弃幻想，全面拥抱Transformer：自然语言处理三大特征抽取器（CNN/RNN/TF）比较

在辞旧迎新的时刻，大家都在忙着回顾过去一年的成绩（或者在灶台前含泪数锅），并对2019做着规划，当然也有不少朋友执行力和工作效率比较高，直接把2018年初...

• ### Random Forest

随机森林还是没有脱离聚合模型这块，之前学过两个aggregation model，bagging和decision tree，一个是边learning边unif...

• ### 基于Keras的DCGAN实现

生成对抗网络（Generative Adversarial Network，简称GAN）是非监督式学习的一种方法，通过让两个神经网络相互博弈的方式进行学习。

• ### k-近邻算法

从今天开始，与大家分享我学习《Machine Learning In Action》这本书的笔记与心得。我会将源码加以详细的注释，这是我自己学习的一个过程，也是...

• ### Learning ROS for Robotics Programming Second Edition学习笔记(一) indigo v-rep

中文译著已经出版，详情请参考：http://blog.csdn.net/ZhangRelay/article/category/6506865

• ### 机器学习第3天：多元线性回归

简单线性回归：影响Y的因素唯一，只有一个。 多元线性回归：影响Y的因数不唯一，有多个。

• ### 大数据工程师需要学习哪些必备知识和技能呢？

大数据这个行业在科学发展的潮流中也变得越来越火了，来带你看看大数据工程师需要学习哪些必备知识和技能呢？

• ### 第一章（1.2） 机器学习算法工程师技能树

- 单机开发工具（numpy、sk-learn、pandas、libsvm、xgboost）