循环和关闭或删除订单 - 页 2

 

如果OrderSelect未能选择订单,会发生什么?
OrderMagicNumber==MagicNo的条件不会为真。所以不需要检查 OrderSelect的结果,如果无效就继续。

如果你想检查OrderSelect以减少循环变量,那会更好。例子。

for(PositionIndex = 0; PositionIndex < OrdersTotal() ; PositionIndex ++)  
   {
   if( ! OrderSelect(PositionIndex, SELECT_BY_POS, MODE_TRADES) ) { PositionIndex--; continue; }
 
  1. 如果orderSelect失败了,你可能会得到最后选择的订单 的神奇数字或留在内存中的东西,这可能会匹配。总是检查。
  2. 你必须总是倒数。假设当你正在处理位置3时,位置0关闭了。你想处理的下一个订单是位置4,但当你循环并递增位置Index到4时,将是位置3。 你现在已经错过了一个。通过倒数,你可能会第二次处理同一个订单,但你不会错过任何一个。
 
WHRoeder:
  1. 如果orderSelect失败了,你可能会得到最后选择的订单的神奇数字或留在内存中的东西,这可能会匹配。一定要检查。
  2. 你必须总是倒数。假设当你在3号位置工作时,0号位置关闭。你想处理的下一个订单是位置4,但当你循环并递增位置Index到4时,将在位置3。 你现在已经错过了一个。通过倒数,你可能会第二次处理同一个订单,但你不会错过任何一个。

1- 谁告诉你的?你说的是哪个内存?


2- 我没有提到向下或向上计数,提供的代码本身不是向下计数。

 
  1. OrderMagicNumber()和其他函数总是会返回一些东西。如果OrderSelect()失败了,你会得到随机的 垃圾,剩下的东西,也许是上一个成功的选择,也许是上一个关闭的订单的值,也许是寄存器中的任何东西。有没有试过在一个被删除的对象上解除指针的定义?内存,就是电路板上的黑色小芯片。试试这个
    int start(){    Print(Whatever()); }
    double Whatever(){
       for(i=0; i<10; i++) double tmp=Close[i];
       // no value returned
    }
    并发布一些输出。
  2. 我知道 "提供的代码本身并不是在倒数"。这就是问题所在。始终要倒数!你的减法不会奏效,而且是一个错误。你的减法不会起作用,而且是一个潜在的无限循环。
    if( ! OrderSelect(PositionIndex, SELECT_BY_POS, MODE_TRADES) ) { PositionIndex--; continue; }

 

是否有具体的原因,你的编码是。

if( ! OrderSelect(PositionIndex, SELECT_BY_POS, MODE_TRADES) ) continue;

而不是(?)

if( OrderSelect(PositionIndex, SELECT_BY_POS, MODE_TRADES) )
{
  // statements if true
}

我知道这在一些编码标准中被认为是一个禁忌。它是否能带来更好的性能,还是只是偏好?

 
burgie:

是否有具体的原因,你的编码是。

而不是(?)

我知道这在一些编码标准中被认为是一个禁忌。它是否能带来更好的性能,还是只是偏好?

我不知道该怎么做才符合逻辑,为什么OrderSelect()会失败?
 
burgie:

是否有具体的原因,你的编码是。

而不是(?)

我知道这在一些编码标准中被认为是一个禁忌。它是否能带来更好的性能,还是只是偏好?


在一个循环里面,这完全是一样的,选择你喜欢的东西。
 
burgie:

是否有具体的原因,你的编码是。

而不是(?)

我知道这在一些编码标准中被认为是一个禁忌。它是否能带来更好的性能,还是只是偏好?

 

如果(orderselect(......))执行这个//------不回头。

如果(!orderselect(.......))继续 //返回并检查

 
MirTD:

如果(orderselect(......))执行这个//------不回头。

如果(!orderselect(.......))继续 //返回并检查

我已经回答了被问到的关于我的编码的问题 . .