[存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. - 页 504

 
prom18:
图形应该看起来像一条增加的直线。

你为什么这样认为呢?
 
Vinin:

你为什么决定这样做?
好吧,每个柱子都有一个大于零的体积,我需要它们的总量,当一个新的柱子 出现时,会重新计算。
 

Sergeev

啊,现在我明白你的意思了。因为准确地记住了计数器应该与什么值进行比较,并且不改变它。也就是说,如果OrdersTotal 返回2,那么for将记住这一点,并以2来工作。

 
Solree:

Sergeev

啊,现在我明白你的意思了。因为准确地记住了计数器应该与什么值进行比较,并且不改变它。因此,如果OrdersTotal返回2,那么for将记住这一点,并将与2一起工作。


不,我不是这么说的。

循环停止条件(在你的例子中,OrdersTotal())是在每个迭代 中计算的!!!!。

所以第一次迭代时=2
第二次迭代时=1

你是一个程序员还是什么? 你不能理解基本的东西。

 

Sergeev

你让我大开眼界。我甚至特意打开了C++的IDE来检查它。而事实证明,你是加倍正确的!谢谢你!:)但是...即使你这样做,订单仍然没有被选中。

int someA = OrdersTotal();
for (int a = 0; a < someA; a++)
    if (OrderSelect(a, SELECT_BY_POS, MODE_TRADES))
        if (OrderComment() == "Aelit" && OrderType() == OP_SELL)
            OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), 0);
 
prom18:
好吧,每个柱子的成交量都大于零,我需要在新柱子出现时重新计算它们的总和。

总量既可以上升也可以下降。
 
Vinin:

总量既可以上升也可以下降。
我不明白。成交量是指一个条形图中的点数。第一只的体积是30,第二只是20,第三只是10。总数将是60。或者说不是吗?
 
Solree:

Sergeev

你让我大开眼界。我甚至特意打开了C++的IDE来检查它。而事实证明,你是加倍正确的!谢谢你!:)但是...即使你这样做,订单仍然没有被选中。


始终通过倒计时删除订单

int someA = OrdersTotal();
for (int a = someA-1;a>=0 a--)
    if (OrderSelect(a, SELECT_BY_POS))
        if (OrderComment() == "Aelit" && OrderType() == OP_SELL)
            OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);
 
Solree:

但是...即使你让它变成这样,该订单仍然没有被选中。

而且它不会!

你按位置号做OrderSelect。

在第一次迭代中,你选择第一顺序,顺序位置a=0

在这个订单关闭后,订单的数量变成OrdersTotal=1。
这意味着,以前的二阶从位置1 变成了位置0

但是在你的命令的第二次迭代 中,a=1,而不是0!这就是为什么你的命令被认为是不可能的。所以 现在不存在的position=1上的OrderSelect 将返回一个错误。

-------

现在,在写下一篇文章之前,先想一想。你能建议哪两个方案来避免这种动态。

 
prom18:
我不明白。成交量是指一个条形图中的点数。第一个的体积是30,第二个是20,第三个是10。总数将是60。或者是吗?


一个 有体积的时间序列,用笔重新计算

例如,有以下几卷

10, 15, 25, 8, 11, 24, 30

以下是三者的总和

50, 48, 44, 55

有升就有降,有降就有升。

这就像在生活中一样。