股票交易软件:采用栈式 RBM 的深度神经网络。自训练, 自控制
1. 由栈式 RBM (DN_SRBM) 初始化的深层神经网络的结构
我记得 DN_SRBM 是由 n 个等于神经网络隐藏层数的 RBM 组成, 基本上是神经网络本身。训练包括两个阶段。赫兹量化软件
编辑搜图
请点击输入图片描述(最多18字)
第一阶段涉及预训练。每个 RBM 无需监督者即可依据输入集合系统地训练 (无目标)。在隐藏层的权重之后, RBM 被转移到相关的神经网络隐藏层。赫兹量化软件
第二阶段涉及微调, 在此神经网络由监督者训练。前文中已提供了有关它的详细信息, 所以我们在此不再复述。我将简单叙述, 不像我们前文用过的 "deepnet" 软件包, "darch" 软件包帮助我们实现更广泛的机会来构建并微调模型。更多详细信息将在创建模型时提供。图例. 1 显示 DN_SRBM 的结构和处理过程赫兹量化软件
编辑搜图
图例. 1. DN SRBM 的结构
2. 数据的准备及选择
2.1. 输入变量 (征兆, 预测器)
在前文中, 我们研究过预测器的评估和选择, 所以在此无需提供额外信息。我仅论及我们使用的 11 款指标 (所有的振荡器: ADX, aroon, ATR, CCI, chaikinVolatility, CMO, MACD, RSI, stoch, SMI, volatility)。选择了来自一些指标的若干变量。这样就形成了 17 个变量的输入集。我们从 EURUSD 里取最后 6000 根柱线的报价, 2016 年 02 月 14 日 M30 时间帧, 并使用 In() 函数计算指标值。赫兹量化软件
#---2---------------------------------------------
In <- function(p = 16){
require(TTR)
require(dplyr)
require(magrittr)
adx <- ADX(price, n = p) %>% as.data.frame %>%
mutate(.,oscDX = DIp - DIn) %>%
transmute(.,DX, ADX, oscDX) %>%
as.matrix()
ar <- aroon(price[ ,c('High', 'Low')], n = p) %>%
extract(,3)
atr <- ATR(price, n = p, maType = "EMA") %>%
extract(,1:2)
cci <- CCI(price[ ,2:4], n = p)
chv <- chaikinVolatility(price[ ,2:4], n = p)
cmo <- CMO(price[ ,'Med'], n = p)
macd <- MACD(price[ ,'Med'], 12, 26, 9) %>%
as.data.frame() %>%
mutate(., vsig = signal %>%
diff %>% c(NA,.) %>% multiply_by(10)) %>%
transmute(., sign = signal, vsig) %>%
as.matrix()
rsi <- RSI(price[ ,'Med'], n = p)
stoh <- stoch(price[ ,2:4], nFastK = p,
nFastD =3, nSlowD = 3,
maType = "EMA") %>%
as.data.frame() %>%
mutate(., oscK = fastK - fastD) %>%
transmute(.,slowD, oscK) %>%
as.matrix()
smi <- SMI(price[ ,2:4],n = p, nFast = 2,
nSlow = 25, nSig = 9)
kst <- KST(price[ ,4])%>% as.data.frame() %>%
mutate(., oscKST = kst - signal) %>%
select(.,oscKST) %>% as.matrix()
In <- cbind(adx, ar, atr, cci, chv, cmo, macd,
rsi, stoh, smi, kst)
return(In)
}
我们将在输出上获得输入数据矩阵。
2.2输出数据 (目标白能量)
我们采用取自 ZZ 的信号作为目标变量。函数计算之字折线信号:
#----3------------------------------------------------
ZZ <- function(pr = price, ch = ch , mode="m") {
require(TTR)
require(magrittr)
if (ch > 1) ch <- ch/(10 ^ (Dig - 1))
if (mode == "m") {pr <- pr[ ,'Med']}
if (mode == "hl") {pr <- pr[ ,c("High", "Low")]}
if (mode == "cl") {pr <- pr[ ,c("Close")]}
zz <- ZigZag(pr, change = ch, percent = F,
retrace = F, lastExtreme = T)
n <- 1:length(zz)
dz <- zz %>% diff %>% c(., NA)
sig <- sign(dz)
for (i in n) { if (is.na(zz[i])) zz[i] = zz[i - 1]}
return(cbind(zz, sig))
}
函数参数:
pr = 价格 – OHLCMed 报价的矩阵;
ch – 之字折线弯曲的最小长度点数 (4 位) 或是实际项 (例如, ch = 0.0035);
mode – 应用的价格 ("m" - 中间价, "hl" - 最高价和最低价, "cl" - 收盘价), 省缺使用中间价。赫兹量化软件
函数返回两个变量的矩阵 — 事实上, 之字折线和信号, 是在之字折线角度范围 [-1;1] 的基础上取得的。我们将信号向左平移一根柱线 (朝向未来)。这个特定的信号将用于训练神经网络。赫兹量化软件
我们计算信号时 Z赫兹量化软件Z 弯曲长度至少 37 点 (4 位)。
> out <- ZZ(ch = 37, mode = "m")
Loading required package: TTR
Loading required package: magrittr
> table(out[ ,2])
-1 1 2828 3162
如我们所见, 分级略有失衡。当形成用于训练模型的样本时, 我们将采取必要的措施来令它们平衡。