int OrdersTicket(filters, int function_id, boolnew = false){staticint tickets[functions count];int ticket = -1;
if(!new){
if(OrderSelect(tickets[function_id],SELECT_BY_TICKET)){return(OrderTicket());}
}
// Выбор и возврат тикета ордера с нужными фильтрамиreturn(ticket);
}
你对如何写代码的看法并不重要,最主要的是代码能正确工作,而不是拿着你的代码问你哪里出错了......再说一遍,如果票据正确,就不会有4105错误。
你所说的是不真实的,因为错误4105发生在调用 不需要传递票据的函数时。
例如,当OrderTicket()被调用时,如果OrderSelect()在OrderTicket()被调用之前没有被调用--这就是本主题讨论的情况。
不,我的意思是,无论向外的转换(输出)如何,都要保证选择我对每个函数的顺序。
即为你的每个功能保存最后选择的订单
不,我的意思是,无论向外的转换(输出)如何,都要保证选择我对每个函数的顺序。
即为每个函数保存最后选择的顺序,作为它自己的
如果有几个嵌套的函数控制最后选择的 订单--即一个函数调用另一个,另一个调用第三个,那么每个函数将保持它被调用时的订单选择,并在返回时将选择返回到该状态,如果我对问题的理解正确的话。但这是一个非常棘手的解决方案。通常情况下,超过一级的嵌套是不可能的。最主要的是控制每一个这样的函数的环境,这样调用这个函数就不会因为重设之前的订单选择而导致逻辑错误。只有那些可以从订单检索的主循环中调用的服务函数才需要这样做,并且仍然要检索订单本身,以便计算任何东西。
顺便说一下,如果服务功能在库中 - 那么就不需要保存 "指针"(订单选择),是吗?由于主EA和库有各自的 "指针",即在库中选择的订单不会在EA中选择,反之亦然。
如果函数A和B都不在同一个模块内,这似乎是一个完美的问题解决方案
思想:有一个订单选择 功能(每个人都有一个),外面有必要的过滤器(无论如何,在每个功能中,你必须在某个地方选择这个订单(很可能在开始时))。
这肯定会返回之前挑选的订单的票据(在这个函数中),否则就用我们指定的过滤器做一个新的搜索。
在这种情况下,ticket = OrdersTicket(); 结构将完美地工作。
你所说的是不真实的,因为错误4105发生在调用不需要传递票据的函数时。
例如,当OrderTicket()被调用时,如果OrderSelect()在OrderTicket()被调用前没有被调用--这就是本主题讨论的情况。
你从EA设置中获得票据,外部文件--从哪里来?
如果是这样,那么是的,会有一个错误,因为调用OrderSelect()的 事实在随后的刻度上仍然是开始的(至少在测试者中),...
顺便说一下,如果服务功能在库中 - 那么就不需要保存 "指针"(订单选择),是吗?由于主EA和库有各自的 "指针",即在库中选择的订单不会在EA中选择,反之亦然。
如果函数A和B都不在同一个模块内,这似乎是一个完美的问题解决方案
这完全取决于外部变量的全球化程度。
顺便说一下,如果服务功能在库中 - 那么就不需要保存 "指针"(订单选择),是吗?由于主EA和库有各自的 "指针",即在库中选择的订单不会在EA中选择,反之亦然。
如果函数A和B都不在同一个模块内,这似乎是一个完美的问题解决方案
我就不说了。其他方面无法帮助你。绕来绕去没有我!!!。
这完全取决于外部变量的全局性如何。
具体来说,"指针"--当前订单选择 的状态--在模块内是全局性的,也就是说,这个指针对库来说是一样的,对程序模块来说是不同的。这意味着,如果程序中的函数A在循环中选择了一些顺序,然后调用库中的辅助函数B,那么即使在其运行过程中B选择了另一个顺序,在返回时也不应该改变函数A的顺序选择。但如果这两个函数都位于一个模块内,当从B返回时,当前的顺序选择应该在A本身调用B之前和之后被存储和恢复,或者在B开始和完成工作时被存储和恢复,这样A的工作逻辑在此时就不会被违反。