如何检查一个订单是否被选中 - 页 19

 
原则上是的,但 "指针 "必须有自己的指针。 想想我对函数的建议,在我看来这是一个普遍的解决方案。当然,有一个关于这种代码的速度问题,但这似乎是第三个问题。
 
FAQ:
原则上是的,但 "指针 "将必须有自己的指针。想想我的建议与函数,在我看来这是一个普遍的解决方案。当然,有一个关于这种代码的速度问题,但这似乎是第三个问题。

谢谢你,我总是很高兴能有一个建设性的对话。

 
Ant_TL:

因此,如果程序中的函数A在循环中选择了某个顺序,然后从库中调用辅助函数B,即使B在这个过程中选择了另一个顺序,函数A中的顺序选择也不应该受到返回的影响。

如果你把函数的值放到一个变量中,那么是的。如果不是,那么这个函数是全局的,可以在第一次调用时改变。
 
Ant_TL:

谢谢你,总是很高兴能有一个建设性的对话。


不客气,只是不要轻易下结论。
 
Roger:
如果你把函数的值存储在一个变量中,是的。如果不是,该函数是全局的,在第一次调用时可能会发生变化。

我有点糊涂了。我指的是以下情况:我们从主程序模块的函数A()中调用库函数B(),例如,它只是选择列表中的第一个订单(假设有一个先验的订单)。

空白B(){

OrderSelect(0,SELECT_BY_POS)。

}

当这个函数被调用后,控制权从库中返回到主模块,如果我们调用OrderTicket()或其中任何其他期望订单被预选的函数,我们会得到完全相同的4105错误。但是,如果在主模块中调用函数 B之前,已经选择了其他订单,那么无论库中是否有新的 "选择",它都将继续被选择,因为按照我的理解,当前选择的订单只在模块中是唯一的。

但如果我们从主模块的函数A中调用同一个函数B,那么在调用B之前在函数A中选择的顺序将变为顺序0(也就是说,从函数B返回后当前选择的顺序将是顺序0,不管调用B之前当前选择的顺序是什么)。

因此,如果我们自己调用一个使用OrderSelect的函数,我们应该确保当我们从这个函数返回时,我们在调用这个函数之前已经选择的订单,这样我们就可以在以后使用它。如果你不确保这一点,会导致你的代码中出现难以发现的逻辑错误。

 
Ant_TL:

具体来说,"指针"--当前订单选择的状态--在模块内是全局性的,也就是说,这个指针对库来说是一样的,对程序模块来说是不同的。这意味着,如果程序中的函数A在循环中选择了一些顺序,然后调用库中的辅助函数B,那么即使在其运行过程中B选择了另一个顺序,在返回时也不应该改变函数A的顺序选择。但如果两个函数都在一个模块内,那么当从B函数返回时,我们需要记住并恢复当前的顺序选择,无论是在A函数本身调用B之前和之后,还是在B函数开始和结束工作时,都要记住,这样A函数工作的逻辑在这一点上就不会被违反。


你的观点很明确...

我认为这与流行的专家顾问的结构有相似之处,当票据号码被存储在变量中并在以后使用时(在下一个刻度上,比如如果一个副票被打开,等等)...

如果你想获得最后开出的订单的票据,只需使用这个订单的属性,OrderSelect(),一切都会好起来。这意味着在任何时候,专家顾问必须 "理解 "交易策略处于什么状态,并根据这一状态采取行动,无论电力和终端中其他工作的专家顾问发生什么。

Ant_TL:

在这个函数被调用后,当控制权从库中返回到主模块时,如果我们调用OrderTicket()函数或其中任何其他为预选订单而设计的函数,我们将得到完全相同的4105错误。但是,如果在主模块中调用函数B之前,已经选择了其他的订单,那么无论库中新的 "选择 "是什么,它都将保持被选择,因为当前选择的订单,据我所知,只在模块中是唯一的。

它已被证明是这样工作的,或者你认为它是这样工作的?


对我来说,模块和库是不分的......一旦编译,代码就会作为一个单一的结构工作......


凡是调用OrderSelect() 的地方,都会返回最后选择的订单的同一个OrderTicket()。

我认为它应该是这样工作的...

 
keekkenen:

它被证明是有效的,或者你认为它是有效的?

对我来说,不存在模块和库的划分......编译后的代码作为一个单一的结构工作......

无论在哪里调用OrderSelect(),最后选择的订单的同一个OrderTicket()将被返回。

我认为它应该是这样工作的...

经检查,在库中选择的顺序不是在主模块中返回时的选择顺序。因此,在逻辑上被选中的订单应该是主模块中最后被选中的订单,尽管我还没有检查。

我为自己解决了这个问题,在include库文件mqh中为库函数创建了类似于以下的包装器。

bool GetOrder(int a=0){
return(OrderSelect(_GetOrder(a), SELECT_BY_TICKET));
}

顺便说一下,你也不能向库函数传递默认参数。

这里_GetOrder(int a)是库函数本身,它找到并返回一些顺序。该函数 在库中被调用 时有一个明确的参数 "a",在封装函数中默认为0,另外封装函数中返回的票据在主程序模块中被重新选择,因为它在库函数中的选择不会到达 "收件人 "那里。

 

我也这么认为,无论从哪里调用这个函数,它都会给出一组特定顺序的选定参数,在下次调用这个函数之前,软件不会改变它们,无论从哪里调用。

否则你为什么要把这个函数包在一个额外的、完全不必要的函数中?

PYSYS。提示 - 创建一个静态整数变量,打开后传递订单的值,它不会改变,直到你想要它改变,并将准确地执行你计划的内容。

 
Ant_TL:

检查了返回主模块时,在库中选择的顺序不是所选的顺序。因此,从逻辑上讲,返回时选择的订单应该是主模块中最后选择的订单,尽管我还没有检查过这个。

这句话需要澄清:如果我们谈论的只是一个已编译的模块(库)(*.mg4-libraries from libraries folder),这句话是正确的。对于作为主编译文件(*.mgh-library)一部分的模块,这个说法是不正确的。
 
TarasBY:
这句话需要澄清:如果我们谈论的是仅被编译的模块(库)(*.mg4-libraries from libraries folder),这句话是真的。对于作为主编译文件(*.mgh-library)一部分的模块,这个说法是不正确的。

MQH不是一个单独的模块,而是主模块中的一个插入物,位于不同的文件中。所以我们当然是在谈论一个独立的.ex4库