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

 
雷纳特-法特库林

R是一个令人惊奇的系统,它使我亲眼看到我们在MetaTrader/MQL中离 "使复杂的计算变得简单和正确 "的真正需求有多远。

我们(C++开发者)的血液中流淌着 "你可以自己做所有的事情,我们给你低级别的基础和计算速度 "的方法。我们对性能非常狂热,而且我们很擅长 - MQL5在64位上非常出色。

当我自己开始研究R时,我意识到我需要在一行中尽可能多的强大功能,并且能够做一般的研究。

因此,我们采取了一个急转弯,开始升级MetaTrader 5。

  • 将之前重写的数学库Alglib和Fuzzy纳入标准交付,并包含单元测试。
  • 从R中开发了一个类似的统计函数,运行测试并用测试覆盖它们。工作仍在进行中,库也在扩大
  • 开发了Graphics库的第一个测试版,作为R语言中plot的类似物,增加了快速输出的单行函数
  • 开始改变终端输出窗口的界面,以便我们能够操作表格数据。 他们改变了输出的方向,增加了禁用不必要的列,将专家顾问输出窗口的字体改为单行体
  • 增加了一个强大的ArrayPrint 功能,用于自动打印数组,包括结构。
  • 增加了FileLoadFileSave 函数,用于快速加载/卸载磁盘上的数组。


当然,我们正处于道路的起点,但正确的努力方向已经很清楚。

你的动机很好!如果完全像你说的那样,你会很快把忍者咬得粉碎c multichart)))

然而,IMHO,在这里,我们必须创造一些根本性的新东西,也就是说,除了你写的东西,Reshetov先生,你只需要一个研究工作室,与任意的数据集一起工作,不仅可以从市场上下载,因为许多事情需要尝试非常琐碎的,合成的例子,以了解发生了什么,好吧,你应该理解我作为一个程序员的程序员)我想绘制不同的图表、散点图、命中率图、分布图等等。总的来说,如果这样一套工具能直接从MetaEditor中获得,那真是太酷了,但坦率地说,我没有希望......

但总的来说,当然,我喜欢你的思想趋势))。

 
雷纳特-法特库林

这是一个礼貌性的回答,没有细节或验证。而且答案与Wolfram Alpha和Matlab不匹配,这是个问题。

没有必要回避--根本问题已经明确说明。

你说他的答案与沃尔夫林不一致是什么意思?没有匹配到那个人的答案不是 "零"?那人回答说,他不认为在零点,即积分=0的地方,密度一定是零(我这样向他提出问题)。他明确地这样说。而且他还说,任何一点的密度值都是不相关的(我把 "不相关 "理解为与当前问题无关)。这是一个相当明确的数学声明。

在眼下的问题中,数学很重要。

我们有某某函数的积分(伽马分布概率密度函数)。大家都习惯了,你可以给Wolfram方程加上参数:指定积分区域和函数参数,它就会积分并给出答案。但是你有没有想过,如果你自己坐下来,在一个给定的域上计算这个积分,你会在零点得到0,在整个域上得到1,而在一些子区域上得到一些值[0,1]。仅仅是通过解方程!

伽马分布概率密度函数的极限是在正区域的某个地方,这是该函数的一个属性。这与你通过整合该功能得到的东西无关。这就是那个人所写的内容。

我并不回避根本问题。我重申,我们的观点已经被一个我们无法控制的人所证实--密度为零的人并不重要(无关紧要)。

 
振亚

你的动机很好!如果一切都像你说的那样,你会很快咬牙切齿的忍者C multichart))。

然而,IMHO,在这里,我们必须创造一些根本性的新东西,也就是说,除了你写的Reshetov先生 ,你需要的只是一个研究工作室,来处理任意的数据集,不仅可以从市场上下载,因为很多事情需要尝试非常琐碎的,合成的例子来了解发生了什么,好吧,你应该理解我作为一个程序员的程序员)我需要绘制不同的图表、散点图、打击图、分布图等等。总的来说,如果这样一套工具能直接从MetaEditor中获得,那真是太酷了,但坦率地说,我没有希望......

但总的来说,当然,我喜欢你的思想趋势))))。

