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

 
Dr.Trader:

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

我在过去几周一直在做,现在最好的结果是:(大量的计算,我试图使用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模型本身,暂时定位于预测因子的预筛选功能。

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

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

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

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


祝贺你,感谢你发布的结果。

我希望你的这个帖子能得到赞赏--你即使没有解决交易的基本问题,也是毫不 夸张的。

其他一切都会随之而来。

再次祝贺你,祝你好运

 
Dr.Trader:

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

我在过去几周一直在做,现在最好的结果是:(大量的计算,我试图使用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模型本身,暂时定位于预测因子的预筛选功能。

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

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

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

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

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

继续吧!随着时间的推移,你会变得更好。
 
Dr.Trader:
我开始看这个课程,它很注重Python中的Pandas框架。第一节课看起来更像是关于框架的教程,而不是关于数据分析的教程。但该教程看起来很充分,没有像许多其他无用的培训中那样典型的 "我是外汇大师,我会让你大开眼界,你会赚到几百万",这让人希望他们会把充分的东西讲到最后。但应该考虑到这个课程是为股票交易设计的,不是为外汇交易设计的,我不知道这两个领域的模型学习过程是否相似。
原则是一样的。交易有一些细微的差别。例如,接近现实的终端不多,可以测试交换(滑移、部分执行、延迟)。但也有这样的。但据我所知,MT5并不属于他们。
 
Dr.Trader:

我使用标准指标作为创建预测器的基础。

...

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

3)很明显,第二步之后的垃圾比需要的多。我使用关于基本组件的文章中描述的方法进行筛选,http://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/, SanSanych在前面写到。

...

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

人们不禁感到,这种计算完全是偶然的!预测器只不过是垃圾。他们中间可能有一颗钻石,因为 "生命 "可能从 "汤 "中产生!这就是 "生命"。

事实证明,这种方法是一种巧妙的优化计算。当有的时候,不是蛮干,而是更智能的算法。但输入的仍然是同样的垃圾。

事实证明,如果我们有这样一台强大的计算机器,可以在一秒钟内完成任何计算,我们就根本不需要任何训练。但与此同时,我们不会看到在接受盈利的TS方面有任何质的变化。可悲的是。

 
阿列克谢-沃尔昌斯基

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

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

一切都在这里 得到了更好的展示。

祝好运

 
安东-兹维列夫

我不禁感觉到,这种计算完全是基于机会的!我想这是一个很好的例子。预测因素都是垃圾。也许在他们中间会有一颗钻石--毕竟,生命可以从 "汤 "中诞生!

....这很可悲。

你是绝对错误的!你是绝对错误的

让我用一个例子来解释。

以kodobase为例。里面的一切都很垃圾,或者说里面有一些有价值的东西。最有可能的是,毕竟有这么多人的经验。

现在让我们肯定地假设,我们要进行趋势交易。在kodobase中,哪些可用的指标将对趋势交易有用?我们应该从名字上判断还是从直觉上判断?而我们能实际选择多少个来尝试呢?10, 20, 100?我认为100是通过一个测试者的生活,考虑到从组合。

但最重要的是,不仅仅是要尝试多少个指标。最主要的是专家顾问在未来是否能发挥作用。而专家顾问在未来只在一种情况下工作--如果它没有被重新训练(不是过度训练)。构建机械交易系统的主要问题是过度训练(overfitting)的问题。有很多人成功地克服了这个问题吗?

我认为Dr.Trader 并没有用火炬来建立他的预测器,而是有一些想法--目前,产生这么多预测器的想法并不有趣。

有趣的是完全是另一回事。

有趣的是你没有注意到什么。

在他数以千计的预测器中,Dr.Trader 可以选择那些不会导致专家顾问过度训练(过度拟合)的预测器。

他不仅知道如何选择不会导致过度拟合的EA的发展的预测器,而且他还展示了这样做的代码。

 
桑桑尼茨-弗门科

你完全错了!

让我用一个例子来解释。

以kodobase为例。里面的一切都很垃圾,或者说里面有一些有价值的东西。很可能有,毕竟有那么多人的经验。

当然是垃圾!那么,把整个kodobase作为预测器......

在他数以千计的预测器中,Dr.Trader 可以选择那些不会导致专家顾问过度训练(过度拟合)的预测器。

他不仅知道如何选择不会导致过度拟合的EA的发展的预测器,而且他还展示了这样做的代码。

而事实证明,在这一大堆垃圾中,没有发现一颗宝石,更不用说钻石了。我告诉你,这是个很好的机会。

或者这里有谁能够证实这样那样的指标不是垃圾吗?并用数字说明这一预测因素的相对重要性?

 

是的,我确实得到了很多随机的行动,我同意。但你不能只拿一个指标来做一个基于它的EA,你会很快走下坡路的。指标并不是100%的垃圾,但仅凭指标并不能提供足够的信息来预测价格走势。但我在研究中发现,将指标结合起来可能会提高它们的预测能力,也就是说,人们真的可以从垃圾中制造出钻石。问题是,有数千种可能的组合,而其中只有几十个是有用的,我不知道哪些指标最初比其他指标更好。到目前为止,这个问题已经像我之前写的那样,通过蛮力和长时间的计算得到了解决。随着时间的推移,我将得到关于哪些指标更经常进入最终预测器的统计数据,我将能够只用它们来工作,一切都会更快。

我已经开始根据获得的预测器制作一个专家顾问,结果将在测试器中真正可见。他们说,即使有60%的预测正确的条形图,你仍然会亏损,因为预测正确的条形图比预测错误的条形图所走的距离更短。如果是这样,你应该制作自己的健身函数来训练神经元,以估计不是条形的百分比而是模型的盈利能力。

 
Dr.Trader:

是的,我确实有很多行动是随机的,我同意。但你不能只拿一个指标来创建一个专家顾问,你会很快用它输掉。指标并不是100%的垃圾,但仅凭指标并不能提供足够的信息来预测价格走势。但我在研究中发现,将指标结合起来可能会提高它们的预测能力,也就是说,人们真的可以从垃圾中获得钻石。问题是,有数千种可能的组合,而其中只有几十种是有用的,我不知道哪些指标最初比其他指标更好。到目前为止,这个问题已经像我之前写的那样,通过蛮力和长时间的计算得到了解决。随着时间的推移,我将形成一些关于更经常进入最终预测者的指标的统计数据,我将能够只用它们来工作,一切都会更快。

你想在一个单一的BP 中找到相关关系。你想找到在该BP中必须一直存在 的相互关系。

至少可以说,这两种情况(黑体字)似乎很奇怪。

机器学习方法已经学会从图片中识别物体(一只狗、一个橙子等)。也就是说,它们已经学会了识别人类或某些种类的动物所能识别的东西。当一个人或一个动物看到一个价格BP时,它不知道任何事情。也就是说,他们无法在他们的NS中进行比较。然而,当一个人同时看几个BP时,他甚至用肉眼看到了相似之处。而这些相似之处,确实已经实现。因此,对物体的认识才是机器学习技术的逻辑重点。

首先我们自己意识到这一点,然后我们尝试算法。我想你知道我的意思。

曾几何时,欧元兑英镑的隔夜交易是非常酷的(有利可图)。你的国家安全局不会承认它。那些了解夜色陡峭原因的人从中获利。然后他们将算法应用于这些欧元兑英镑的历史片段,以找到它突然变得陡峭的日期。以免用陡峭之前的数据破坏了状态。他们开始调查。而且许多人在这上面赚了不少钱--只要读读论坛就知道了。

现在想象一下,GOLD/SILVER现在是很酷的。没有这样的货币对,但你可以交易它。但你把自己限制在一个单一的BP上。而且,寻找不同BP之间的相互联系是合乎逻辑的。在这种情况下,可能会出现黄金/白银这样的配对。而一个星期的间隔,白天或晚上等也起着巨大的作用。人们的行为取决于一天的时间和一周的日期。这是有意识的数据,所以这是你必须挖掘的地方,IMHO。

 
安东-兹维列夫

你想在一个单一的BP 中找到相关关系。而且你想找到在该BP中必须随时存在 的相互关系。

...

首先我们自己意识到这一点,然后我们尝试算法。我想你知道我的意思。

...

但你把自己限制在一个BP上。而且,寻找不同BP之间的相互联系是合乎逻辑的。在这种情况下,你可以得到这些 "金/银"。此外,一个星期的间隔,白天或晚上等也起着巨大的作用。人们的行为取决于一天的时间和一周的日期。这是有意识的数据,所以你必须在那里挖掘,IMHO。

到目前为止,我们正试图在同一时间线上找到条件性 "未来 "对 "过去 "的依赖性。但这并不意味着我们不会尝试为一系列的组合做这件事。

关于认可。对于橙子,你的推理是适用的。即使是专家也会区分出几个品种的橙色。

对于金融BP,你需要区分一个模式--即BP在整个可用的时间区间内的单调行为。是的,有时似乎有什么东西在眼前。但这种知识是非常模糊的,依赖性参数根本就没有精确的定义。在这里,人们不能没有计算机的帮助。虽然我并不是说没有人能够通过眼睛发现成瘾性并对其进行编码。

我同意Dr.Trader的观点,试图收集大量的垃圾,然后从中提取有价值的投入。这些输入的价值是通过训练模型和验证来检查的。如果不是噪音,在验证上会有一个加号。这就是机器学习的整个过程。)

