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

 
阿列克谢-伯纳科夫
好吧,你可能会想。例如,想象一下,在每个迭代中,神经网络不做基于目标偏离预测的标准误差反向传播,而是得到数据,在上一版本的权重下,真实交易与理想的交易相差 这么多点。并根据这些信息更新权重。也就是说,信息应该是一个平行的流向机器。也许,这可以做到。

你为什么需要砝码?你为什么一开始就谈论他们呢?

我明白你需要以前的重量,现在我明白了,我什么都不明白)

 
mytarmailS:

你为什么需要砝码?你为什么一开始就谈论他们呢?

我明白你需要以前的重量,现在我明白了,我什么都没明白)

嗯,看起来是这样的 ))

我们不需要这些砝码。我提到它们只是为了让你明白。我们需要知道该系统在以前的权重上是如何交易的。我们需要以某种综合方式获得交易的结果。一切都是。

权重由该算法更新。

 

在这里,一个简单的函数起作用。需要尝试一种更复杂的方式。它仍然需要区别对待,这就是诀窍所在。

library(neuralnet)


y <- as.data.frame(matrix(runif(n = 10000, min = -15, max = 15), ncol = 2))

y$V3 <- runif(n = 5000,  min = -15, max = 15)

y$V4 <- runif(n = 5000,  min = -15, max = 15)

y$V5 <- runif(n = 5000,  min = -15, max = 15)

y$V6 <- runif(n = 5000,  min = -15, max = 15)

y$V7 <- runif(n = 5000,  min = -15, max = 15)

y$V8 <- y$V1 ^ 2 + y$V2 ^ 2

colnames(y) <- c('input_1', 'input_2', 'noise_1', 'noise_2', 'noise_3', 'noise_4', 'noise_5', 'output')


f_f <- function(x, y){

1/2*(y-x)^2

}


print(

nn_model <- neuralnet(formula = output ~ input_1 + input_2 + noise_1

, data = y

, hidden = 1

, threshold = 0.01

, stepmax = 1e+05

, rep = 100

, startweights = NULL

, learningrate.limit = NULL

, learningrate.factor = list(minus = 0.5, plus = 1.2)

, learningrate=NULL

, lifesign = "none"

, lifesign.step = 10

, algorithm = "rprop+"

, err.fct = f_f #"sse"

, act.fct = "logistic"

, linear.output = F

, exclude = NULL

, constant.weights = NULL

, likelihood = FALSE

)

)

 

f_f <-function(x, y) 1/2*(y-x)^2

f_f - 计入网络的误差,对吗?

x是应该有的数值(理想曲线)。

y是它应该是的样子(真实的曲线)。

它们之间的区别是误差

我需要一个由以前的蜡烛图组成的交易矢量,我需要打开交易的规则,我需要交易输入数据。

 
mytarmailS:

f_f <- function(x, y) 1/2*(y-x)^2

f_f - 计入网络的误差,对吗?

x是应该有的数值(理想曲线)。

y是它应该是的样子(真实的曲线)。

它们之间的区别是误差

我想我需要一个由蜡烛图组成的交易矢量,但我不明白如何通过什么规则打开交易,这些输入数据应该是什么样子?

几乎是对的。X是一个ns预测的向量。Ygrek是每根柱子向前的价格增量向量(例如),这就是网络预测的内容。而整个函数就是NS算法在每次迭代时看到的内容。到目前为止还没有结果。它们需要被建模。

如何。我们应该描述开仓的逻辑,并在函数体中 直接输入价差。将开放位置的结果写在矢量中,并计算矢量上的内在特征。

例如:buy<-(y-spread)[x>0]。这将是一个长线的载体。然后all<-append(buy, sell)。

但这可能不会奏效。对函数的种类有很多限制(。
 
在此期间,我继续我的实验。我只在eurusd 上训练了机器,并在验证时得到了小的正MO。

附上当前MT4中模型测试的截图。训练阶段仍在进行中......完整的结果要到明天才会公布。结合R的计算是相当长的,如果没有开放的交易,每分钟都要计算。始于1999年。验证将从2010.09开始。目前的图表是2003年的。

我使用10个五位数的点差。预计在MO验证时可获得7-8个点的收益。不密....但现在你已经可以找到点差为10点的DC,这就是为什么我认为结果几乎是显著的。
附加的文件:
 

一位同事给我发了一个机器学习课程的链接,你想看一下吗?它是免费的,但由于某种原因,它是用Python语言编写的(()。

https://www.udacity.com/course/machine-learning-for-trading--ud501

 
阿列克谢-沃尔昌斯基

一位同事给我发了一个机器学习课程的链接,你想看一下吗?它是免费的,但由于某种原因,它是用Python语言编写的(()。

https://www.udacity.com/course/machine-learning-for-trading--ud501

最有效的。

1.你投入R- 5分钟。

2.下载rattle软件包,它被设计成一个GUI,所以不需要任何R知识。

3.为了减少你的启动成本,你可以使用我的文章。它包含了解释,更重要的是,还附有一个准备好的文件。一旦你看到我的文件,你可以很容易地准备你自己的文件。

4.你会得到六个模型。

5.主要是在拨浪鼓中你可以看到机器学习的整个周期。

  • 最初的数据准备(数据挖掘)。
  • 建模
  • 结果评价
  • 作为你所有拨浪鼓活动的R上的奖励文本。然后这个文本可以在拨浪鼓之外使用。

所有这些将给你一些没有差距的基础,最重要的是有一个具体的与外汇挂钩的机器学习经验。

PS。

拨浪鼓不仅在最初的步骤中对你非常有用,而且在以后也是如此:最小的成本,估计一些东西,进行实验......。

辽宁省

当然,你不能没有书。这里 有很多这样的人。搜索的效果非常好。

 
mytarmailS:

感谢Dr.Trader 的详细说明!

你知道,可能最好的和最正确的是教授逆转本身,甚至是同一个之字形,也就是给出三种状态1)向上调头

2) 下降的逆转

3)不是调头

