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

 
尤苏夫霍贾-苏尔托诺夫

MAs的设计本质是为了欺骗你--那些不了解市场规律的人。而每个人都上当了。令 人惊讶的是,这是一个事实。环顾四周,你会发现,MA是所有数字系列的属性,无论它们是市场还是随机的。醒醒吧,交易员们,不要让自己被愚弄了。

我称之为偏执狂))。

MAs是最常见的过滤器,它没有任何罪过。任何伴侣的方法都是好的,在它适用的地方和地方。

 
马克西姆-德米特里耶夫斯基

那么关于寻找特征的实际问题是什么呢?

在我们的情况下,只有价格。任何价格转换都是一种先验的规律性,其形式是对过程的某种 "记忆"(在n个时期内构建的指标)。也就是说,如果我们不知道规律性,我们只能输入价格,不同时期的增量,以考虑到记忆过程。

除了价格增量之外,还能有什么呢? 或者说,你在那里如此严格地挑选,有什么呢?:)

有一个atvoregression过程的订单,你可以通过NS做同样的事情。在我看来,这似乎是唯一可以被教导的东西。我的意思是采取计量经济学模型并扩展它们

IMHO......这就是为什么我甚至不尝试拿起筹码:)和神经是好的(但不是真的)。

换句话说,我们可以在价格中找到什么:趋势、季节性、周期性、噪音

你自己在几页前贴出了一个例子,有一个学习识别螺旋的神经元。标准的两个特征需要3个隐藏层的神经元。而如果你增加了更多的功能,一层就足够了。
所以在这里,你也可以用一百个过去的增量来喂养一个神经元,并在十几个隐藏层中进行处理,或者得到一些好的自制特征,这些特征是90年代的单层网格可以处理的。

 

我发现了另一个有趣的包,用于筛选出预测因素。它被称为FSelector。它提供了大约十几种筛除预测因子的方法,包括熵值。

我从https://www.mql5.com/ru/forum/86386/page6#comment_2534058,得到了带有预测器和目标的文件。


library(FSelector)
library(corrplot)

load("ALL_cod.RData")
trainTable <- Rat_DF1

PREDICTOR_COLUMNS_SEQ <- 1:27
TARGET_COLUMN_ID     <- 28

targetFormula <- as.simple.formula(colnames(trainTable)[PREDICTOR_COLUMNS_SEQ], colnames(trainTable)[TARGET_COLUMN_ID])

impMatrix <- matrix(NA, nrow = 0, ncol = length(PREDICTOR_COLUMNS_SEQ))