你指的是雷舍托夫的这个 "镜头 "吗?

"这个R是某种带有方形轮子的腐烂自行车。当基础,即R的核心是歪的,需要用 "铅笔文件 "进行严重的微调时,谈什么他的一些包呢?那些这么多年来连R的基本函数的正确性都懒得检查的人可能有什么可信度?在R的弱点中,什么可以成为 "优势"--通过它进行计算的不正确性?

好在MetaQuotes让一些用户看到了事实,并以开源的方式进行了测试,这样大家就可以独立地进行反复检查和确认,而不是毫无根据。当然不是所有的开源,因为一些来自R的破坏性教派的宗教狂热者会继续盲目地相信他们歪曲的语言和软件包中的计算的 "无懈可击",而不是转向提出的测试和独立的双重检查,而不是偏执地胡说八道,为R的歪曲性辩护为 "公认的标准"。

现在很明显,使用MQL功能来创建交易策略会更好,因为结果会更正确,而不是试图通过曲线和斜率R来做。

特别感谢MetaQuotes开发人员的建设性方法、测试和他们的来源,以及揭示了 "裸体国王--R"!"

 
弗拉基米尔-佩雷文科

这就是雷谢托夫所说的 "镜头 "吗?

不,这就是信息。

尤里-雷舍托夫

R,以及许多其他语言,对于机器学习来说比MQL更方便,因为它有一个固有的功能来处理数组中的数据。问题是,机器学习的样本通常是一个二维数据数组,所以它需要一个处理数组的函数。

  1. 将行和列作为小尺寸的数组插入另一个数组中
  2. 将数组中的行和列替换成更小的数组
  3. 从数组中删除行和列(例如,从样本中删除不重要的预测因子或有明显 "异常值 "的例子)。
  4. 将数组分成若干部分,产生两个或更多的数组,这些数组是原始数组的一部分(需要将一个样本分成训练和测试部分,或分成更多的部分,例如用于Walling Forward)。
  5. 在一个具有均匀分布的数组中随机洗刷行和列(有必要让样本中的某些例子落入不同的部分,最好是均匀地分布在这些部分)。
  6. 用于每行或每列数据处理的各种功能(例如,计算每行或每列的算术平均值、方差,或为进一步规范化寻找某行的最大或最小值)。
  7. 诸如此类,不一而足。

在MQL实现上述处理数组中的样本所需的功能之前,大多数机器学习算法的开发者会更喜欢其他已经有这些功能的编程语言。或者他们会使用AlgLib库中朴实无华的MLP(1960年代的算法),如果我没记错的话,为了方便,二维数组被表示为一维的。

当然,随机分布的密度的函数也是一个必要的功能。但在机器学习任务中并不总是需要这样的函数,在一些任务中根本就不使用。但是,将样本作为多维数组的操作是任何任务都需要的机器学习算法的实现,当然,除非是教网格从琐碎的CWR中学习明显的归一化数据的任务。

 
弗拉基米尔-佩雷文科

这就是雷谢托夫所说的 "镜头 "吗?

"这个R是腐朽的--一辆有方形车轮的自行车当基础,也就是R的核心是歪的,需要 "用铅笔文件 "进行严重的改进时,谈什么它的一些包呢?那些这么多年来连R的基本函数的正确性都懒得检查的人可能有什么可信度?在R的弱点中,什么可以成为 "优势"--通过它进行计算的不正确性?

好在MetaQuotes让一些用户看到了事实,并以开源的方式进行了测试,这样大家就可以独立地进行反复检查和确认,而不是毫无根据。当然,并不是所有的开源,因为一些来自R的破坏性教派的宗教狂热分子会继续盲目地相信他们歪曲的语言和软件包中的计算的 "无懈可击",而不是转向提出的测试和独立的双重检查,而不是狂热地制造废话,为R的歪曲作为 "公认的标准 "辩护。

现在很明显,使用MQL功能来创建交易策略会更好,因为结果会更正确,而不是试图通过曲线和斜率R来实现。

特别感谢MetaQuotes开发人员的建设性方法、测试及其来源,以及对 "裸王-R"的鉴定!"

你删除了你关于 "明基MQL "的帖子了吗?你在揉搓你的帖子,就像特朗普当选后拉多维亚人物揉搓他们的Facebook一样。

 

