EA: 来自"MQL5算法交易的神经网络"教程的示例 - 页 2 1234 新评论 bobozel1 2024.06.17 21:07 #11 下午好、 我正在尝试运行书中的第一个脚本,它可以生成一个 csv 文件。 文件名为 initial_data.mq5。 在第一步运行脚本时 如果(CopyClose(_Symbol, PERIOD_M5, Start, End, close) <= 0 ||| CopyOpen(_Symbol, PERIOD_M5, Start, End, open) <= 0 ||| CopyHigh(_Symbol, PERIOD_M5, Start, End, high) <= 0 || CopyLow(_Symbol, PERIOD_M5, Start, End, low) <= 0) 返回; CopyClose 始终等于-1 脚本崩溃,重新运行也无济于事,正如我在注释中看到的那样 这是正常情况,意味着服务器没有数据。 但是,我并不完全理解数据文件的路径是如何写入脚本的。 它写在 MQL5 文档中: 例如,来自 MetaQuotes-Demo 交易服务器的欧元兑美元符号数据将位于terminal_directory\bases\MetaQuotes-Demo\history\EURUSD\文件夹中。 我确实有 .hcc 解析度的文件和一个子目录 (cache),上面有像 H4.hc 这样的文件。 但在脚本 initial_data.mq5 中,只有一处写入了路径。 PrintFormat("Correlation coefficients saved to file %s\\\\Files\\\\%s"、 TerminalInfoString(TERMINAL_DATA_PATH), FileName); 我输出 TERMINAL_DATA_PATH 2024.06.16 22:53:39.982 path (EURUSD,M5) dataPath =C:\Users\HPAppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075 我该怎么做才能正确指定这些文件的路径,还是应该根据 MQL5 逻辑自动从终端目录钩取这些文件? 如何将数据下载到 csv 文件? Experts: Examples from the 从 MQL4 迁移到 MQL5 MetaTrader 5 中进行测试的原理 Aleksey Vyazmikin 2024.06.18 06:32 #12 bobozel1 #: 关于交易、自动交易系统和测试交易策略的论坛初学者关于 MQL4 和 MQL5 的任何问题,关于算法和代码的帮助和讨论Aleksey Vyazmikin, 2024.06.18 06:28 pm#define FileName "correlation.csv" //+------------------------------------------------------------------+ //| 外部参数| //+------------------------------------------------------------------+ input datetime Start = D'2015.01.01 00:00:00'; // 期初 input datetime End = D'2020.12.31 23:59:00'; // 期间结束//--- 打开文件以写入数据 int handle = FileOpen(FileName, FILE_WRITE | FILE_CSV | FILE_ANSI, "\t", CP_UTF8); if(handle == INVALID_HANDLE) { PrintFormat("Error of open file %s: %d", FileName, GetLastError()); return; } 文件打开 参数 open_flags [in]定义文件工作模式的标志组合。这些标志的定义如下: FILE_READ 文件打开用于读取 FILE_WRITE文件打开用于写入 FILE_BIN二进制读写模式(不进行字符串之间的转换) FILE_CSV类型为 csv 的文件(所有写入的元素都转换为相应类型的字符串,unicode 或 ansi,并用分 隔符分隔) FILE_TXT 纯文本� �� �(与csv 相同 ,但不考虑分隔符)FILE_ANE 文件打开用于写入 但不考虑分隔符) FILE_ANSIANSI 类型的字符串(单字节字符) FILE_UNICODEUNICODE 类型的字符串(双字节字符) FILE_SHARE_READ多个程序共享读取访问 FILE_SHARE_WRITE多个程序共享写入访问 FILE_COMMON文件位置在所有客户终端的公共文件夹中 \Terminal\Common\Files. 文件打开 注意事项 出于安全原因,在 MQL5 语言中,对文件的操作受到严格控制。用于使用 MQL5 语言工具进行文件操作的文件不能位于文件 "沙箱 "之外。 如果需要以特定编码读取文件(指定了带有编码 值的 codepage 参数),则必须设置 FILE_ANSI 标志。如果不指定 FILE_ANSI 标志,文本文件将以 Unicode 格式读取,而不进行任何转换。 文件将在 MQL5\Files 子文件夹(或测试代理_agent\MQL5\Files 目录)中的客户端文件夹中打开。如果在标志中指定了 FILE_COMMON,文件将在所有客户端的公共文件夹中打开。 可以根据以下规则打开 "命名通道": 通道名称是一个字符串,必须是:"servername/pipe/pipename",其中 servername 是网络上服务器的名称,pipename 是通道的名称。如果通道在同一台计算机上使用,服务器名可以省略,但应使用点来代替:"\.\pipe\pipename"。试图连接到通道的客户端必须知道通道的名称。 在从通道读取数据和向通道写入数据的连续操作之间,必须在文件开头调用FileFlush() 和FileSeek( )。 上述行中使用了特殊的反斜杠字符"\",因此在 MQL5 程序中写入名称时,"\"应加倍,即上述示例应在代码中写成"\\\\servername\\pipe\\pipename "。 有关使用命名通道的更多详情,请阅读文章 "通过命名通道与 MetaTrader 5 通信,无需 DLL"。 MQL5 编程基础: 文件 bobozel1 2024.06.18 18:39 #13 Aleksey Vyazmikin # 老实说,我对答案一无所知,就像机器人在写东西一样。我知道要创建的文件被写到哪里,但它并没有被创建。 我有一个具体问题,如何从 .hcc 和 .hc 文件中获取数据并写入 .csv? 结果是 运行书中的 initial_data.mq5 脚本: CopyClose 总是-1。如何解决这个问题? 我怀疑它之所以看不到这些文件,是因为数据文件的路径拼写不正确。 如何正确拼写数据文件的路径? 在我的案例中,数据文件位于沙盒内的 terminal_directory\bases\MetaQuotes-Demo\history\EURUSD\ 文件夹中。 我为这个问题纠结了一个星期,什么都看了,但还是没有找到解决办法。请帮帮我。 Aleksey Vyazmikin 2024.06.18 19:25 #14 bobozel1 #:老实说,我对答案一无所知,就像机器人在写东西一样。我知道要创建的文件写在哪里,但它并没有被创建。我有一个具体的问题,如何从 .hcc 和 .hc 文件中获取数据并写入 .csv?结果 运行了书中的 initial_data.mq5 脚本:CopyClose 总是-1。如何解决这个问题?我怀疑它只是没有看到这些文件,因为数据文件的路径拼写不正确。如何正确指定数据文件的路径? 在我的例子中,数据文件位于沙盒内的 terminal_terminal_directory\bases\MetaQuotes-Demo\history\EURUSD\ 文件夹中。我已经为此纠结了一个星期,看了所有的资料,但还是没有找到解决办法。请帮帮我。 所有数据都来自平台,用户并不关心终端从哪里获取数据--从哪个文件。 脚本使用图表上的数据。 请检查图表上是否有您请求报价的日期。 bobozel1 2024.06.18 20:21 #15 Aleksey Vyazmikin #:所有数据都来自平台,用户并不关心终端从哪里获取数据--从哪个文件。脚本使用图表上的数据。检查图表上是否有您要求报价的日期。请解释这意味着什么。脚本中有一个范围输入 datetime 开始 = D'2015.01.01.01 00:00:00'; // 期间开始输入 datetime End = D'2020.12.31 23:59:00'; // 期间结束在 M5 上我是否应该使用 M5 上的欧元兑美元 图表,滚动到2015.01.01,然后在上面运行脚本? 或者我可以在 MN 上运行脚本吗?新的刻度点会回到起点吗? Experts: Examples from the 识别有用信号的最佳历史深度是什么? 没有一个顾问不在Metatrader 5的任何货币对中工作。 Aleksey Vyazmikin 2024.06.18 21:50 #16 bobozel1 #:您能解释一下这是什么意思吗?脚本中有一个范围输入 datetime 开始 = D'2015.01.01.01 00:00:00'; // 期间开始输入 datetime End = D'2020.12.31 23:59:00'; // 期间结束在 M5 上我是否需要将 M5 上的欧元兑美元 图表滚动到2015.01.01,然后在上面运行脚本? 或者我可以在 MN 上运行脚本?新的刻度点会再次移动到起点吗? 请阅读终端帮助。还有一件 事。 你会发现有一个通过窗口中最大条数来设置历史深度的选项。您需要重新加载终端才能使更改生效。 因此,有必要同时设置所有 TF 的最大历史深度,即工作所需的最小 TF。 很明显,以 100 条为天数和以 100 条为分钟数,在条数上的深度是一样的,但在日期上就不一样了。 设置所需值或 "无限 "并重新加载终端后,如果所需时间段的历史记录可用,则可在月度 TF 上运行脚本。 bobozel1 2024.06.18 23:56 #17 Aleksey Vyazmikin #:请阅读终端帮助。还有一个你会了解到,可以通过窗口中的最大条数来设置历史深度。要使更改生效,需要重新加载终端。因此,有必要通过最小的 TF 一次设置所有 TF 的最大历史深度,这是工作需要。很明显,以 100 条为天数和以 100 条为分钟数,在条数上的深度是一样的,但在日期上就不一样了。当您设置了所需值或 "无限 "并重新加载终端后,如果所需时间段的历史记录可用,您就可以在月度 TF 上运行脚本。 谢谢!一切正常。 Aleksey Vyazmikin 2024.06.19 04:29 #18 bobozel1 #: 谢谢!成功了 不客气 Hai Shan Bo 2024.07.19 16:42 #19 最麻烦的不是这。最麻烦的是,优化的参数后,只能一年赢利。换一年,就又不行了。也就是说作者的这个是不可行的。不同的年份可能参数差距很大。或许根本就不存在这样的一系列参数,能够每年赢利 soodgah 2024.07.21 07:11 #20 感谢 德米特里 为本书所做的一切努力。它真的很有用。 在 neuronbase.mqh 中,你实现了下面的 ElasticNet 正则化方法,但书中却没有解释。 m_cWeights.m_mMatrix -= m_cWeights.m_mMatrix * Lambda[1] + Lambda[0] 但这与基本公式 (+) 或 Keras 源代码 (+) 不同。 请解释一下你的实现方法。为什么只使用 lambdas 而不是完整的公式,为什么用其中一个来乘权重,用另一个来求和。 Dmitriy Gizlyk 2024.07.15www.mql5.com Trader's profile 1234 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
下午好、
我正在尝试运行书中的第一个脚本,它可以生成一个 csv 文件。
文件名为 initial_data.mq5。
在第一步运行脚本时
如果(CopyClose(_Symbol, PERIOD_M5, Start, End, close) <= 0 |||
CopyOpen(_Symbol, PERIOD_M5, Start, End, open) <= 0 |||
CopyHigh(_Symbol, PERIOD_M5, Start, End, high) <= 0 ||
CopyLow(_Symbol, PERIOD_M5, Start, End, low) <= 0)
返回;
CopyClose 始终等于-1
脚本崩溃,重新运行也无济于事,正如我在注释中看到的那样
这是正常情况,意味着服务器没有数据。
但是,我并不完全理解数据文件的路径是如何写入脚本的。
它写在 MQL5 文档中:
例如,来自 MetaQuotes-Demo 交易服务器的欧元兑美元符号数据将位于terminal_directory\bases\MetaQuotes-Demo\history\EURUSD\文件夹中。
我确实有 .hcc 解析度的文件和一个子目录 (cache),上面有像 H4.hc 这样的文件。
但在脚本 initial_data.mq5 中,只有一处写入了路径。
PrintFormat("Correlation coefficients saved to file %s\\\\Files\\\\%s"、
TerminalInfoString(TERMINAL_DATA_PATH), FileName);
我输出 TERMINAL_DATA_PATH
2024.06.16 22:53:39.982 path (EURUSD,M5) dataPath =C:\Users\HPAppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075
我该怎么做才能正确指定这些文件的路径,还是应该根据 MQL5 逻辑自动从终端目录钩取这些文件?
如何将数据下载到 csv 文件?
关于交易、自动交易系统和测试交易策略的论坛
初学者关于 MQL4 和 MQL5 的任何问题,关于算法和代码的帮助和讨论
Aleksey Vyazmikin, 2024.06.18 06:28 pm
文件打开参数
open_flags
[in]定义文件工作模式的标志组合。这些标志的定义如下:
FILE_READ 文件打开用于读取
FILE_WRITE文件打开用于写入
FILE_BIN二进制读写模式(不进行字符串之间的转换)
FILE_CSV类型为 csv 的文件(所有写入的元素都转换为相应类型的字符串,unicode 或 ansi,并用分 隔符分隔)
FILE_TXT 纯文本� �� �(与csv 相同 ,但不考虑分隔符)FILE_ANE 文件打开用于写入 但不考虑分隔符)
FILE_ANSIANSI 类型的字符串(单字节字符)
FILE_UNICODEUNICODE 类型的字符串(双字节字符)
FILE_SHARE_READ多个程序共享读取访问
FILE_SHARE_WRITE多个程序共享写入访问
FILE_COMMON文件位置在所有客户终端的公共文件夹中 \Terminal\Common\Files.
注意事项
出于安全原因,在 MQL5 语言中,对文件的操作受到严格控制。用于使用 MQL5 语言工具进行文件操作的文件不能位于文件 "沙箱 "之外。
如果需要以特定编码读取文件(指定了带有编码 值的 codepage 参数),则必须设置 FILE_ANSI 标志。如果不指定 FILE_ANSI 标志,文本文件将以 Unicode 格式读取,而不进行任何转换。
文件将在 MQL5\Files 子文件夹(或测试代理_agent\MQL5\Files 目录)中的客户端文件夹中打开。如果在标志中指定了 FILE_COMMON,文件将在所有客户端的公共文件夹中打开。
可以根据以下规则打开 "命名通道":
上述行中使用了特殊的反斜杠字符"\",因此在 MQL5 程序中写入名称时,"\"应加倍,即上述示例应在代码中写成"\\\\servername\\pipe\\pipename "。
有关使用命名通道的更多详情,请阅读文章 "通过命名通道与 MetaTrader 5 通信,无需 DLL"。
老实说,我对答案一无所知,就像机器人在写东西一样。我知道要创建的文件被写到哪里,但它并没有被创建。
我有一个具体问题,如何从 .hcc 和 .hc 文件中获取数据并写入 .csv?
结果是 运行书中的 initial_data.mq5 脚本:
CopyClose 总是-1。如何解决这个问题?
我怀疑它之所以看不到这些文件,是因为数据文件的路径拼写不正确。
如何正确拼写数据文件的路径?
在我的案例中,数据文件位于沙盒内的 terminal_directory\bases\MetaQuotes-Demo\history\EURUSD\ 文件夹中。
我为这个问题纠结了一个星期,什么都看了,但还是没有找到解决办法。请帮帮我。
老实说,我对答案一无所知,就像机器人在写东西一样。我知道要创建的文件写在哪里,但它并没有被创建。
我有一个具体的问题,如何从 .hcc 和 .hc 文件中获取数据并写入 .csv?
结果 运行了书中的 initial_data.mq5 脚本:
CopyClose 总是-1。如何解决这个问题?
我怀疑它只是没有看到这些文件,因为数据文件的路径拼写不正确。
如何正确指定数据文件的路径?
在我的例子中,数据文件位于沙盒内的 terminal_terminal_directory\bases\MetaQuotes-Demo\history\EURUSD\ 文件夹中。
我已经为此纠结了一个星期,看了所有的资料,但还是没有找到解决办法。请帮帮我。
所有数据都来自平台,用户并不关心终端从哪里获取数据--从哪个文件。
脚本使用图表上的数据。
请检查图表上是否有您请求报价的日期。
所有数据都来自平台,用户并不关心终端从哪里获取数据--从哪个文件。
脚本使用图表上的数据。
检查图表上是否有您要求报价的日期。
请解释这意味着什么。
脚本中有一个范围
输入 datetime 开始 = D'2015.01.01.01 00:00:00'; // 期间开始
输入 datetime End = D'2020.12.31 23:59:00'; // 期间结束
在 M5 上
我是否应该使用 M5 上的欧元兑美元 图表,滚动到2015.01.01,然后在上面运行脚本?
或者我可以在 MN 上运行脚本吗?新的刻度点会回到起点吗?您能解释一下这是什么意思吗?
脚本中有一个范围
输入 datetime 开始 = D'2015.01.01.01 00:00:00'; // 期间开始
输入 datetime End = D'2020.12.31 23:59:00'; // 期间结束
在 M5 上
我是否需要将 M5 上的欧元兑美元 图表滚动到2015.01.01,然后在上面运行脚本?
或者我可以在 MN 上运行脚本?新的刻度点会再次移动到起点吗?请阅读终端帮助。还有一件 事。
你会发现有一个通过窗口中最大条数来设置历史深度的选项。您需要重新加载终端才能使更改生效。
因此,有必要同时设置所有 TF 的最大历史深度,即工作所需的最小 TF。
很明显,以 100 条为天数和以 100 条为分钟数,在条数上的深度是一样的,但在日期上就不一样了。
设置所需值或 "无限 "并重新加载终端后,如果所需时间段的历史记录可用,则可在月度 TF 上运行脚本。
请阅读终端帮助。还有一个
你会了解到,可以通过窗口中的最大条数来设置历史深度。要使更改生效,需要重新加载终端。
因此,有必要通过最小的 TF 一次设置所有 TF 的最大历史深度,这是工作需要。
很明显,以 100 条为天数和以 100 条为分钟数,在条数上的深度是一样的,但在日期上就不一样了。
当您设置了所需值或 "无限 "并重新加载终端后,如果所需时间段的历史记录可用,您就可以在月度 TF 上运行脚本。
谢谢!成功了
不客气
感谢 德米特里 为本书所做的一切努力。它真的很有用。
在 neuronbase.mqh 中,你实现了下面的 ElasticNet 正则化方法,但书中却没有解释。
m_cWeights.m_mMatrix -= m_cWeights.m_mMatrix * Lambda[1] + Lambda[0]
但这与基本公式 (+) 或 Keras 源代码 (+) 不同。
请解释一下你的实现方法。为什么只使用 lambdas 而不是完整的公式,为什么用其中一个来乘权重,用另一个来求和。