程序库: mt-R - 页 3 123 新评论 СанСаныч Фоменко 2019.01.23 14:15 #21 cgarbelli:你好我正在尝试使用 RAssignStringVector函数,但似乎只有每个项的第一个字符会被复制到 R 会话中。例如,MQL5 向量{"abcd","2000","2000}复制到 R 中为{"a", "2", "2"}这是一个问题还是我弄错了?请注意,我使用 RAssignVector 和 double vector 时都没有问题。谢谢。克劳迪奥我不使用 MT5,抱歉 Aleksei Kuznetsov 2021.11.22 10:04 #22 注意! 在 R.mqh 文件中,变量向量 和矩阵 的名称在编译时开始产生错误。将它们重命名为其他变量名后,一切正常。我使用了 vectr 和 matr。 编辑器会用蓝色高亮显示这些词的数据类型,如int、double。显然,它们为新类型保留了字词。 Aleksei Kuznetsov 2021.11.22 14:05 #23 所有函数的说明(从旧版本复制https://www.mql5.com/en/code/11112) /** * 返回 dll 版本。 * 返回值的高 16 位是主版本,低 16 位是次版本。 * 在 RInit() 中使用,以确保本头文件与 * zz the dll 相匹配。 */ int RGetDllVersion(); /** * 该函数不会被直接调用,它将在版本检查成功后被 * RInit() 调用。 * */ long RInit_(string commandline,int debuglevel); /** * 终止 R 会话。 * 此后句柄不再有效。 */ void RDeinit(long rhandle); /** * 如果属于此句柄的 R 会话 * 仍在运行,则返回 true。如果您发送的 * 代码中出现任何致命错误,R 将终止运行。您应该在启动函数 * 的开头检查这一点,并停止所有操作。崩溃前的最后一条 * 命令将在日志中找到。 * 如果 R 不再运行,该库将不再发出任何 * 日志信息,并默默忽略所有命令。 */ bool RIsRunning(long rhandle); /** * 如果 R 仍在执行命令,则返回 true(由调用 RExecec 命令产生) 。* 调用 RExecuteAsync() 后产生) */ bool RIsBusy(long rhandle); /** * 执行代码,不等待。但任何后续调用 * 都将等待,因为在 * 任何时候都只能有一个线程在执行。使用 RIsBusy() 检查是否已完成 */ void RExecuteAsync(long rhandle,string code); /** * 执行代码并等待,直到执行完毕。 * 不会返回任何内容。使用 * RGet*()函数基本上也可以实现同样的功能,评估表达式也是 * 执行代码,唯一的区别是 * RGet*() 函数会额外尝试解析并返回 * 输出,而 RExecute() 函数只是执行、等待并 * 忽略所有输出。 */ void RExecute(long rhandle,string code); /** * 给变量名分配一个 bool。在 R 中,这种类型称为 "逻辑" */ void RAssignBool(long rhandle,string variable,bool value); /** * 为变量名赋值一个整数。 */ void RAssignInteger(long rhandle,string variable,int value); /** * 为变量名赋值一个 double。 */ void RAssignDouble(long rhandle,string variable,double value); /** * 为变量名分配一个字符串。在 R 中,这种类型被称为 "字符" */ void RAssignString(long rhandle,string variable,string value); /** * 为变量名分配一个向量。 */ void RAssignVector(long rhandle,string variable,double &vectr[],int size); /** * 为变量赋值字符向量(字符串数组)。如果需要 * 因数,则应在此命令后执行代码进行转换。在 * 最新版本的 R 中,字符串向量并不需要比 * 因数更多的内存,而且更容易添加新元素。 */ void RAssignStringVector(long rhandle,string variable,string &vectr[],int size); /** * 为变量名分配一个矩阵。矩阵必须以行号作为 * 第一个维度(原始数据将使用 byrow=TRUE)。该函数比通过 RRowBindVector() 在末尾为每一行添加 * 新行来从头开始构建一个庞大的矩阵(数百行)要快得多 *。 * 通过使用带有原始二进制数据 * 的文件-IO,该函数经过优化,只需调用一次函数即可获得巨大的吞吐量。对于只有少量元素的小型矩阵和矢量, * 这可能会造成过多的开销,而其他函数会更快。一旦 * 将可能有数千行的矩阵传输到 R,那么 * 就应该只使用 RRowBindVector() 在单个新的 * 数据矢量到来时进一步缓慢增长矩阵,而不是总是发送整个矩阵的新副本。 */ void RAssignMatrix(long rhandle,string variable,double &matr[],int rows,int cols); /** * 向矩阵或数据帧追加一行。这将执行 * variable <- rbind(variable, vector) * 如果大小与实际数组大小不匹配,可能会发生不好的事情。 */ void RAppendMatrixRow(long rhandle,string variable,double &vectr[],int size); /** * 如果变量存在,则返回 true,否则返回 false。 */ bool RExists(long rhandle,string variable); /** * 评估表达式并返回一个 bool。表达式可以是任何 R 代码, * 可以求值为逻辑值。如果是逻辑向量,则只返回 * 第一个元素。 */ bool RGetBool(long rhandle,string expression); /** * 评估表达式并返回一个整数。表达式可以是任何 R 代码, * 可以求值为整数。 */ int RGetInteger(long rhandle,string expression); /** * 评估表达式并返回一个 double。表达式可以是任何可以求浮点数的 R 代码 *,如果是矢量,则 * 只返回第一个元素。 */ double RGetDouble(long rhandle,string expression); /** * 评估表达式并返回一个双数值向量。表达式可以是 * 任何求值为浮点数向量的内容。 * 返回值是可复制到 * 数组中的元素个数。 * 如果大小不匹配,会在调试级别 1 输出警告。 *>> 限制为 100000 个元素 */ int RGetVector(long rhandle,string expression,double &vectr[],int size); /** * 为调试目的进行 print(expression) 操作。 */ void RPrint(long rhandle,string expression); mt4R for new MQL4 www.mql5.com mt4R, modified for supporting new MQL4 交易中的机器学习:理论、模型、实践和算法交易 Libraries: mt-R Machine learning in trading: Ilya Kosarev 2023.04.17 06:48 #24 干得好!您能否帮助解决在特定情况下出现的问题?1) 运行两个不同经纪商的两个 mt5 终端2) 相互复制所有内容3) 使用您的 dll 运行专家,并将数组从 mt5 发送到 Rterm4) 等待几分钟两个 mt5 终端中的一个将被关闭。为什么会这样?谢谢。 123 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你好
我正在尝试使用 RAssignStringVector函数,但似乎只有每个项的第一个字符会被复制到 R 会话中。
例如,MQL5 向量
{"abcd","2000","2000}
复制到 R 中为
{"a", "2", "2"}
这是一个问题还是我弄错了?
请注意,我使用 RAssignVector 和 double vector 时都没有问题。
谢谢。
克劳迪奥
我不使用 MT5,抱歉
注意!
在 R.mqh 文件中,变量向量 和矩阵 的名称在编译时开始产生错误。将它们重命名为其他变量名后,一切正常。我使用了 vectr 和 matr。
编辑器会用蓝色高亮显示这些词的数据类型,如int、double。显然,它们为新类型保留了字词。
所有函数的说明(从旧版本复制https://www.mql5.com/en/code/11112)
/**
* 返回 dll 版本。
* 返回值的高 16 位是主版本,低 16 位是次版本。
* 在 RInit() 中使用,以确保本头文件与
* zz the dll 相匹配。
*/
int RGetDllVersion();
/**
* 该函数不会被直接调用,它将在版本检查成功后被
* RInit() 调用。
*
*/
long RInit_(string commandline,int debuglevel);
/**
* 终止 R 会话。
* 此后句柄不再有效。
*/
void RDeinit(long rhandle);
/**
* 如果属于此句柄的 R 会话
* 仍在运行,则返回 true。如果您发送的
* 代码中出现任何致命错误,R 将终止运行。您应该在启动函数
* 的开头检查这一点,并停止所有操作。崩溃前的最后一条
* 命令将在日志中找到。
* 如果 R 不再运行,该库将不再发出任何
* 日志信息,并默默忽略所有命令。
*/
bool RIsRunning(long rhandle);
/**
* 如果 R 仍在执行命令,则返回 true(由调用 RExecec 命令产生)
。* 调用 RExecuteAsync() 后产生)
*/
bool RIsBusy(long rhandle);
/**
* 执行代码,不等待。但任何后续调用
* 都将等待,因为在
* 任何时候都只能有一个线程在执行。使用 RIsBusy() 检查是否已完成
*/
void RExecuteAsync(long rhandle,string code);
/**
* 执行代码并等待,直到执行完毕。
* 不会返回任何内容。使用
* RGet*()函数基本上也可以实现同样的功能,评估表达式也是
* 执行代码,唯一的区别是
* RGet*() 函数会额外尝试解析并返回
* 输出,而 RExecute() 函数只是执行、等待并
* 忽略所有输出。
*/
void RExecute(long rhandle,string code);
/**
* 给变量名分配一个 bool。在 R 中,这种类型称为 "逻辑"
*/
void RAssignBool(long rhandle,string variable,bool value);
/**
* 为变量名赋值一个整数。
*/
void RAssignInteger(long rhandle,string variable,int value);
/**
* 为变量名赋值一个 double。
*/
void RAssignDouble(long rhandle,string variable,double value);
/**
* 为变量名分配一个字符串。在 R 中,这种类型被称为 "字符"
*/
void RAssignString(long rhandle,string variable,string value);
/**
* 为变量名分配一个向量。
*/
void RAssignVector(long rhandle,string variable,double &vectr[],int size);
/**
* 为变量赋值字符向量(字符串数组)。如果需要
* 因数,则应在此命令后执行代码进行转换。在
* 最新版本的 R 中,字符串向量并不需要比
* 因数更多的内存,而且更容易添加新元素。
*/
void RAssignStringVector(long rhandle,string variable,string &vectr[],int size);
/**
* 为变量名分配一个矩阵。矩阵必须以行号作为
* 第一个维度(原始数据将使用 byrow=TRUE)。该函数比通过 RRowBindVector() 在末尾为每一行添加
* 新行来从头开始构建一个庞大的矩阵(数百行)要快得多
*。
* 通过使用带有原始二进制数据
* 的文件-IO,该函数经过优化,只需调用一次函数即可获得巨大的吞吐量。对于只有少量元素的小型矩阵和矢量,
* 这可能会造成过多的开销,而其他函数会更快。一旦
* 将可能有数千行的矩阵传输到 R,那么
* 就应该只使用 RRowBindVector() 在单个新的
* 数据矢量到来时进一步缓慢增长矩阵,而不是总是发送整个矩阵的新副本。
*/
void RAssignMatrix(long rhandle,string variable,double &matr[],int rows,int cols);
/**
* 向矩阵或数据帧追加一行。这将执行
* variable <- rbind(variable, vector)
* 如果大小与实际数组大小不匹配,可能会发生不好的事情。
*/
void RAppendMatrixRow(long rhandle,string variable,double &vectr[],int size);
/**
* 如果变量存在,则返回 true,否则返回 false。
*/
bool RExists(long rhandle,string variable);
/**
* 评估表达式并返回一个 bool。表达式可以是任何 R 代码,
* 可以求值为逻辑值。如果是逻辑向量,则只返回
* 第一个元素。
*/
bool RGetBool(long rhandle,string expression);
/**
* 评估表达式并返回一个整数。表达式可以是任何 R 代码,
* 可以求值为整数。
*/
int RGetInteger(long rhandle,string expression);
/**
* 评估表达式并返回一个 double。表达式可以是任何可以求浮点数的 R 代码
*,如果是矢量,则
* 只返回第一个元素。
*/
double RGetDouble(long rhandle,string expression);
/**
* 评估表达式并返回一个双数值向量。表达式可以是
* 任何求值为浮点数向量的内容。
* 返回值是可复制到
* 数组中的元素个数。
* 如果大小不匹配,会在调试级别 1 输出警告。
*>> 限制为 100000 个元素
*/
int RGetVector(long rhandle,string expression,double &vectr[],int size);
/**
* 为调试目的进行 print(expression) 操作。
*/
void RPrint(long rhandle,string expression);