交易中的机器学习:理论、模型、实践和算法交易 - 页 754 1...747748749750751752753754755756757758759760761...3399 新评论 Mihail Marchukajtes 2018.03.16 15:52 #7531 交易员博士。我已经在这里贴出了神经元的例子,我会找一些合适的东西,并针对你的数据重做(并有一个委员会)。我不会写介绍性的讲义,但我会在代码中加入更多的评论。 对不起,我不明白变量with(F,T)在循环中的含义。 for(i in c(1:nrow(table))[c(F,T)]){ ..... table[i,] ..... } 也就是说,这个循环在表中的偶数行上进行,但在奇数行上怎么做呢? Dr. Trader 2018.03.16 16:14 #7532 F和T是布尔值FALSE和TRUE的缩写,原则上来说,写c(T,F)还是c(TRUE,FALSE)并不重要,只是第一个变量更短。 如果表有10行,那么c(1:nrow(table))只是c(1,2,3,4,5,6,7,8,9,10)的一个向量。 而带有布尔值的数组在这种情况下会循环到要求的长度,你会得到c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE)。 即c(1:nrow(table))[c(F,T)] R将理解为 c(1,2,3,4,5,6,7,8,9,10) [c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE] 并依次取出那些与TRUE相匹配的向量元素。 例如,如果我们想取每一个第三元素,我们可以写成 c(1,2,3,4,5,6,7,8,9,10)[c(FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE] 或缩略语 c(1:10)[c(F,F,T)] 对于奇数元素只需交换T和F:c(1:nrow(table))[c(T,F)]。 Mihail Marchukajtes 2018.03.16 16:38 #7533 交易员博士。F和T是布尔值FALSE和TRUE的缩写,原则上来说,写c(T,F)还是c(TRUE,FALSE)并不重要,只是第一个变量更短。 如果你在表中有10行,那么c(1:nrow(table))只是c(1,2,3,4,5,6,7,8,9,10)个向量。 而带有布尔值的数组在这种情况下会循环到要求的长度,你会得到c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE)。 即c(1:nrow(table))[c(F,T)] R将理解为 c(1,2,3,4,5,6,7,8,9,10) [c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE)] 并依次取出那些与TRUE相匹配的向量元素。 例如,如果我们想取每一个第三元素,我们可以写成 c(1,2,3,4,5,6,7,8,9,10)[c(FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE] 或缩略语 c(1:10)[c(F,F,T)] 对于奇数元素,只需交换T和F:c(1:nrow(table))[c(T,F)]谢谢你不厌其烦地写下如此详细的描述。确实有很多东西变得清晰了。我甚至不好意思问,但我会下定决心的。问题的实质如下:..... 训练文件由每个目标的相同数量的类组成。换句话说,我的目标中有24个1和24个0。再次,我想做的是像Reshetov..... 我把训练表分成两个表,一个是目标为1的所有向量,另一个是目标为0的向量。 我以目标1为表,然后我需要创建两个子表,其中偶数向量在Train1,奇数向量在Train2。 首先,我们对偶数的做。 for(i in c(1:nrow(Qwe_true))[c(F,T)]){ Train1[i,]<-Qwe_true[i,] } 但是,Train1表将包含c NA行,而需要Train1被创建为12行,因为24行中只有12行是偶数。我不知道该怎么做.... Dr. Trader 2018.03.16 17:05 #7534 请。 对于R来说,你需要一种不同的思维方式,你需要在头脑中操作向量,那么代码就很容易写。专业人士在一行中写出这样的东西,我甚至不理解,而我自己会用几行写出周期。 Train1 <- rbind(Qwe[which(Qwe[, "target"]==1)[c(T,F)], ], Qwe[which(Qwe[, "target"]==0)[c(T,F)], ] ) Train2 <- rbind(Qwe[which(Qwe[, "target"]==1)[c(F,T)], ], Qwe[which(Qwe[, "target"]==0) [c(F,T)], ])在步骤中 - which(Qwe[, "target"]==1) - 目标为1的行数 which(Qwe[, "target"]==1)[c(T,F)] - 有 target1 的行数,跳过 1 Qwe[which(Qwe[, "target"]==1)[c(T,F)], ] - 从Qwe得到的表格,目标是1,其中有一个空格 rbind(..., ...) - 合并两个表(目标1和目标0)。 Mihail Marchukajtes 2018.03.16 17:14 #7535 交易员博士。请。 对于R来说,你需要一种不同的思维方式,你需要在头脑中操作向量,那么代码就很容易写。专业人士用一行写出的东西我都不懂,而我自己会写出几行的循环。 Train1 <- rbind(Qwe[which(Qwe[, "target"]==1)[c(T,F)], ], Qwe[which(Qwe[, "target"]==0)[c(T,F)], ] ) Train2 <- rbind(Qwe[which(Qwe[, "target"]==1)[c(F,T)], ], Qwe[which(Qwe[, "target"]==0) [c(F,T)], ])你只是一个怪物。两句话,就能让你卸下心头的重担。好吧,我会继续努力的......。谢谢! Mihail Marchukajtes 2018.03.16 17:30 #7536 周五晚上...我的头感觉不是很好。一起测试一下理论如何....,以你的R写作能力和我的问题设置能力(准确性),我们可以在半小时内全部检查一遍?有时间吗?窦建德博士 Dr. Trader 2018.03.16 17:33 #7537 不,继续学习。如果有任何问题,我会帮忙。 Mihail Marchukajtes 2018.03.16 17:37 #7538 在这两个样本之外,还需要增加两个样本。 MLP1=Train1+Test(Train2) MPL2=Train2+Test(Train1)。 如果我们把Test(Train2)+Test(Train1)相加,就可以得到整个训练部分的结果,这个部分将是一个测试,对每个多项式都是如此。 也许花点时间,如果现在不可能的话。但这是半个小时,你已经确定了。我只想做一面镜子。我拿着同一个文件,用两种方式来教它。然后,我们将把它全部扔到控制站点上,我们将看到一切。你怎么说? Dr. Trader 2018.03.16 18:26 #7539 你可以使用rbind()函数来组合这些表格 MLP1 <- rbind(Train1, Test)什么是Test(Train2)?而为什么要把训练表和测试表结合起来?测试应该是单独的,以便对训练好的模型进行测试。 一切都不会像你想的那样简单和快速。这在雷舍托夫的模型中,你只需输入数据,模型本身就会筛选出预测因子,确定权重、神经元数量,等等。但你不能用普通的神经元来做,你需要通过交叉验证来选择神经元的参数,例如我今天在这里写的例子,或者Vladimir Perervenko的文章。 再看看我在那里写了什么 -https://www.mql5.com/ru/forum/86386/page753#comment_6821981 只要把你的数据按描述粘贴到该代码中并运行即可。如果所有的预测因子都是一个一个地拿出来的,而不是消除的,那么从第一次开始,可能就会太糟糕。运行代码后,另外运行max(gaResult@fitness) 命令,这将显示由遗传学找到的最佳模型的R2得分。如果估计值接近1或更低,那就是好的,如果接近0甚至是负值,那就是坏的。然后在PREDICTOR_COLUMNS 中指定你认为好的列的确切数量,并再次运行代码,模型将只在这些预测器上训练。理想情况下,遗传学的最佳模型评价应该接近1,训练和测试表中的精确度应该是1.00。 测试表的时间应该严格在训练数据之后,就像这个模型已经在市场上交易一样。 如果这段代码没有什么好的结果(甚至在KFOLDS=10 的情况下)--那么它就没有好处。如果成功了,那么就有了一个替代雷舍托夫模型的好办法,我们可以进一步整理代码,把模型输出到mql中。 Dr. Trader 2018.03.16 18:35 #7540 我的观点是,如果你像在雷谢托夫的模型中那样做,添加一些额外的东西,然后拿一个普通的神经元,以某种方式与之前的步骤混合,并期望这一切都像雷谢托夫的模型那样工作--这将变成一个徒劳的漫长过程,我绝对不赞成这样的做法。 如果我想得到与雷舍托夫相同的结果,但在R中,那么我必须用R重写模型的所有java代码。 但也有许多替代方案。如果它们比雷舍托夫的还要好用,那就完美了,你不需要其他东西,一切都准备好了。 1...747748749750751752753754755756757758759760761...3399 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我已经在这里贴出了神经元的例子,我会找一些合适的东西,并针对你的数据重做(并有一个委员会)。我不会写介绍性的讲义,但我会在代码中加入更多的评论。
对不起,我不明白变量with(F,T)在循环中的含义。
也就是说,这个循环在表中的偶数行上进行,但在奇数行上怎么做呢?
F和T是布尔值FALSE和TRUE的缩写,原则上来说,写c(T,F)还是c(TRUE,FALSE)并不重要,只是第一个变量更短。
如果表有10行,那么c(1:nrow(table))只是c(1,2,3,4,5,6,7,8,9,10)的一个向量。
而带有布尔值的数组在这种情况下会循环到要求的长度,你会得到c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE)。
即c(1:nrow(table))[c(F,T)] R将理解为
c(1,2,3,4,5,6,7,8,9,10) [c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE]
并依次取出那些与TRUE相匹配的向量元素。
例如,如果我们想取每一个第三元素,我们可以写成
c(1,2,3,4,5,6,7,8,9,10)[c(FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE]
或缩略语
c(1:10)[c(F,F,T)]
对于奇数元素只需交换T和F:c(1:nrow(table))[c(T,F)]。
F和T是布尔值FALSE和TRUE的缩写,原则上来说,写c(T,F)还是c(TRUE,FALSE)并不重要,只是第一个变量更短。
如果你在表中有10行,那么c(1:nrow(table))只是c(1,2,3,4,5,6,7,8,9,10)个向量。
而带有布尔值的数组在这种情况下会循环到要求的长度,你会得到c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE)。
即c(1:nrow(table))[c(F,T)] R将理解为
c(1,2,3,4,5,6,7,8,9,10) [c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE)]
并依次取出那些与TRUE相匹配的向量元素。
例如,如果我们想取每一个第三元素,我们可以写成
c(1,2,3,4,5,6,7,8,9,10)[c(FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE]
或缩略语
c(1:10)[c(F,F,T)]
对于奇数元素,只需交换T和F:c(1:nrow(table))[c(T,F)]
谢谢你不厌其烦地写下如此详细的描述。确实有很多东西变得清晰了。我甚至不好意思问,但我会下定决心的。问题的实质如下:.....
训练文件由每个目标的相同数量的类组成。换句话说,我的目标中有24个1和24个0。再次,我想做的是像Reshetov.....
我把训练表分成两个表,一个是目标为1的所有向量,另一个是目标为0的向量。
我以目标1为表,然后我需要创建两个子表,其中偶数向量在Train1,奇数向量在Train2。
首先,我们对偶数的做。
但是,Train1表将包含c NA行,而需要Train1被创建为12行,因为24行中只有12行是偶数。我不知道该怎么做....
请。
对于R来说,你需要一种不同的思维方式,你需要在头脑中操作向量,那么代码就很容易写。专业人士在一行中写出这样的东西,我甚至不理解,而我自己会用几行写出周期。
Train1 <- rbind(Qwe[which(Qwe[, "target"]==1)[c(T,F)], ], Qwe[which(Qwe[, "target"]==0)[c(T,F)], ] )
Train2 <- rbind(Qwe[which(Qwe[, "target"]==1)[c(F,T)], ], Qwe[which(Qwe[, "target"]==0) [c(F,T)], ])
在步骤中 -
which(Qwe[, "target"]==1) - 目标为1的行数
which(Qwe[, "target"]==1)[c(T,F)] - 有 target1 的行数,跳过 1
Qwe[which(Qwe[, "target"]==1)[c(T,F)], ] - 从Qwe得到的表格,目标是1,其中有一个空格
rbind(..., ...) - 合并两个表(目标1和目标0)。
请。
对于R来说,你需要一种不同的思维方式,你需要在头脑中操作向量,那么代码就很容易写。专业人士用一行写出的东西我都不懂,而我自己会写出几行的循环。
Train1 <- rbind(Qwe[which(Qwe[, "target"]==1)[c(T,F)], ], Qwe[which(Qwe[, "target"]==0)[c(T,F)], ] )
Train2 <- rbind(Qwe[which(Qwe[, "target"]==1)[c(F,T)], ], Qwe[which(Qwe[, "target"]==0) [c(F,T)], ])
你只是一个怪物。两句话,就能让你卸下心头的重担。好吧,我会继续努力的......。谢谢!
在这两个样本之外,还需要增加两个样本。
MLP1=Train1+Test(Train2)
MPL2=Train2+Test(Train1)。
如果我们把Test(Train2)+Test(Train1)相加,就可以得到整个训练部分的结果,这个部分将是一个测试,对每个多项式都是如此。
也许花点时间,如果现在不可能的话。但这是半个小时,你已经确定了。我只想做一面镜子。我拿着同一个文件,用两种方式来教它。然后,我们将把它全部扔到控制站点上,我们将看到一切。你怎么说?
你可以使用rbind()函数来组合这些表格
MLP1 <- rbind(Train1, Test)
什么是Test(Train2)?而为什么要把训练表和测试表结合起来?测试应该是单独的,以便对训练好的模型进行测试。
一切都不会像你想的那样简单和快速。这在雷舍托夫的模型中,你只需输入数据,模型本身就会筛选出预测因子,确定权重、神经元数量,等等。但你不能用普通的神经元来做,你需要通过交叉验证来选择神经元的参数,例如我今天在这里写的例子,或者Vladimir Perervenko的文章。
再看看我在那里写了什么 -https://www.mql5.com/ru/forum/86386/page753#comment_6821981
只要把你的数据按描述粘贴到该代码中并运行即可。如果所有的预测因子都是一个一个地拿出来的,而不是消除的,那么从第一次开始,可能就会太糟糕。运行代码后,另外运行max(gaResult@fitness) 命令,这将显示由遗传学找到的最佳模型的R2得分。如果估计值接近1或更低,那就是好的,如果接近0甚至是负值,那就是坏的。
然后在PREDICTOR_COLUMNS 中指定你认为好的列的确切数量,并再次运行代码,模型将只在这些预测器上训练。理想情况下,遗传学的最佳模型评价应该接近1,训练和测试表中的精确度应该是1.00。
测试表的时间应该严格在训练数据之后,就像这个模型已经在市场上交易一样。
如果这段代码没有什么好的结果(甚至在KFOLDS=10 的情况下)--那么它就没有好处。如果成功了,那么就有了一个替代雷舍托夫模型的好办法,我们可以进一步整理代码,把模型输出到mql中。
我的观点是,如果你像在雷谢托夫的模型中那样做,添加一些额外的东西,然后拿一个普通的神经元,以某种方式与之前的步骤混合,并期望这一切都像雷谢托夫的模型那样工作--这将变成一个徒劳的漫长过程,我绝对不赞成这样的做法。
如果我想得到与雷舍托夫相同的结果,但在R中,那么我必须用R重写模型的所有java代码。
但也有许多替代方案。如果它们比雷舍托夫的还要好用,那就完美了,你不需要其他东西,一切都准备好了。