impMatrix <- rbind(impMatrix, colnames(trainTable)[PREDICTOR_COLUMNS_SEQ] %in% cfs(targetFormula, trainTable))
rownames(impMatrix)[nrow(impMatrix)] <- "cfs"
impMatrix <- rbind(impMatrix, chi.squared(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "chi.squared"
impMatrix <- rbind(impMatrix, colnames(trainTable)[PREDICTOR_COLUMNS_SEQ] %in% consistency(targetFormula, trainTable))
rownames(impMatrix)[nrow(impMatrix)] <- "consistency"
if(class(trainTable[,TARGET_COLUMN_ID]) != "factor"){
  impMatrix <- rbind(impMatrix, linear.correlation(targetFormula, trainTable)[[1]])
  rownames(impMatrix)[nrow(impMatrix)] <- "linear.correlation"
  impMatrix <- rbind(impMatrix, rank.correlation(targetFormula, trainTable)[[1]])
  rownames(impMatrix)[nrow(impMatrix)] <- "rank.correlation"
}
impMatrix <- rbind(impMatrix, information.gain(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "information.gain"
impMatrix <- rbind(impMatrix, gain.ratio(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "gain.ratio"
impMatrix <- rbind(impMatrix, symmetrical.uncertainty(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "symmetrical.uncertainty"
impMatrix <- rbind(impMatrix, oneR(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "oneR"
impMatrix <- rbind(impMatrix, random.forest.importance(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "random.forest.importance"
impMatrix <- rbind(impMatrix, relief(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "relief"

impMatrix

for(i in 1:nrow(impMatrix)){
  if(length(unique(impMatrix[i,]))==1){
    impMatrix[i,] <- 0
  }else{
    impMatrix[i,] <- -1 + (impMatrix[i,]-min(impMatrix[i,]))/(max(impMatrix[i,])-min(impMatrix[i,]))*2
  }
}

while(nrow(impMatrix) < ncol(impMatrix)){
  impMatrix <- rbind(impMatrix, 0)
}
while(ncol(impMatrix) < nrow(impMatrix)){
  impMatrix <- cbind(impMatrix, 0)
}

impMatrix <- as.matrix(impMatrix)
colnames(impMatrix) <- colnames(trainTable)[PREDICTOR_COLUMNS_SEQ]

corrplot(impMatrix)

每种方法对预测器的评价我都在最后的图表中显示。

蓝色是好的,红色是坏的(对于corrplot结果被缩放为[-1:1],对于确切的评价,见cfs(targetFormula, trainTable), chi.squared(targetFormula, trainTable)等的结果。)
你可以看到,X3、X4、X5、X19、X20几乎被所有的方法评估得很好,你可以从它们开始,然后尝试增加/减少更多。

然而,在Rat_DF2上使用这5个预测因子时, rattle中的模型没有通过测试,同样没有奇迹发生。也就是说,即使有剩余的预测因子,你也必须调整模型参数,做交叉验证,自己添加/删除预测因子。

 
桑桑尼茨-弗门科

你能不能对合并结果运行一个窗口并给出图表。

  • 熵值
  • adf测试结果
  • ArchTest结果

只取了今年1月左右的eurusd m1,以及1天的滑动窗口。

根据逻辑,如果熵在增长,那么你应该暂停交易,在低熵时继续交易。但在这里,由于某种原因,我们在低熵时有一个趋势,虽然在平盘时更容易交易。

(更正了所附代码中的错别字,如果你已经有时间下载旧的代码,请再下载一次)

附加的文件:
 
交易员博士

几页之前,你发布了一个神经网络学习检测螺旋的例子。标准的两个特征需要3个隐藏层的神经元。而如果你增加了更多的功能,一层就足够了。
所以在这里,你也可以用一百个过去的增量来喂养一个神经键,并在十几个隐藏层中进行处理,或者得到一些很好的自制特征,90年代的单层网格可以处理。

我明白,但螺旋线在时间上没有变化......想想看,当螺旋线在时间上现在是一个正方形,现在是一个椭圆,你解决的是一个多么错误的问题啊

和交叉验证没有帮助,因为状态转换是随机的。

 
交易员博士

从逻辑上讲,如果熵值上升,就应该停止交易,在低熵值时继续交易。但在这里,当熵低的时候,由于某种原因,它是有趋势的,尽管在平坦的地方更容易交易,这是不正常的。


这就是为什么我说要慢慢来。

在高熵时,我们得到了反趋势交易的正态分布。

在低熵--帕累托分布、趋势、"记忆"--无论你怎么称呼它。

原来你在R里有一些现成的东西,对你来说比较容易。而我,现在有很多工作要做,要对非熵进行解释,所以我已经退出了论坛的讨论。

我坚持自己的观点--熵的核算是一切的关键。

 
马克西姆-德米特里耶夫斯基

交叉验证没有帮助,因为状态转换是随机的。

如果状态转换是随机的,那么这个过程就是马尔可夫的,这个论坛的整个主题可能会因为无用而被删除 :)

但是我,比如说,我相信这个过程是非马尔科夫的。亚历山大似乎同意,他在统计方面比我强得多,我相信他。

 
交易员博士

如果状态转换是随机的,那么这个过程就是马尔可夫的,整个论坛的主题可以因为无用而被删除 :)

但是我,比如说,我相信这个过程是非马尔科夫的。亚历山大似乎同意,他比我更了解统计数据,我会相信他。

我已经写道:在局部水平上是随机的,如果不转移到大滞后或其他规模,你就不能把它们全部考虑进去,在那里,这个过程又变得可预测了。一个是BUT,一般人不知道,转移到另一个规模的数量是有限的。这就是为什么亚历山大使用蜱虫。的确如此,但当我们遇到由于历史 的缺失而导致的历史不足,以及因此而导致的对所调查的BP的模式缺乏清晰的概念时,即使它也不会总是有效。

总而言之,有些地方层面的过渡根本无法预测,它需要另一个层面的表述

 
交易员博士

如果状态转换是随机的,那么这个过程就是马尔可夫的,整个论坛的主题可以因为无用而被删除 :)

但是我,比如说,我相信这个过程是非马尔科夫的。亚历山大似乎同意,他比我更了解统计数据,我会相信他。

虽然我不使用神经网络,但我读了这个主题,因为费曼确信有可能预测粒子从状态A到状态B的进一步运动(准确地从状态到状态,而不是仅仅推断到无限大)。

为此,他把当前状态和以前状态之间的通常增量作为输入,并考虑到了许多额外的参数。Shelepin L.A.是第一个开始使用非熵的人,由于某种原因而死...这并没有使工作结束。因此,由我们来完成这个课题。

 

是的!我忘了说了。

状态被认为是一组几乎完全描述粒子特征的数据。也就是说,它是一个数据集,简单地说--样本量,有其特征--峰度、不对称性、非熵等。

也就是说,以R.Feynman的信心,可以断言,在正确定义了混凝土对的样本量之后,在计算了这个样本的这些系数的历史特征平均值之后,可以预测,在目前拥有一定的参数集,在一定的时间间隔内,系统将传递到一个具有其稳态参数的状态。

这就是我对这个主题的期望。如果你在确定正确的样本量方面需要帮助,请与我联系,我将尽力提供帮助。