交易中的机器学习:理论、模型、实践和算法交易 - 页 3269 1...326232633264326532663267326832693270327132723273327432753276...3399 新评论 fxsaber 2023.10.01 10:27 #32681 mytarmailS #: 那么,整个相关性的最终目标是什么? 好吧,你已经发现了哪种实现方式更快,哪种结果相同,哪种不相同......你打算用这些知识做什么呢? 我可以计算出别人因技术限制而无法计算的结果 Maxim Dmitrievsky 2023.10.01 10:27 #32682 mytarmailS #: 测试、可视化和快速行动也是正常的。 最终优化也很正常,以获取交易参数 Forester 2023.10.01 10:27 #32683 fxsaber #:起初,我试着做正面变体--每次计算所有行。我觉得 Alglib 中存在一些错误,因为我在自己的 Alglib 中找不到。结果往往是一致的。但在某些情况下,却并非如此。如果总是这样 那就是我的错了但这里面有猫腻 我制作了 Print(Matrix1); Print("------------------"); Print(Matrix2); Matrix2 有前 5 个匹配项,然后是零。 我将 Res.Col(Corr.Row(0),i);改为 Res.Row(Corr.Row(0),i); 矩阵变得相似了,但 IsEqual 仍然没有通过。是不是哪里出了问题? fxsaber 2023.10.01 10:29 #32684 Forester #:将 Res.Col(Corr.Row(0),i);更改为 Res.Row(Corr.Row(0),i); 似乎是错误的。 Forester 2023.10.01 10:37 #32685 Forester #: 制作 Print(Matrix1); Print("------------------"); Print(Matrix2);Matrix2 有前 5 个匹配项,然后是零。 我将 Res.Col(Corr.Row(0), i); 改为 Res.Row(Corr.Row(0), i); 矩阵变得相似了,但 IsEqual 仍然没有通过。可能是其他地方出了问题... 找到问题所在 应该是这样 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); } Forester 2023.10.01 10:48 #32686 如果按三角形计数,PearsonCorrM2 的速度可以提高 2 倍。......第 50 行,全部数到第 50 行,等等。因为 =1,所以不要自计数。 附: 总的来说,你的代码既漂亮又简洁。我会在 loops)))) 中完成所有工作 mytarmailS 2023.10.01 10:52 #32687 Forester #: 如果按三角形计数,PearsonCorrM2 的速度可以提高 2 倍。......第 50 行的所有数据到第 50 行,以此类推。 我在某处读到过,可以通过快速傅立叶变换快速计算相关性......这也是加快速度的一个选项。 Maxim Dmitrievsky 2023.10.01 10:55 #32688 residuals_a= a_mat- a_mat. column_means residuals_b= b_mat- b_mat. column_means a_residual_sums= residuals_a. column_sums b_residual_sums= residuals_b.column_sums residual_products = dot_product( residuals_a. transpose, residuals_b)sum_products= sqrt( dot_product( a_residual_sums, b_residual_sums))相关性= residual_products/ sum_products fxsaber 2023.10.01 11:31 #32689 mytarmailS #: 我在某处读到过,你可以通过快速傅立叶变换快速读取相关性......这也是加快速度的一种选择。 我已经这么做了。当字符串长度较大时,这样做是有意义的。有机会我演示给你看。 fxsaber 2023.10.01 11:39 #32690 Forester #:发现问题应该是这样的 没错,谢谢!我不明白为什么在 inCols < 100 的情况下,错误的选项会起作用。 1...326232633264326532663267326832693270327132723273327432753276...3399 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
那么,整个相关性的最终目标是什么?
我可以计算出别人因技术限制而无法计算的结果
测试、可视化和快速行动也是正常的。
最终优化也很正常,以获取交易参数
起初,我试着做正面变体--每次计算所有行。我觉得 Alglib 中存在一些错误,因为我在自己的 Alglib 中找不到。
结果往往是一致的。
但在某些情况下,却并非如此。
如果总是这样 那就是我的错了但这里面有猫腻
Print(Matrix1);
Print("------------------");
Print(Matrix2);
Matrix2 有前 5 个匹配项,然后是零。
矩阵变得相似了,但 IsEqual 仍然没有通过。是不是哪里出了问题?我将 Res.Col(Corr.Row(0),i);改为 Res.Row(Corr.Row(0),i);
将 Res.Col(Corr.Row(0),i);更改为 Res.Row(Corr.Row(0),i);
似乎是错误的。
制作
Print(Matrix1);
Print("------------------");
Print(Matrix2);
Matrix2 有前 5 个匹配项,然后是零。
矩阵变得相似了,但 IsEqual 仍然没有通过。可能是其他地方出了问题...我将 Res.Col(Corr.Row(0), i); 改为 Res.Row(Corr.Row(0), i);
找到问题所在
应该是这样
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);
}
附:
总的来说,你的代码既漂亮又简洁。我会在 loops)))) 中完成所有工作
如果按三角形计数,PearsonCorrM2 的速度可以提高 2 倍。......第 50 行的所有数据到第 50 行,以此类推。
我在某处读到过,你可以通过快速傅立叶变换快速读取相关性......这也是加快速度的一种选择。
我已经这么做了。当字符串长度较大时,这样做是有意义的。有机会我演示给你看。
发现问题
应该是这样的