¡¡¡AYUDA A QUIEN PUEDA!!!

 

Atrapado en un problema

for(int i = 0; i < OrdersTotal(); i++)
  {
    
    if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if(OrderSymbol() != Symbol()) continue;
    if(OrderMagicNumber() != MAGA) continue; 
    if(OrderType() == OP_BUY)DS=1;


El selector encuentra una orden si hay una posición abierta, pero si no hay posiciones abiertas, ¿cómo puedo encontrarla? el selector seguirá mostrando la última posición cerrada...
 
sllawa3:

Atrapado en un problema


El selector encuentra una orden si está abierta, pero si no hay posiciones abiertas, ¿cómo puedo encontrarla? El selector seguirá mostrando la última posición cerrada...
con la bandera
MODE_TRADES
el "Selector" no mostrará las posiciones cerradas, sólo las abiertas. Si hay cero posiciones abiertas el bucle ni siquiera comenzará porque la condición será falsa
 
Techno:
con la bandera
El "selector" no mostrará posiciones cerradas en absoluto, sólo posiciones abiertas. Si hay cero posiciones abiertas el bucle ni siquiera comenzará porque la condición será falsa

Sé que no se iniciará y guardará la última posición ya cerrada... eso es lo que he escrito... se pueden comprobar las posiciones abiertas mediante una orden Select pero ¿cómo debo comprobar la ausencia de posiciones?
 
sllawa3:

Exacto, no arranca y guarda la última pose ya cerrada... eso es lo que dice...
No entiendo lo que dice. Incluso ahora, ¿qué quiere decir con "guarda una posición cerrada"? Si se trata de calcular posiciones, como sólo puedo suponer, todas las variables (para almacenar el número de órdenes) deben ponerse a cero al principio de la función de inicio. Es decir, antes del bucle. Si permanecen vacías después del bucle, significa que no hay posiciones.
 
un trozo de código al principio del tema... si no hay posición entonces DS se queda =1 hasta que aparezca una nueva orden... a pesar de que la orden se ha cerrado... sólo la selección y no se iniciará... lo que no hay que entender...
 
Techno:
algo no está claramente escrito. Incluso ahora, ¿qué significa "mantener la posición cerrada"? Si estamos hablando de calcular posiciones, como sólo puedo suponer, entonces todas las variables (para almacenar el número de órdenes) deben ponerse a cero al comienzo de la función de inicio. Es decir, antes del bucle. Si permanecen vacías después del bucle, significa que no hay posiciones.

DS se escribe inicialmente como int = 0 antes del bucle
 
Techno:


por lo que no se reiniciará si el ciclo no se inicia, y no se iniciará si no hay poses
 
sllawa3:

DS se prescribe inicialmente como int = 0 antes del ciclo
Ah, bueno, si está prescrito y se asigna el 0, entonces no puede ser un problema, de lo contrario, ¿por qué sería igual a uno? ¿Se asigna el cero en la función de inicio o por encima?
 
por encima de
 
Puede que no haya ningún problema, pero lo hay... pruébalo tú mismo y compruébalo
 
¿Qué te parece esto?
DS=0;
for(int i = 0; i < OrdersTotal(); i++)
  {
    if (DS==0) DS=-1;
    if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if(OrderSymbol() != Symbol()) continue;
    if(OrderMagicNumber() != MAGA) continue; 
    if(OrderType() == OP_BUY)DS=1;
}
if (DS==0) // поз никаких нет
if (DS==-1) // позы есть, но нету БАЙ
if (DS==1) // есть БАЙ