这里有一个Wolfram Alpha中的伽马分布的例子,供大家玩味。

给他一个函数,一个稍微简化的伽马分布密度函数。

问题出在分母x上。右边的极限,你可以看到,在x->0时,Wolfram估计正确:inf。

也就是说,在右边的极限中,零点的密度是无限大的(这正是dgamma的答案)。

让我们在大沙坡头上整合这个函数。

积分是1(当然是四舍五入的,因为没有采取全部的对应关系)。

结论是,尽管该函数在极端点上走向无穷大,但这个函数的积分算得很好,因为它应该如此。

 
阿列克谢-伯纳科夫

下面是Wolfram Alpha中伽马分布的一个例子,只是为了好玩。

结论是,即使函数在极端点上走向无穷大,但该函数的积分算得很好,因为它应该。

谢谢你的例子,你是对的。这个积分是收敛的。

在x=0点的极值也可以用来确定密度,而且不会导致发散。

 
量子化

谢谢你的例子,你是对的。该积分是收敛的。

x=0处的极限值也可以用来确定密度,这不会导致发散。


谢谢你!尊重。

 

例子由R与快速处理包组成。

library(data.table)

library(ggplot2)


start <- Sys.time()


set.seed(1)

dummy_coef <- 1:9


x <- as.data.table(matrix(rnorm(9000000, 0, 1), ncol = 9))

x[, (paste0('coef', c(1:9))):= lapply(1:9, function(x) rnorm(.N, x, 1))]


print(colMeans(x[, c(10:18), with = F]))


x[, output:= Reduce(`+`, Map(function(x, y) (x * y), .SD[, (1:9), with = FALSE], .SD[, (10:18), with = FALSE])), .SDcols = c(1:18)]


x[, sampling:= sample(1000, nrow(x), replace = T)]


lm_models <- x[, 

{

lm(data = .SD[, c(1:9, 19), with = F], formula = output ~ . -1)$coefficients

}, 

by = sampling]


lm_models[, coefs:= rep(1:9, times = 1000)]


avg_coefs <- lm_models[, mean(V1), by = coefs]

plot(dummy_coef, avg_coefs$V1)


lm_models[, 

  print(shapiro.test(V1)$p.value)

  , by = coefs]


ggplot(data = lm_models, aes(x = V1)) +

geom_histogram(binwidth = 0.05) +

facet_wrap(~ coefs, ncol = 3)


Sys.time() - start

运行时间:5秒。建立了1,000个线性模型。每个人在1000个观测点上。

[1] 0.8908975

[1] 0.9146406

[1] 0.3111422

[1] 0.02741917

[1] 0.9824953

[1] 0.3194611

[1] 0.606778

[1] 0.08360257

[1] 0.4843107

所有的系数都是正态分布。

还有用于可视化的ggplot-ic。

 

还有一个例子。也涉及到统计模拟的大样本旋转。

########## simulate diffference between mean density with different sample size


library(data.table)

library(ggplot2)


rm(list=ls());gc()


start <- Sys.time()


x <- rnorm(10000000, 0, 1)

y <- rnorm(10000000, 0, 1)


dat <- as.data.table(cbind(x, y))

dat[, (paste0('sampling_', c(100, 1000, 10000))):= lapply(c(100, 1000, 10000), function(x) sample(x, nrow(dat), replace = T))]


dat_melted <- melt(dat, measure.vars = paste0('sampling_', c(100, 1000, 10000)))


critical_t <- dat_melted[, 

   {

    mean(x) - mean(y)

   }

   , by = .(variable, value)]


ggplot(critical_t, aes(x = V1, group = variable, fill = variable)) + 

stat_density(alpha = 0.5)


Sys.time() - start


gc()

运行时间3.4秒。

以零为中心的正态分布样本被创建。

1,000乘以10,000对数值

10 000时1 000对值

100,000的100对值

计算每个样本的平均值(MO == 0)之间的差异。

得出了不同大小的样本的抽样平均分布的密度。

只有在这里sampling_100意味着你需要10,000,000 / 100来获得样本量。也就是说,对于较小的样本,标准误差较大...