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

 
artmedia70:
我不觉得有什么问题。这有什么大不了的...你需要在一个主函数A()中选择一个订单,并在另一个由主函数A()调用的函数B()中处理在函数A()中选择的订单。而我们应该在函数B()中确定知道订单是否仍然被选中...所以把在函数A()中选择的订单的票据传给函数B()。在函数B()中,我们可以检查从哪个列表中选择订单,然后决定去哪里和返回函数A()的内容...

你完全误解了我。出于某种原因,一半的人也是如此。我不需要在函数B()中处理那个订单,它是在函数A()中选择的。函数B()对其他 订单起作用,不管是哪个订单,它与函数A()无关;函数B()有自己的逻辑。它可以计算订单的数量,他们的总利润,查看他们的评论,TP SL,等等。我们的任务是从函数B()返回到函数A(),这样无论函数B()对订单做了什么,在调用函数B()时,函数A()的逻辑不会被违反,因为在调用函数 B()之前,函数A()选择的订单不再被选择,选择的订单是由函数B()处理的另一个随机订单,很可能也在循环中搜索订单。

artmedia70:
现在让我们想象一下,重启终端后,last_select变量会发生什么变化(灯被讨厌的家伙关掉了)

重新启动后,last_select变量将根据需要被初始化为0。

 

有10页的胡说八道,胡说八道,胡说八道。下面是规定该函数与另一个(非高亮)订单一起工作的代码。

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Получаем актуальную информацию об ордере                                  |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool fGet_OrderDetails (int fi_Ticket)              // OrderTicket()
{
    int lia_cmd[] = {1,-1,-1,1,1,-1};
//----
    //---- На текущий момент может быть выделенным другой ордер
    int li_LastTicket = OrderTicket();
    if (li_LastTicket != fi_Ticket)
    {   
        if (!OrderSelect (fi_Ticket, SELECT_BY_TICKET))
        {fSet_Comment (fi_Ticket, fi_Ticket, 100, "fGet_OrderDetails()", True, GetLastError()); return (false);}
    }
    if (bi_curTicket != fi_Ticket)
    {
        bi_Type = OrderType();
        bd_OpenPrice = NDD (OrderOpenPrice());
        bd_Lots = OrderLots();
        bi_cmd = lia_cmd[bi_Type];
        bi_curTicket = fi_Ticket;
    }
    bd_curSL = NDD (OrderStopLoss());
    bd_curTP = NDD (OrderTakeProfit());
    //---- Выделяем первоначальный ордер
    if (li_LastTicket != fi_Ticket) {if (li_LastTicket > 0) OrderSelect (li_LastTicket, SELECT_BY_TICKET);}
//----
    return (true);
}
这只是一个例子。一个明白的人就会抓住这一点。
 
TarasBY:

有10页的胡说八道,胡说八道,胡说八道。下面是规定该函数与另一个(未分配)订单一起工作的代码。

这只是一个例子。一个明白的人就会抓住这一点。

这不是问题的关键。在EA中,有局部或全局的变量,也有终端变量。就程序而言,这些变量是交互式的,它们的值可以在任何时候以一种绝对无法解释的方式为EA所改变。顺序选择 符号正是这样一个变量。如果Metaquotes允许访问图形对象的 "选择 "属性,也会是这样。这将不可避免地导致以下结论:只要我们需要知道所选订单的数量,我们就应该选择一个订单,或者记住所选订单,当且仅当专家顾问的逻辑需要它时。所以它是这样的...
 
tara:
这不是问题的关键。在EA中,有局部或全局的变量,也有终端的变量。从程序的角度来看,这些变量是交互式的,它们的值随时都会以一种莫名其妙的方式为EA所改变。顺序选择符号正是这样一个变量。如果Metaquotes允许访问图形对象的 "选择 "属性,也会是这样。这将不可避免地导致以下结论:只要我们需要知道所选订单的数量,我们就应该选择一个订单,或者记住所选订单,当且仅当专家顾问的逻辑需要它时。所以它是这样的...

我完全同意你的观点。

  • 首先,我们必须考虑到我们所拥有的(MQL4能力)。
  • 其次,我自己使用的结构是在一个地方处理所有的交易订单 与未结订单:我对订单进行列举,并对每个订单(按顺序)进行所有必要的操作。

P.S. 我在代码中做了上述检查,"以备不时之需"...:)

 

:)

节日快乐!对我来说--20年,不是我生命中最糟糕的时期。

 
TarasBY:

有10页的胡说八道,胡说八道,胡说八道。下面是规定该函数以不同的(非高亮)顺序工作的代码。

这只是一个例子。一个明白的人就会抓住这一点。

是的。就在那里。

int li_LastTicket = OrderTicket()。

如果之前没有调用OrderSelect,你的代码将产生一个4105的执行错误。只要在每个tick的最后放一个GetLastError检查,就可以检测到这个错误。

 
tara:

:)

节日快乐!对我来说--20年,不是我生命中最糟糕的时期。

祝贺你!你为《信仰与真理》服务了20年了吗?
 
borilunad:
祝贺你!你为信仰和真理服务了20年吗?
这就对了。
 
tara:
她,我亲爱的。
那么,过度列名,在我的时代,他们曾经叫我,或者甚至现在,一块...?:)
 
borilunad:
因此,在我的时代,他们习惯于称我为过度列名,或者甚至现在,是一块...?:)
如果我这么说,你会感觉好些吗?)