交易中的机器学习:理论、模型、实践和算法交易 - 页 3268 1...326132623263326432653266326732683269327032713272327332743275...3399 新评论 fxsaber 2023.10.01 07:38 #32671 Forester #:我认为PearsonCorrM2 可以快速运行。我们输入 1 个满矩阵,从某一行开始检查第 2 个矩阵。如果从最后一行开始,可以将第一个矩阵的大小指定为下一行的行数,这样就不会重复计算被测试行以下各行的相关性。 我一开始尝试了正面变量--每次计算所有行。我的印象是 Alglib 中存在一些错误,因为我自己也找不到。 #include <Math\Alglib\statistics.mqh> // https://www.mql5.com/ru/code/11077 const matrix<double> CorrMatrix( const matrix<double> &Matrix ) { matrix<double> Res = {}; const CMatrixDouble MatrixIn(Matrix); CMatrixDouble MatrixOut; if (CBaseStat::PearsonCorrM(MatrixIn, MatrixIn.Rows(), MatrixIn.Cols(), MatrixOut)) // https://www.mql5.com/ru/code/11077 Res = MatrixOut.ToMatrix(); return(Res); } const matrix<double> CorrMatrix2( const matrix<double> &Matrix ) { matrix<double> Res = {}; Res.Init(Matrix.Cols(), Matrix.Cols()); const CMatrixDouble MatrixIn(Matrix); CMatrixDouble Vector(Matrix); CMatrixDouble Corr; for (int i = 0; i < (int)Matrix.Cols(); i++) { if (i) Vector.SwapCols(0, i); CBaseStat::PearsonCorrM2(Vector, MatrixIn, MatrixIn.Rows(), 1, MatrixIn.Cols(), Corr); Res.Col(Corr.Row(0), i); } return(Res); } #property script_show_inputs input int inRows = 5; // Длина строки input int inCols = 100; // Количество строк void FillArray( double &Array[], const int Amount ) { for (uint i = ArrayResize(Array, Amount); (bool)i--;) Array[i] = MathRand(); } bool IsEqual( matrix<double> &Matrix1, const matrix<double> &Matrix2, const double Sens = 1 e-10 ) { Matrix1 -= Matrix2; const bool Res = (MathMax(MathAbs(Matrix1.Max()), MathAbs(Matrix1.Min())) < Sens); Matrix1 += Matrix2; return(Res); } #define TOSTRING(A) #A + " = " + (string)(A) + " " void OnStart() { double Array[]; FillArray(Array, inRows * inCols); matrix<double> Matrix; Matrix.Assign(Array); Matrix.Init(inCols, inRows); Matrix = Matrix.Transpose(); Print(TOSTRING(inRows) + TOSTRING(inCols)); matrix<double> Matrix1 = CorrMatrix(Matrix); matrix<double> Matrix2 = CorrMatrix2(Matrix); matrix<double> Matrix3 = Matrix.CorrCoef(false); Print(TOSTRING(IsEqual(Matrix1, Matrix2))); Print(TOSTRING(IsEqual(Matrix1, Matrix3))); } 结果往往是一致的。 inRows = 5 inCols = 90 IsEqual(Matrix1, Matrix2) = true IsEqual(Matrix1, Matrix3) = true 但在某些情况下并非如此。 inRows = 5 inCols = 100 IsEqual(Matrix1, Matrix2) = false IsEqual(Matrix1, Matrix3) = true 如果总是这样,那肯定是我的错误。但这里有不干净的东西。 СанСаныч Фоменко 2023.10.01 07:38 #32672 Maxim Kuznetsov #:R 因其大杂烩而引人注目。在任何时刻,它都拥有一切,任何场合的任何软件包。但一两年后,它就会变得不可复制--书中的例子根本无法执行。 一个由专业团队创建的结构合理、参考性极强的系统不可能是杂乱无章 的。R 系统以交易为导向,不会为了普遍性和大众化而对一切事物分心。 这正是本书所展示的。 基于 R 的这本书所做的另一件事,就是打破了一种错觉,即你可以匆忙地获得一个基于 MO 的模型,而不需要拥有一大套工具,最重要的是,你不明白为什么你需要这样或那样的工具(软件包、函数),为什么你需要这样或那样的模型构建阶段,不明白你不能丢弃一些东西--一切都会崩溃。 СанСаныч Фоменко 2023.10.01 07:45 #32673 几十页的 "某物与某物的相关性 "就是一个完全不了解 "正在做什么 "的绝佳例子。 在计算相关性之前,我们应该回答这样一个问题:所使用的序列是否存在相关性?对于金融数列来说,这是第一个也是最重要的问题,因为对于金融数列来说,相关性是不存在的,因为它们不存在数学期望值,因此有必要证明所使用的平均值可以用作数学期望值。 顺便说一下,在 R 中,打喷嚏时要检查一次,这是例行程序。 Maxim Dmitrievsky 2023.10.01 07:59 #32674 СанСаныч Фоменко #:这是一本非常棒的书!它一定涵盖了国防部的所有问题。 适合初学者,你现在就是 给一般男孩看的《潮汐》。 fxsaber 2023.10.01 08:00 #32675 СанСаныч Фоменко #:几十页的 "某物与某物 "的相关性,就是一个完全不了解 "正在做什么 "的绝佳例子。 既然你不明白,那我就解释一下。 关于交易、自动交易系统和测试交易策略的论坛 交易中的机器学习:理论、模型、实践和算法交易 fxsaber, 2023.10.01 09:38 void FillArray( double &Array[], const int Amount ) { for (uint i = ArrayResize(Array, Amount); (bool)i--;) Array[i] = MathRand(); } MathRand 是随机数。即在随机矩阵上计算相关性。这样做的目的是确保算法的不同实现方式能得到相同的结果。对算法执行速度和内存消耗进行比较。如果你不称职,请不要参与。 fxsaber 2023.10.01 08:07 #32676 fxsaber #:我还没有找到逐行计算的标准软件。Alglib 看起来很慢。我正在尝试自己的变体。 #include <fxsaber\Math\Math.mqh> // https://www.mql5.com/ru/code/17982 matrix<double> CorrMatrix( const double &Array[], const int PatternLen, const bool CreateMatrix = true ) { matrix<double> Res = {}; const int Size = ArraySize(Array) / PatternLen - 1; if (CreateMatrix) { Res.Init(Size + 1, Size + 1); Res[Size][Size] = 1; } double Corr[]; DEJAVU Dejavu; Dejavu.SetSignal(Array); if (CreateMatrix) for (int i = 0, j; i < Size; i++) { Res[i][i] = 1; j = i + 1; Dejavu.SetPattern(PatternLen, i * PatternLen); Dejavu.GetCorrelation(Corr, PatternLen, j * PatternLen); for (; j <= Size; j++) { const double Tmp = Corr[(j + 1) * PatternLen - 1]; Res[i][j] = Tmp; Res[j][i] = Tmp; } } else for (int i = 0; i < Size; i++) { Dejavu.SetPattern(PatternLen, i * PatternLen); Dejavu.GetCorrelation(Corr, PatternLen, (i + 1) * PatternLen); } return(Res); } #property script_show_inputs input int inRows = 100; // Длина строки input int inCols = 15000; // Количество строк #define TOSTRING(A) #A + " = " + (string)(A) + " " // NumPy: https://www.mql5.com/ru/forum/86386/page3257#comment_49545300 void OnStart() { PrintCPU(); // https://www.mql5.com/ru/forum/86386/page3256#comment_49538685 double Array[]; FillArray(Array, inRows * inCols); // https://www.mql5.com/ru/forum/86386/page3267#comment_49671602 matrix<double> Matrix; Matrix.Assign(Array); Matrix.Init(inCols, inRows); Matrix = Matrix.Transpose(); ulong StartTime, StartMemory; Print(TOSTRING(inRows) + TOSTRING(inCols)); BENCH(matrix<double> Matrix1 = CorrMatrix(Matrix)) // https://www.mql5.com/ru/forum/86386/page3267#comment_49671602 BENCH(matrix<double> Matrix2 = Matrix.CorrCoef(false)); // https://www.mql5.com/ru/docs/basis/types/matrix_vector BENCH(matrix<double> Matrix3 = CorrMatrix(Array, inRows)); // https://www.mql5.com/ru/code/17982 BENCH(CorrMatrix(Array, inRows, false)); // https://www.mql5.com/ru/code/17982 Print(TOSTRING(IsEqual(Matrix1, Matrix2))); Print(TOSTRING(IsEqual(Matrix1, Matrix3))); } 结果。 EX5: 4000 AVX Release. TerminalInfoString(TERMINAL_CPU_NAME) = Intel Core i7-2700 K @ 3.50 GHz TerminalInfoInteger(TERMINAL_CPU_CORES) = 8 TerminalInfoString(TERMINAL_CPU_ARCHITECTURE) = AVX inRows = 100 inCols = 15000 matrix<double> Matrix1 = CorrMatrix(Matrix) - 13795998 mcs, 1717 MB matrix<double> Matrix2 = Matrix.CorrCoef(false) - 38346008 mcs, 1717 MB matrix<double> Matrix3 = CorrMatrix(Array, inRows) - 26632760 mcs, 1716 MB CorrMatrix(Array, inRows, false) - 19412824 mcs, 0 MB IsEqual(Matrix1, Matrix2) = true IsEqual(Matrix1, Matrix3) = true 自己设计的版本比标准版本快,但比 Alglib 慢(我无法理解算法)。同时,自制版本可以计算任意大小的矩阵,这一点与其他变体不同。 Maxim Dmitrievsky 2023.10.01 08:12 #32677 fxsaber #:结果自我设计比标准变体快,但比 Alglib 慢(我无法理解其算法)。同时,它还能读取任意大小的矩阵,这一点与其他变体不同。 你为什么这么喜欢用 mql 进行计算? 你可以用 C 语言编写 dll,而且速度会尽可能快。 对我来说,mql 主要还是一种用于开仓交易的语言。事实上,这是正确的。 mytarmailS 2023.10.01 08:23 #32678 fxsaber #: 如果您不明白,请听我解释。 MathRand 是一个随机数。也就是说,相关性是在随机矩阵上计算的。我们的目标是确保不同的算法实现能得到相同的结果。比较算法的执行速度和内存消耗。如果你不称职,就别管它了。 那么,整个相关性史诗的最终目标是什么呢?好吧,你已经发现了哪种实现方式更快,哪种实现方式给出的结果相同,哪种实现方式不....。你打算用这些知识做什么呢? fxsaber 2023.10.01 08:25 #32679 Maxim Dmitrievsky #:你可以用 C 语言编写 dll,而且速度会尽可能快。 我的无能限制了我的发挥。 mytarmailS 2023.10.01 08:25 #32680 Maxim Dmitrievsky #:对我来说,mql 仍然是开仓交易的主要语言。事实上,这是正确的。 我想,还有测试和可视化,以及快速操作。 1...326132623263326432653266326732683269327032713272327332743275...3399 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我认为PearsonCorrM2 可以快速运行。我们输入 1 个满矩阵,从某一行开始检查第 2 个矩阵。如果从最后一行开始,可以将第一个矩阵的大小指定为下一行的行数,这样就不会重复计算被测试行以下各行的相关性。
我一开始尝试了正面变量--每次计算所有行。我的印象是 Alglib 中存在一些错误,因为我自己也找不到。
结果往往是一致的。
但在某些情况下并非如此。
如果总是这样,那肯定是我的错误。但这里有不干净的东西。
R 因其大杂烩而引人注目。在任何时刻,它都拥有一切,任何场合的任何软件包。
但一两年后,它就会变得不可复制--书中的例子根本无法执行。
一个由专业团队创建的结构合理、参考性极强的系统不可能是杂乱无章 的。R 系统以交易为导向,不会为了普遍性和大众化而对一切事物分心。
这正是本书所展示的。
基于 R 的这本书所做的另一件事,就是打破了一种错觉,即你可以匆忙地获得一个基于 MO 的模型,而不需要拥有一大套工具,最重要的是,你不明白为什么你需要这样或那样的工具(软件包、函数),为什么你需要这样或那样的模型构建阶段,不明白你不能丢弃一些东西--一切都会崩溃。
几十页的 "某物与某物的相关性 "就是一个完全不了解 "正在做什么 "的绝佳例子。
在计算相关性之前,我们应该回答这样一个问题:所使用的序列是否存在相关性?对于金融数列来说,这是第一个也是最重要的问题,因为对于金融数列来说,相关性是不存在的,因为它们不存在数学期望值,因此有必要证明所使用的平均值可以用作数学期望值。
顺便说一下,在 R 中,打喷嚏时要检查一次,这是例行程序。
这是一本非常棒的书!
它一定涵盖了国防部的所有问题。
适合初学者,你现在就是
给一般男孩看的《潮汐》。
几十页的 "某物与某物 "的相关性,就是一个完全不了解 "正在做什么 "的绝佳例子。
关于交易、自动交易系统和测试交易策略的论坛
交易中的机器学习:理论、模型、实践和算法交易
fxsaber, 2023.10.01 09:38
MathRand 是随机数。即在随机矩阵上计算相关性。这样做的目的是确保算法的不同实现方式能得到相同的结果。对算法执行速度和内存消耗进行比较。如果你不称职,请不要参与。
我还没有找到逐行计算的标准软件。Alglib 看起来很慢。我正在尝试自己的变体。
结果。
自己设计的版本比标准版本快,但比 Alglib 慢(我无法理解算法)。同时,自制版本可以计算任意大小的矩阵,这一点与其他变体不同。
结果
自我设计比标准变体快,但比 Alglib 慢(我无法理解其算法)。同时,它还能读取任意大小的矩阵,这一点与其他变体不同。
你为什么这么喜欢用 mql 进行计算? 你可以用 C 语言编写 dll,而且速度会尽可能快。
对我来说,mql 主要还是一种用于开仓交易的语言。事实上,这是正确的。
如果您不明白,请听我解释。
MathRand 是一个随机数。也就是说,相关性是在随机矩阵上计算的。我们的目标是确保不同的算法实现能得到相同的结果。比较算法的执行速度和内存消耗。如果你不称职,就别管它了。
你可以用 C 语言编写 dll,而且速度会尽可能快。
我的无能限制了我的发挥。
对我来说,mql 仍然是开仓交易的主要语言。事实上,这是正确的。