但不管教不教,要抓反转是相当困难的,再加上观察次数的倾斜,班级 "不反转 "的情况会多出几十倍甚至上百倍。

那么你使用什么预测因素,结果如何?

我刚刚开始使用光谱分析,第一次测试结果比用指标要好得多,我通过拨浪鼓运行,训练和测试的误差大约是6%,但当我开始使用R时,如果我没有弄错的话,误差上升到30%,San Sanich说这是再训练,所以我还是不大明白

还有一种方法是通过频谱分析找出哪些时期在市场中占主导地位,然后你可以在指标中使用这些时期。 我将得到自适应指标,不根据历史进行调整。

我使用标准指标作为创建预测器的基础。我自己还在做实验,尝试这个论坛主题中的想法。

过去几周我一直在做,现在最好的结果如下:(计算量很大,我试图用D1时间段来快速计算,以后我会用更小的时间段)。

1)从mt5导出csv:ohlc,时间,指标,所有的最后10条。我最近开始只从最新的条形图中获取时间,我相信其他条形图的时间是可以计算的,因此不会带来任何新的信息。几百个 "初级 "预测器陆续问世。学习的必要结果是 "1 "或 "0" - 在下一栏中价格的上升或下降。我用之字形的方法并不稳定和复杂,我现在更擅长用接近的价格工作。当我从头开始研究出完整的模型训练算法时,我可能会开始研究人字形和趋势预测的工作。

2)在R中,我正在用现有的数据做不同的数学运算--加法、△、最小、最大等等。它已经出来了一千多个预测者。

3)很明显,第二步之后的垃圾比需要的多。我是通过关于基本组件的文章http://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/, SanSanych在前面写的方法来筛选的。我不是在教PCR模型本身,暂时定位于预测因子的预筛选功能。

library('vtreat')
PrunePredictors <- function(srcTable, pruneSig = -1) {
        targetName <- tail(colnames(srcTable), 1)
        
        treatmentsN <- designTreatmentsN(srcTable,setdiff(colnames(srcTable),targetName),targetName, verbose=FALSE)
        if(pruneSig<0){
                pruneSig = 1.0/(ncol(srcTable)-1)
        }

        scoreFrameSorted <- treatmentsN$scoreFrame[,c("origName", "psig", "code")]
        scoreFrameSorted <- subset( scoreFrameSorted, code == "clean")[,1:2]
        scoreFrameSorted <- scoreFrameSorted[with(scoreFrameSorted, order(psig)), ]
        
        scoreFrameSortedPruned <- subset( scoreFrameSorted, psig < pruneSig)
        scoreFrameSortedPruned <- scoreFrameSortedPruned[,1] 
        
        cat("Minimal psig:", scoreFrameSorted[1,2], "\n")
        cat("Maximal psig:", scoreFrameSorted[nrow(scoreFrameSorted),2], "\n")
        cat("Threshold:", pruneSig, "\n")
        cat("Good predictors:", nrow(subset( scoreFrameSorted, psig < pruneSig)), "\n")
        
        return(scoreFrameSortedPruned)
}

srcTable是一个包含预测器的表,最后一列应该是所需的训练结果。pruneSig最好留为-1

结果是,该函数将返回一个列表,其中有来自表中的列名,这些列名带有一些有用的信息。如果没有发现任何有用的东西,则是一个空列表。文章中提到的这种方法意义不大,但事实证明是相当充分的,它能很好地筛除垃圾。另外,结果列表将按相关性排序,从较有用到较不有用。

4)如果函数返回空列表--我再次运行第二步,在现有数据上再次生成不同的数学组合,然后第三步筛选出来。我必须重复这3-4次。数据量随着每次重复而增长,所以最好以某种方式限制产生的新数据量。我们可以改变这个用于筛选的函数,这样,如果列表是空的,它就会返回一百或两个最佳结果,并只从它们中生成新的预测器。

5)接下来,根据这篇文章,我们需要训练主成分模型本身。我有一些问题 - 到目前为止,训练过的模型的最佳r-squared是0.1,这还不够,文章说我至少需要0.95。但我可以在获得的预测器上训练一些其他的R模型,它会给出更好的结果。我对神经元的经验最多,用它进行前沿测试的最佳结果是,误差约为37%。PCE模型应该是更稳定的,不需要重新训练等,但到目前为止,我无法得到任何预测器。

如果你在前沿测试中的误差为30%,那么它是一个相当有利可图的模型,为MT5制作专家顾问并在策略测试器中进行检查。

 
阿列克谢-沃尔昌斯基

一位同事给我发了一个机器学习课程的链接,你想看一下吗?它是免费的,但由于某种原因,它是用Python语言编写的(()。

https://www.udacity.com/course/machine-learning-for-trading--ud501

我开始看这个课程,它对Python的Pandas框架非常关注。第一课看起来更像是关于这个框架的教程,而不是关于数据分析的教程。但该教程看起来很充分,没有像许多其他无用的培训中那样典型的 "我是外汇大师,我会让你大开眼界,你会赚到几百万",这让人希望他们会把充分的东西讲到最后。但也值得注意的是,这个课程是为股票交易设计的,而不是外汇,我不知道这两个领域的模型学习过程是否相似。