错误、漏洞、问题 - 页 2859 1...285228532854285528562857285828592860286128622863286428652866...3184 新评论 Igor Makanu 2020.09.27 20:08 #28581 fxsaber:总的来说,你对可能的实施方案有什么想法? 有许多可能的实现方式 但这一切都归结为EA之间的数据交换 任务。 最简单的方法是检查初始化的权限,并在OnTick()中执行初始化本身--这将允许避免恢复图表,然后在上面运行EA,并且在关闭前保存EA将有可能在OnDeinit()中完成。 谁来管理这个动物园并不 重要--要么是主要的EA,要么是一个服务机构。 Aleksey Vyazmikin 2020.09.27 21:44 #28582 在测试员日志中 2020.09.28 00:41:09.491 wrong tester bar time 2020.09.28 00:41:09.491 history error 9 in undefined function 它是什么意思? Slava 2020.09.28 05:22 #28583 Aleksey Vyazmikin:在测试员日志中它是什么意思? 这意味着,当收到m1 ohlc的下一个值时(或通过开盘价 测试时的bar状态),时间字段包含0 未定义函数意味着问题发生在预定义函数(OnTick、OnTimer等)之外,即在测试器的主循环中。 Aleksey Vyazmikin 2020.09.28 07:02 #28584 Slava:这意味着,当获得下一个m1 ohlc值(或通过开盘价 测试时的bar状态)时,时间字段包含0未定义函数意味着问题发生在预定义函数(OnTick、OnTimer等)之外,即在测试器的主循环中。 一整天一切都在正常工作,然后就开始了。作为一个用户,我可以做什么? Aleksey Vyazmikin 2020.09.28 13:31 #28585 Slava:这意味着,当获得下一个m1 ohlc值(或通过开盘价 测试时的bar状态)时,时间字段包含0未定义函数意味着问题发生在预定义函数(OnTick、OnTimer等)之外,即在测试器的主循环中。 我不明白,是我的代码有错误还是终端有错误?抹掉了所有的历史记录--没有帮助。 已添加。 在我的代码中发现了一个函数,禁用它可以避免错误,但在另一个EA中,这个函数可以正常工作!怎么说呢?我可以把它放在我的私人信息中。 即使启用了这个有缺陷的函数,OnTick() 也是完全运行在第一条杠上,然后就出现了这个错误。 在不同的终端上,该错误被确认。 在蜱虫上运行 - 没有错误... 但奇怪的是在日志中。 2020.09.28 17:22:22.327 2020.09.18 09:45:02 Test_01 关于刻度线,如果看一下工具,第一个刻度线正好是在10:00,而交易时段在这个时候仍然关闭。这是在视觉模式下,如果不打勾,第一个印刷品就在10点钟方向。 fxsaber 2020.09.28 15:00 #28586 Igor Makanu:最简单的方法是在每个EA的开始时在OnTick()中检查初始化权限 这是问题的主要症结所在。 Alexey Viktorov 2020.09.28 15:50 #28587 fxsaber: 这是该任务的主要问题。 尽量注意图表中的ID,并按资历运行。但这并不否定EA的互动。或者做一个文件,或者可能是一个SQLite数据库,里面有发射序列中的图表ID。 类似于,在第一次初始化时,如果列表中没有Chart_ID(),那么它就被输入到列表中。如果它由于终端关闭 而没有被关闭,那么它就会从列表中删除。通过这种方式,将有可能配置EA的互动。 Igor Makanu 2020.09.28 16:50 #28588 fxsaber: 这是问题的主要症结所在。 勾勒出我的看法......用这个代码创建了2个EA。 #define PREFIX_NAME "QWERTY_" enum ENUM_EA_STATE {WORK, READY_TO_INIT, ENABLE_INIT, ERROR_GLOBAL_VARIABLE}; const string this_ea_name = PREFIX_NAME + MQLInfoString(MQL_PROGRAM_NAME); void OnTick() { static ENUM_EA_STATE state = GlobalVariableSet(this_ea_name, ENUM_EA_STATE::READY_TO_INIT) > 0 ? READY_TO_INIT : ERROR_GLOBAL_VARIABLE; Comment(EnumToString(state)); if(state != WORK) { if(state == ERROR_GLOBAL_VARIABLE) return; if(!My_Init(this_ea_name)) return; GlobalVariableSet(this_ea_name, ENUM_EA_STATE::WORK); state = WORK; } Print(this_ea_name, " ", __FUNCTION__); } //+------------------------------------------------------------------+ bool My_Init(const string chek_ea_name) { if(GlobalVariableGet(chek_ea_name) == (ENUM_EA_STATE)ENABLE_INIT) { Print("EA is init"); return(true); } return(false); } //+------------------------------------------------------------------+ 和一个控制EA,它以定时器方式工作(5秒)。 #define PREFIX_NAME "QWERTY_" enum ENUM_EA_STATE {WORK, READY_TO_INIT, ENABLE_INIT, ERROR_GLOBAL_VARIABLE}; //+------------------------------------------------------------------+ int OnInit() { EventSetTimer(5); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ void OnDeinit(const int reason) { EventKillTimer(); } //+------------------------------------------------------------------+ void OnTimer() { for(int i = GlobalVariablesTotal() - 1; i >= 0; i--) { string curr_gname = GlobalVariableName(i); if(StringFind(curr_gname, PREFIX_NAME) !=-1) { if(GlobalVariableGet(curr_gname) == (ENUM_EA_STATE)READY_TO_INIT) { if(GlobalVariableSet(curr_gname, ENUM_EA_STATE::ENABLE_INIT) > 0) { Print("Enable Init : ", curr_gname, ".....exit"); return; } } } } } //+------------------------------------------------------------------+ 检查了一下,一切正常,唯一的问题是,它没有与GlobalVariableSetOnCondition()一起工作,以在全局变量 中做记录。 Andrey Khatimlianskii 2020.09.28 20:13 #28589 fxsaber: 这是该任务的主要问题。 GlobalVariableSetOnCondition 是解决这个问题的全部条件。 只有当GlobalVariableSetOnCondition返回true时才允许操作。 初始化成功并释放资源后,将主变量返回到原始状态,另一个EA开始。 在DeInit中--无条件删除变量,这样就不会在完全没有EA的情况下跑到终端(如果之前的加载没有正确完成)。 fxsaber 2020.09.28 20:40 #28590 Alexey Viktorov: 伊戈尔-马卡努。 安德烈-哈蒂姆连斯基。 谢谢你的推荐。我将查看GlobalVariableSetOnCondition。 1...285228532854285528562857285828592860286128622863286428652866...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
总的来说,你对可能的实施方案有什么想法?
有许多可能的实现方式
但这一切都归结为EA之间的数据交换 任务。
最简单的方法是检查初始化的权限,并在OnTick()中执行初始化本身--这将允许避免恢复图表,然后在上面运行EA,并且在关闭前保存EA将有可能在OnDeinit()中完成。
谁来管理这个动物园并不 重要--要么是主要的EA,要么是一个服务机构。
在测试员日志中
它是什么意思?
在测试员日志中
它是什么意思?
这意味着,当收到m1 ohlc的下一个值时(或通过开盘价 测试时的bar状态),时间字段包含0
未定义函数意味着问题发生在预定义函数(OnTick、OnTimer等)之外,即在测试器的主循环中。
这意味着,当获得下一个m1 ohlc值(或通过开盘价 测试时的bar状态)时,时间字段包含0
未定义函数意味着问题发生在预定义函数(OnTick、OnTimer等)之外,即在测试器的主循环中。
一整天一切都在正常工作,然后就开始了。作为一个用户,我可以做什么?
这意味着,当获得下一个m1 ohlc值(或通过开盘价 测试时的bar状态)时,时间字段包含0
未定义函数意味着问题发生在预定义函数(OnTick、OnTimer等)之外,即在测试器的主循环中。
我不明白,是我的代码有错误还是终端有错误?抹掉了所有的历史记录--没有帮助。
已添加。
在我的代码中发现了一个函数,禁用它可以避免错误,但在另一个EA中,这个函数可以正常工作!怎么说呢?我可以把它放在我的私人信息中。
即使启用了这个有缺陷的函数,OnTick() 也是完全运行在第一条杠上,然后就出现了这个错误。
在不同的终端上,该错误被确认。
在蜱虫上运行 - 没有错误...
但奇怪的是在日志中。
关于刻度线,如果看一下工具,第一个刻度线正好是在10:00,而交易时段在这个时候仍然关闭。这是在视觉模式下,如果不打勾,第一个印刷品就在10点钟方向。
最简单的方法是在每个EA的开始时在OnTick()中检查初始化权限
这是该任务的主要问题。
尽量注意图表中的ID,并按资历运行。但这并不否定EA的互动。或者做一个文件,或者可能是一个SQLite数据库,里面有发射序列中的图表ID。
类似于,在第一次初始化时,如果列表中没有Chart_ID(),那么它就被输入到列表中。如果它由于终端关闭 而没有被关闭,那么它就会从列表中删除。通过这种方式,将有可能配置EA的互动。
这是问题的主要症结所在。
勾勒出我的看法......用这个代码创建了2个EA。
和一个控制EA,它以定时器方式工作(5秒)。
检查了一下,一切正常,唯一的问题是,它没有与GlobalVariableSetOnCondition()一起工作,以在全局变量 中做记录。
这是该任务的主要问题。
GlobalVariableSetOnCondition 是解决这个问题的全部条件。
只有当GlobalVariableSetOnCondition返回true时才允许操作。
初始化成功并释放资源后,将主变量返回到原始状态,另一个EA开始。
在DeInit中--无条件删除变量,这样就不会在完全没有EA的情况下跑到终端(如果之前的加载没有正确完成)。
谢谢你的推荐。我将查看GlobalVariableSetOnCondition。