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

 
elibrarius

错过了)

还有一点,如果你不取0,而取0.5--即使用你的方法也会在不同的样品中 "浮动"。

只有手动设置每个输入的范围才有帮助。但不清楚如何确定它。例如,你可以运行一年的数据,拒绝1-5%的异常值。并在这一年中与他们一起工作。虽然一年后他们会改变。


是的,你需要先取最大的可用样本,然后找到乘数(由于某种原因,我把它叫做乘数 :)

如果一个新的样本突然有一个更高的值......那么,你就必须用它来除以。但如果我们采取滞后较小的增量,例如close[0]/close[10],这种情况就很少发生......而对于close[0]/close[100],它已经可以更加频繁......但我认为已经有一个例外,特别是如果我们定期重新培训NS

我没有时间去考虑0.5。:)

 

只有那些与目标变量有关系的预测因子才应该被使用。无论是 "线性 "还是 "非线性",都无关紧要,与措辞非常准确的 "有关系 "无关。

为了再次澄清 "有关系 "的含义,我将举一个例子,我在这个问题上已经举过好几次了。


目标:人口,有两个等级:男性和女性

以一个预测因素为例:服装。它有两个价值:长裤和裙子。

有了这样的班级和这样的预测器,预测器的一部分将预测一个班级,另一部分将根据 "裤子-男人"、"裙子-女人 "来预测另一个班级。理想情况下,可以构建一个无错误的分类。

如果我们将这一系统应用于苏格兰人,那么男女双方所穿的 "裙子 "就会有重叠之处。这种重叠将给出一个 误差的上限,这是无法克服的。


有义务在两个不同的时间文件上测试模型:1月1日前和1月1日后。

在第一个文件中:教学、测试和 "样本外"。如果所有三个误差值都大致相等,那么就在第二个文件上运行--误差不应该与前三个文件有明显差异(不超过10%)。

这个模型没有 被重新训练。


PS。

如果你包括与目标无关的预测因素,即 "咖啡渣",误差就可以大大减少。我就不考虑误差小于10%的模型。但情况总是一样的:第二个文件的错误是第一个文件的错误的倍数。该模型是REBUILD,它从噪声中拾取了一些数值,试图减少分类误差,在未来,这样的数值很可能不存在,或将,或在时间....。这个模型没有 预测能力。

 
桑桑-弗门科

在第一个文件中:学习、测试和 "样本外"。如果三个误差值都差不多,那么就在第二个文件上运行--误差应该与前三个文件相差不大(不超过10%)。

两者的区别是什么?

1)第一个文件 的 "出样 "部分+另一个 "出样 "文件

2)和一个 "非样本",但包括第二个文件的较大部分?

在我看来,结果会是一样的。如果在第一个变体中,所有的东西在第二个文件中都是坏的,同样的数据会毁掉第二个变体中的一切。

 

在NS培训中一般有三个部分。一个培训部分,一个测试部分和一个控制部分。如果在测试部分,误差在正常范围内,那么我们认为模型没有被重新训练。IMHO。

 
Mihail Marchukajtes:

在NS培训中一般有三个部分。一个培训部分,一个测试部分和一个控制部分。如果在测试部分,误差在正常范围内,那么我们认为模型没有被重新训练。IMHO。

我同意,但为什么SanSanych要引入第4个部分(第二个办公室)还不清楚。毕竟,有可能将一个人扩展到包括两个人。
 
elibrarius

两者的区别是什么?

1)第一个文件 的 "出样 "部分+另一个 "出样 "文件

2)和一个 "非样本 "但较大的部分,包括第二个文件?

在我看来,结果会是一样的。如果第二个文件中第一个文件的情况不好,那么同样的数据也会在第二个文件中把事情搞砸。


第一个文件被随机分成三部分,即训练、测试和控制样本的碎片按日期混合在一起。这在真实的交易中是不会发生的。

但第二种是模仿性交易:我们总是在训练部分之后进行交易。与你的观点相反,很多时候,第二个文件的结果与第一个文件的结果非常不同--模型被过度训练 了,不适合使用。

 
格里戈里-乔宁

https://github.com/RandomKori/Py36MT5 这里是MT5的Python库的来源。唯一的问题是关于数组。传递数组或接收数组都不能正确工作。我在Visual Studio中调试了DLL代码。那里的一切都很好。问题是,这可能是一个终端错误。我还没有写如何与图书馆合作。这里面没有任何意义。没有数组就没有人需要它。虽然可能在pythom.mqh文件中搞砸了,但帮我弄清楚。都会有用武之地。

好的想法和有用的MT5库,但要将其与python脚本文件同步是相当麻烦的。

我认为最好是通过本地字典将MQL变量与Python变量直接同步,并直接从EA的代码中的字符串常量执行Python代码片段。

我试过测试,从命令行编译bcc64,在python 3.6中工作正常。

#include <stdio.h>
#include "python.h"
#pragma link "python36.lib"

int main(int argc, char **argv)
{
  Py_Initialize();
  PyObject* main = PyImport_AddModule("__main__");
  PyObject* global = PyModule_GetDict(main);
  PyObject* local = PyDict_New();

  int a, b = 2, c = 2; // synchronize python variables and calc a = b * c
  PyDict_SetItemString(local, "b", PyLong_FromLong(b));
  PyDict_SetItemString(local, "c", PyLong_FromLong(c));
  a = PyLong_AsLong(PyRun_String("b * c", Py_eval_input, global, local));
  printf("%d*%d=%d\n",b,c,a);

  PyRun_SimpleString("import sys"); // import python sys and read version
  printf(_PyUnicode_AsString(PyRun_String("sys.version", Py_eval_input, global, local)));

  Py_Finalize();
  return 0;
}

如果能在你的库中加入这个功能就好了,我正准备写我自己的库,但不幸的是,现在我正忙于P-net库,为Python服务。

顺便说一下,我在这里的一个分支中写过这个新的神经网络,根据对Fisher's Iris的例子的初步测试结果,它的训练速度比TensorFlow中的DNN快三个数量级,测试结果相同。

 
桑桑尼茨-弗门科

第一个文件被随机分为三部分,即训练、测试和控制样本的碎片按日期混合在一起。这在真实的交易中是不会发生的。

但第二种是模仿性交易:我们总是在训练部分之后进行交易。与你的观点相反,很多时候,第二个文件的结果与第一个文件的结果非常不同--模型被过度训练 了,不适合使用。

我总是把前三部分按顺序排列。而如果第3次是坏的,那么这个模型就是过度训练。
 

请记住,任何数据的冗余都会延迟模型进入战斗状态。这直接影响到接收信号的质量,....。

我个人选择了以下方法。我把使用买入信号得到的模型反过来,在市场的同一部位测试,但测试的是卖出信号。因此,我不会失去宝贵的时间,并充分估计模型的能力。IMHO

 
桑桑尼茨-弗门科

第一个文件被随机分为三部分,即训练、测试和控制样本的碎片按日期混合在一起。这在真实的交易中是不会发生的。

但第二种是模仿性交易:我们总是在训练部分之后进行交易。与你的观点相反,很多时候,第二个文件的结果与第一个文件的结果非常不同--模型被过度训练 了,不适合使用。


对于预测系统,数据到达的顺序很重要。对于分类,NO.