交易中的机器学习:理论、模型、实践和算法交易 - 页 47

 
mytarmailS:

1)是的,你可能是对的,但这个网能够学习如何做决定,它不是没有老师的通常分类,因此你可以在它身上实现我早就谈过的概念--你可以不以买-卖-买或0001110101011的形式教它标准目标,而是更抽象地教它,比如一个简单的条件,如:"网!我不在乎你如何交易,但我希望你的利润至少是每天0.5%的缩水的1%,它将为此寻找规则和组合。如果我错了,在这里胡说八道,请为了我自己的利益纠正我)。

对,没有想到,这就对了。那么最好的办法是将神经网络的条件设定为最大的夏普比率(或恢复因子),并在R中制作类似于真实报价的简单外汇测试器来测试模型,以评估进化。但奇迹不会自己发生,重新训练的问题仍然存在,数据仍然必须分为训练样本和测试样本,在模型的演化过程中,必须进行交叉验证以获得最终的估计。如何在交叉验证时使用夏普比率,我无法快速思考,在我看来,不可能在测试样本中删除随机的条形,因为每个条形的准确性并不重要,重要的是连续交易本身,以及每笔新交易的所有缩水、点差和佣金。

阿列克谢-伯纳科夫

他们似乎正在准备一个用于R的软件包。我们应该注意到这一点。

我已经有了这个包,但我不知道它准备了多少个百分点,暂时在githab上。下面是一个更简单的例子,是文章的延续。他们教网络提取根。

http://gekkoquant.com/2016/07/17/rneat-square-root-neural-net-trained-using-augmenting-topologies-simple-example/

后来完成了它。

做了一个鸢尾花的分类,代码在attachment中的例子(模型分类失败,我把所有的类都换成数字进行回归,并把结果四舍五入到最近的数字水平。也许可以用某种方式更容易地完成)。
我只用了50%的数据进行训练,在验证时95%的成功率,相当不错。从图上看,该模型甚至自己就把第一个预测因素给去掉了。

外汇比Iris更复杂 :)导致那里的结果会更糟糕。

我还注意到,文章的第三和第四部分使用了不同的函数来训练模型。
第三部分是模拟任何动态过程,例如,该模型可以观察外汇图表并实时开/平仓交易。
第四部分是简单地在准备好的例子上训练模型,并预测结果

附加的文件:
 
Dr.Trader:

1)对,没有想到,这就对了。那么最好给神经网络一个条件,使其达到最大的夏普比率(或恢复系数),并在R中制作一个类似于真实报价的简单外汇测试器的东西

2)我还注意到,文章的第三和第四部分使用不同的函数来训练模型。
第三部分是模拟一些动态过程,例如,该模型可以观察外汇图表,并实时开/平仓交易。
第四部分只是在准备好的例子上训练一个模型并预测结果

1)完全正确!这正是我的意思,盈利/亏损只是为了举例,我在考虑采取恢复因素,但锐利度基本上不会差。

2) 你是对的,在第4篇文章中,作者已经做了一个类似于包的东西,按照所有 "R "的标准,它只是一个模型--一个目标向量--通过 "predict "进行预测--但这种方法对我们不起作用,因为所有的功能都已经隐藏在包中...我们需要理解源代码并自己编写一切,这就是为什么我说要帮助理解,因为这里的一切都比 "有例子的现成软件包 "要复杂得多,我认为即使是第三部分的功能也不足以满足我们的需要。因此,如果我们都能加入进来,那将是非常好的。

 
mytarmailS:

1)完全正确!这正是我的意思,盈亏只是一个例子,我想的是采取恢复因素,但sharpe基本上不会差。

2) 你是对的,在第4篇文章中,作者已经创建了一个类似于包的东西,按照所有 "R "的标准,它只是一个模型--一个目标向量--通过 "predict "进行预测--但这种方法对我们不起作用,因为所有的功能都已经隐藏在包中...我们需要理解源代码并自己编写一切,这就是为什么我说要帮助理解,因为这里的一切都比 "有例子的现成软件包 "要复杂得多,我认为即使是第三部分的功能也不足以满足我们的需要。因此,如果我们都能参与其中,那将是非常好的。

除了你们自己,谁会教你们呢?获取你的源代码。研究它。还有就是关于函数的可微性。你需要向网络输入一些流畅的功能。你会告诉我们--而我们会给你建议。
 
阿列克谢-伯纳科夫
你需要向网络输入一些流畅的功能。你要告诉我们),我们会给你建议。

请原谅我的干涉,但不仅仅是顺利,而且是正常化。

因此,国家安全局永远不会超出它的已知区域。

类似这样的事情。

 

我不明白为什么这些网会被挑剔?

毕竟,他们已经超越了俗气的包装,来到了浩瀚的R!但是没有,旧的罪孽一直拖啊拖的......。

以Caret为例。那里不仅有一百五十个模型,而且还有一堆有用的预处理、预测功能...

所以没有,网和网...

 
桑桑尼茨-弗门科

我不明白为什么这些网会被挑剔?

毕竟,他们已经超越了俗气的包装,来到了浩瀚的R!但是没有,旧的罪孽一直拖啊拖的......。

以Caret为例。那里不仅有一百五十个模型,而且还有一堆有用的预处理、预测功能...

所以没有,网和网...

所以,让我们看看你的caret和一百五十个模型的行动吧!:)

 
Vadim Shishkin:

因此,请尽快向我们展示你的caret和一百五十个模型的行动。:)

顺便说一下,我自己也使用caret,并在外汇中获得了满意的结果。

我自己也在使用caret,并在外汇中获得了满意的结果。

####
##########
############## start experiment
##########
####

library(caret)
library(gbm)
library(doParallel)

        
# tuning GBM - перебор параметров обучения по сетке
gbmGrid <- expand.grid(interaction.depth = seq(from = 3, to = 9, by = 2)
                  , n.trees = seq(from = 600, to = 1200, by = 300)
                  , shrinkage = seq(from = 0.01, to = 0.02, by = 0.005)
                  , n.minobsinnode = seq(from = 30, to = 60, by = 30))

######################
# start training cycle - ввод основных переменных и массива для результатов

validating_arr <- data.frame()
max_best_models <- 1
counter <- 1
max_inputs <- 15
max_cv_folds <- 5
max_bag_fract <- 1
distributions <- c('gaussian', 'laplace')
start <- Sys.time()
        
for (best_inp_num in seq(from = 3, to = max_inputs, by = 3)){
        
        for (cv_folds in 2:max_cv_folds){
                
                for (bag_frac in seq(from = 0.2, to = max_bag_fract, by = 0.2)){

#########################
# prepare training scheme - параметры caret
                                        gbmControl <- trainControl(method = 'cv'
                                                                      , number = cv_folds
                                                                      , verboseIter = F
                                                                      , returnData = F
                                                                      , returnResamp = 'all'
                                                                      , savePredictions = 'none'
                                                                      , summaryFunction = mymetrics
                                                                      , search = 'grid'
                                                                      , allowParallel = T)

########################
# initiate paralleling
                        cores <- 4 #detectCores()
                        cl <- makePSOCKcluster(cores)
                        registerDoParallel(cl)
                        
                        # train the model - обучение моделей с кроссвалидацией. Используется GBM.
                        best_models <- train(training[, ncol(training)] ~.
                                                , data = training[, 1:(ncol(training) - 1)]
                                                , method = 'gbm'
                                                , distribution = distributions[2]
                                                , bag.fraction = bag_frac
                                                , metric = 'mae_improve'
                                                , maximize = T
                                                , trControl = gbmControl
                                                , tuneGrid = gbmGrid)
                        
                        # stop paralleling
                        stopCluster(cl)
                        
                        # summarize the model - сохранение n лучших моделей
                        best_models_arr <- as.data.frame(cbind(best_models[[4]][1]
                                                                    , best_models[[4]][2]
                                                                    , best_models[[4]][3]
                                                                    , best_models[[4]][4]
                                                                    , best_models[[4]][5]
                                                                    , best_models[[4]][6]
                                                                    , best_models[[4]][7]
                                                                    , best_models[[4]][8]))
                        
                        rm(best_models)
                        
                        best_models_arr_ordered <- best_models_arr[order(best_models_arr$mae_improve, decreasing = T), ]

# далее - обучение лучших моделей и их валидация


 
谢谢你。:)
 
SanSanych Fomenko:

我不明白为什么这些网会被挑剔?

毕竟,他们已经超越了俗气的包装,来到了浩瀚的R!但是没有,旧的罪孽一直拖啊拖的......。

以Caret为例。那里不仅有一百五十个模型,还有一堆有用的预处理、预测的功能。

因此,不,网和网...

通常情况下,一个图书馆要么能做很多事,但质量一般,要么只做一件事,质量很好。Caret是第一种情况,测试几十个模型并比较结果很容易,但要为你的任务改进一些东西就很难了。在根据我的规则选择预测器 时,我遇到了巨大的困难--caret可以模拟退火法来列举它们(和遗传学),但不能只拿我的健身函数来估计。我必须为caret创建一个带有训练、验证和适配功能的新模型;但caret仍将通过自己的规则控制训练和测试样本的数据,并有自己的交叉验证。
对我来说,采用GA或GenSA包来列举预测因子是比较容易的,只需写一个健身函数,就能根据我需要的规则创建模型和交叉验证。

Neuronka并不比森林差,我用它的结果是在加分,或者在最坏的情况下只是没有失去存款。由于算法不同,neuronka会比森林更喜欢不同的预测器,但所有预测器的选择规则与森林完全相同。

将神经元c转移到mt5的EA是一个几分钟的事情(将权重从R保存到csv中,然后将它们读到EA)。将森林转移到mt5将更加困难,这就是为什么我更喜欢neuronka。

 

我对RNeat进行了更多的实验,得出的结论是,它不能像传统的神经网络 那样处理。

1)与传统模型不同,RNeat训练不使用原始数据。该模型是随机生成的,经过改进,最后才在原始数据上测试。通常情况下,模型使用原始数据,在此基础上建立自己的逻辑,然后使用验证抽样来观察模型的逻辑是否正确,或者它是否只是学习了原始例子。与其他不同的是,RNeat根本没有能力记忆原始数据,因为它不知道这些数据,模型所知道的是所需的结果以及它与这些结果的接近程度。

2)交叉验证无助于改善前沿测试结果。我们似乎都同意,有可能训练一个常规模型,运行几个交叉验证,并以某种方式处理所有样本上的误差,以获得模型的最终适配分数。由于RNeat不知道原始数据,所以它不关心数据是在训练样本还是测试样本中,在任何情况下它都会调整其逻辑以达到预期的结果。理论上,它将从所有用于健身函数的样本中 "学习"(更准确地说是变异:) )。你所能做的就是将模型训练到合适的精度,并希望它不会过度训练,这对外汇来说是一个相当冒险的方法。交叉验证只能在训练后使用,作为前测中可能的结果的最终估计,而不能在健身函数中使用这个验证样本。