我已经尝试过这样的原始输入。

> names(sampleA)

  [1] "lag_diff_2"        "lag_diff_3"        "lag_diff_4"        "lag_diff_6"        "lag_diff_8"        "lag_diff_11"       "lag_diff_16"     

  [8] "lag_diff_23"       "lag_diff_32"       "lag_diff_45"       "lag_diff_64"       "lag_diff_91"       "lag_diff_128"      "lag_diff_181"    

 [15] "lag_diff_256"      "lag_diff_362"      "lag_diff_512"      "lag_diff_724"      "lag_mean_diff_2"   "lag_mean_diff_3"   "lag_mean_diff_4" 

 [22] "lag_mean_diff_6"   "lag_mean_diff_8"   "lag_mean_diff_11"  "lag_mean_diff_16"  "lag_mean_diff_23"  "lag_mean_diff_32"  "lag_mean_diff_45"

 [29] "lag_mean_diff_64"  "lag_mean_diff_91"  "lag_mean_diff_128" "lag_mean_diff_181" "lag_mean_diff_256" "lag_mean_diff_362" "lag_mean_diff_512"

[36] "lag_mean_diff_724" "lag_max_diff_2"    "lag_max_diff_3"    "lag_max_diff_4"    "lag_max_diff_6"    "lag_max_diff_8"    "lag_max_diff_11" 

 [43] "lag_max_diff_16"   "lag_max_diff_23"   "lag_max_diff_32"   "lag_max_diff_45"   "lag_max_diff_64"   "lag_max_diff_91"   "lag_max_diff_128"

 [50] "lag_max_diff_181"  "lag_max_diff_256"  "lag_max_diff_362"  "lag_max_diff_512"  "lag_max_diff_724"  "lag_min_diff_2"    "lag_min_diff_3"  

 [57] "lag_min_diff_4"    "lag_min_diff_6"    "lag_min_diff_8"    "lag_min_diff_11"   "lag_min_diff_16"   "lag_min_diff_23"   "lag_min_diff_32" 

 [64] "lag_min_diff_45"   "lag_min_diff_64"   "lag_min_diff_91"   "lag_min_diff_128"  "lag_min_diff_181"  "lag_min_diff_256"  "lag_min_diff_362"

 [71] "lag_min_diff_512"  "lag_min_diff_724"  "lag_sd_2"          "lag_sd_3"          "lag_sd_4"          "lag_sd_6"          "lag_sd_8"        

 [78] "lag_sd_11"         "lag_sd_16"         "lag_sd_23"         "lag_sd_32"         "lag_sd_45"         "lag_sd_64"         "lag_sd_91"       

 [85] "lag_sd_128"        "lag_sd_181"        "lag_sd_256"        "lag_sd_362"        "lag_sd_512"        "lag_sd_724"        "lag_range_2"     

 [92] "lag_range_3"       "lag_range_4"       "lag_range_6"       "lag_range_8"       "lag_range_11"      "lag_range_16"      "lag_range_23"    

 [99] "lag_range_32"      "lag_range_45"      "lag_range_64"      "lag_range_91"      "lag_range_128"     "lag_range_181"     "lag_range_256"   

[106] "lag_range_362"     "lag_range_512"     "lag_range_724"     "symbol"            "month"             "day"               "week_day"        

[113] "hour"              "minute"            "future_lag_2"      "future_lag_3"      "future_lag_4"      "future_lag_6"      "future_lag_8"    

[120] "future_lag_11"     "future_lag_16"     "future_lag_23"     "future_lag_32"     "future_lag_45"     "future_lag_64"     "future_lag_91"   

[127] "future_lag_128"    "future_lag_181"    "future_lag_256"    "future_lag_362"    "future_lag_512"    "future_lag_724"

有时间和各种指标来衡量价格变动。然后我把它们也筛了出来。在这里,看看我得到了什么。

这是专家顾问的一部分,从R中的训练过的机器中获取信号。选定的条目会在那里显示。顺便说一下,首先是交易开始的时间。就是说,时间很重要!

这是对专家顾问从1999.02到2016.06的整个历史进行的测试。

这有点歪曲,但机器仍然学习的不是噪音,而是来自指示输入的依赖关系。

因此,我们处于有利的一面。至少,我们改善了实验的结果。

附加的文件: