学习逻辑 - 页 12

 

维克多,我认为这里的切换更好--更快、更清晰。

bool IsOrderType(int type)
{
   switch (type)
   {
      case OP_BUY:
      case OP_SELL:
      case OP_BUYLIMIT:
      case OP_SELLLIMIT:
      case OP_BUYSTOP:
      case OP_SELLSTOP:
         return (true);
   }
   return (false);
}


哦,顺便说一下 -- 合理优化测试器中的工作 -- 我最近一直在使用它。

int FindLastOpenTime(int tip, int imagic) 
{
   int Res=-1;
   int lOrderOpenTime=-1;
   
   for (int i = OrdersTotal() - 1; i >= 0; i--) 
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))   continue;
      if (OrderSymbol() != Symbol())                     continue;
      if (OrderMagicNumber() != imagic)                  continue;
      if (!(tip==-1 || isOrderType(tip)))                continue;

      if (IsTesting()) return (OrderTicket());  // тут

      if (lOrderOpenTime==-1) { 
         lOrderOpenTime=OrderOpenTime(); 
         Res=OrderTicket();
      } else if (lOrderOpenTime<OrderOpenTime()) {
         lOrderOpenTime=OrderOpenTime(); 
         Res=OrderTicket();
      }
   }
   return (Res);
}

顺便说一下,该函数被称为FindLastOpenTime,并返回一张票。

也许这样做更好?

datetime FindLastOpenTime(int tip, int imagic, int& ticket) 
{
   //...
}
 
TheXpert:

维克多,我认为这里的切换更好--更快、更清晰。


这真的比较清楚。
 

TheXpert:

顺便说一下,该函数被称为FindLastOpenTime,...

这个想法是,
if (lOrderOpenTime<OrderOpenTime()) {
         lOrderOpenTime=OrderOpenTime(); 
         Res=OrderTicket();
      }
它可能在-1时就开始工作,我不太清楚为什么它需要一个外部的if...else。返回,我认为,真正更好的是lOrderOpenTime,然后返回-1将允许捕捉错误。
 
是的,我没有。
 

使用这种东西是否符合逻辑?

int Z[];

int Fn()
{
....
  int Z = 0;

  Z++;
....

return(Z);
}
start()
{
   .......
   Z[f]=3;
   ......
}
 
不,里面的逻辑z(小)。一般来说,最好不要乱用这些东西。
 

总是在循环操作数中杀死这种构造的逻辑。

if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != imagic) continue;
if (!(tip==-1 || isOrderType(tip))) continue;

见帮助。

continue 语句将控制权转移到最近的外部whilefor 语句的开头,导致下一个迭代的开始。这个运算符与break 相反。

这一点也不清楚,如果一个订单没有通过条件,那么该怎么办? 退出循环? 如果继续 操作符与中断 操作符直接相反......

对我来说,标准的逻辑更清晰,更容易理解。

int FindLastOpenTime(int type, int imagic){int time = 0;
  for(int i = OrdersTotal() -1 ;i>=0;i--){
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
        if(OrderSymbol()==Symbol()){
           if(OrderType()==type){
              if(OrderMagicNumber()==magic){
                 if(OrderOpenTime()>time){
                    time=OrderOpenTime();
                 }
              }
           }
        }
     }
  }
  return(time);
}  
 
TheXpert:

2号穿刺。逻辑(logic)和简洁没有什么关联。

一个典型的例子就在MQL中,顺便说一下,许多人对使用MQL并不忌讳。

这不是逻辑 -- -- 这是对逻辑的谋杀。此外,它还是隐性错误的潜在滋生地。


不确定穿刺的位置?而为什么是第二个呢?如果是第二个,第一个在哪里?
 
Integer:
对于那些没有办公室或拉链的人。

Dima为那些没有metaeditor.exe的人添加一些东西 :-)

 
Vinin:


维克多,再次祝贺你!