[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 504

 
prom18:
El gráfico debe parecerse a una línea recta creciente.

¿Por qué crees que es así?
 
Vinin:

¿Por qué lo has decidido?
Pues cada barra tiene un volumen mayor que cero y necesito su total, que se recalcula cuando aparece una nueva barra.
 

a sergeev:

Ah, ahora entiendo lo que quieres decir. Porque recuerda exactamente con qué valor debe compararse el contador, y no lo cambia. Es decir, si OrdersTotal devolvió 2, entonces for lo recordará y trabajará con 2.

 
Solree:

a sergeev:

Ah, ahora entiendo lo que quieres decir. Porque recuerda exactamente con qué valor debe compararse el contador, y no lo cambia. Así, si OrdersTotal devolvió 2, entonces for lo recordará y trabajará con 2.


No. Eso no es lo que estoy diciendo.

La condición de parada del bucle (en tu caso, OrdersTotal()) se calcula ¡en cada iteración!

así que en la primera iteración =2
en la segunda iteración =1

¿Eres un programador o qué? No puedes entender las cosas elementales.

 

a sergeev:

Me has abierto los ojos. Incluso abrí a propósito el IDE para C++ para comprobarlo. ¡Y resulta que tienes doblemente razón! Gracias. :) Pero... La orden sigue sin ser seleccionada, aunque lo haga de esta manera:

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:
Pues cada barra tiene un volumen mayor que cero y necesito que su suma se recalcule cuando aparezca una nueva barra.

El volumen total puede tanto subir como bajar.
 
Vinin:

El volumen total puede tanto subir como bajar.
No lo entiendo. El volumen es el número de ticks dentro de una barra. El volumen del primero es de 30, el segundo de 20, el tercero de 10. La suma sería de 60. ¿O no?
 
Solree:

a sergeev:

Me has abierto los ojos. Incluso abrí a propósito el IDE para C++ para comprobarlo. ¡Y resulta que tienes doblemente razón! Gracias. :) Pero... La orden sigue sin ser seleccionada, aunque lo haga de esta manera:


Borrar siempre las órdenes mediante una cuenta atrás

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:

Pero... la orden sigue sin estar seleccionada, aunque lo haga:

y no lo hará.

se hace OrderSelect por número de posición.

en la primera iteración, se selecciona el primer orden, posición de orden a=0

después de cerrar esta orden, el número de órdenes pasa a ser OrdersTotal=1.
Esto significa que el antiguo segundo orden de la posición 1 se convierte en la posición 0.

Pero en la segunda iteración de su orden, a = 1, ¡no 0! Así que el OrderSelect en la ahora inexistente position=1 devolverá un error.

-------

Piensa un momento antes de escribir tu próximo post. ¿Qué dos opciones puede sugerir para evitar esta dinámica?

 
prom18:
No lo entiendo. El volumen es el número de ticks dentro de una barra. El volumen del primero es de 30, el segundo de 20, el tercero de 10. La suma será de 60. ¿O no?


Tomar una serie temporal con volúmenes y recalcular con plumas

Por ejemplo, existen los siguientes volúmenes

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

Aquí están las sumas de tres

50, 48, 44, 55

Hay una subida, hay una bajada.

Es como en la vida.