[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 240

 
a1 = OrdersTotal();
for (i = 0; i < a1; i++)
{
OrderSelect(i,SELECT_BY_POS);
OrderDelete(OrderTicket() );

}

这里有一个简单的脚本,这样的脚本应该删除所有的挂单,但它正好删除了一半的订单 ...???

[删除]  
        
FAQ 04.03.2011 12:56 

Подскажите, как найти цену последнего фрактала?


sergeev: Для этого можно воспользоваться индикатором iFractals. Он возвращает значение 0, если на баре нет фрактала и значение цены фрактала если он есть. Фракталы делятся на верхние и нижние. Если вам надо получить верхние, то в функцию iFractals передается MODE_UPPER, а для нижних - MODE_LOWER. Поэтому для поиска фрактала надо пройти в цикле по барам и первое не 0 значение и будет искомым фракталом.

пример:

double frac;
for (int i=3; i<Bars; i++)
{
   frac=iFractals(Symbol(), Period(), MODE_UPPER, i); if (frac>0) break;
   frac=iFractals(Symbol(), Period(), MODE_LOWER, i); if (frac>0) break;
}
if (frac>0) Print("Цена последнего фрактала: ", frac);


пример организации отдельной функции:

//---------------------------------------------------------------   GetLastFrac
double GetLastFrac(string smb, int tf, int iB)
{
   int n=iBars(smb, tf);  double frac;
   for (int i=iB; i<n; i++)
   {
      frac=iFractals(smb, tf, MODE_UPPER, i); if (frac>0) return(frac);
      frac=iFractals(smb, tf, MODE_LOWER, i); if (frac>0) return(frac);
   }
   return(0);
}
.....
Print("Последний фрактал: ", GetLastFrac("EURUSD", 60, 3));
它在常见问题中,我前几次翻了一下,没有注意到。
 
Neo333:
a1 = OrdersTotal();
for (i = 0;i < a1; i++)
{
OrderSelect(i,SELECT_BY_POS)。
OrderDelete(OrderTicket();

}

这个简单的脚本应该删除所有的挂单,但它正好删除了一半的挂单...???

比方说,有10个订单。

这里你已经删除了一半(零到五)。

现在你想选择第六个......而现在只剩下五个了。有一个错误,没有什么可以删除。其他人也是如此。

 
Neo333:
a1 = OrdersTotal();
for (i = 0; i < a1; i++)
{
OrderSelect(i,SELECT_BY_POS)。
OrderDelete(OrderTicket();

}

这个简单的脚本应该删除所有的挂单,但它正好删除了一半的订单 ...???

改变订单搜索的方向。

for (i=a1-1; i>=0; i--) {....}

 
artmedia70:

改变订单枚举的方向。

for (i=a1-1; i>=0; i--) {....}

作品...但这是什么逻辑 - i++或i--有什么区别?
[删除]  
Zhunko:

1.你检查过吗?

报告:有帮助,但似乎有小毛病。

第一个终端。删除了所有图表和符号,增加了7个美元符号,增加了图表。都有重装。

拉长了股票代码,占到了屏幕的3/4。填满了前6个,第7个达到了5个方块。

下一次重启后,并不是所有的单元格都被填满,分布几乎是随机的--列表中的符号越低,得到的单元格就越少。

第二个终端。上面有7个日元对。去掉了多余的字符,重新开始--它们填充得更深,但填充的深度原来是随机分布的。

我倾向于这是一个错误,因为缓存太小了--它只是不够每个人使用,而分配是随机的,或者是 "先来后到"。

在任何情况下,对于一种货币来说,这种方法是有效的。摘要:对事实的描述 :) 谢谢。

 
Neo333:
它的作用是...但是,逻辑是什么呢--i++或i--有什么区别?

你已经被告知原因是什么。这不是i++或i--的问题,而是你从列表的哪一端开始删除订单--列表的开头(如你所做的)或列表的结尾(如你在这个案例中需要做的)。

要了解当订单被删除时会发生什么,你需要知道并理解订单是如何存储在数组中的。

当你先删除第一个订单时(它的索引为i=0),所有订单的索引在数组中被移位--第一个订单变成空,第二个订单变成第一,第三个--第二,以此类推。这就是为什么所有的订单都没有被完全删除--事实上,当i变成6时,第六个订单被转移到订单数组中的第五个位置,并且该订单根本没有被索引6选中。

当你从列表的末尾删除订单时,转变不会发生--第一个订单在列表中的位置为零,它将继续拥有这个位置。第10个订单的位置是9,它被删除了,然后第9个订单,它在列表中的位置是8,被删除了,以此类推,直到订单阵列中第一个位置是0的订单。

 
Neo333:
作品 ....但逻辑是什么呢?"i++"或 "i-"有什么区别?
你已经被用户回答过了
152
对这个问题的看法
 
nadya:
你已经被用户回答过了
152
对这个问题的看法
直觉告诉我,你应该把它嚼碎了,并给出一个更详细的答案......:)
[删除]  
Zhunko:
...自主地打开时间表。
其余的图表是 "滴答 "的。不是一个选项。