Errores, fallos, preguntas - página 1914

 
nys2000:

¿Podría ser más específico?


empezar de cero

 
nys2000:

¿Podría ser más específico?

for(i=1; i <=OrdersTotal(); i++) Los pedidos de esta lista se numeran de cero a OrdersTotal()-1, ambos inclusive (que me disculpe Artem Trishkin, acaba de acortar la espera de nys2000).
 
Aleksei Beliakov:

empezar de cero


Son dos opciones equivalentes. Si para (i=1...) entonces OrderSelect(i-1,...), si para (i=0,...) - OrderSelect(i,...)

 
Vladimir:
for(i=1; i <=OrdersTotal(); i++) Los pedidos de esta lista están numerados desde cero hasta OrdersTotal()-1 inclusive (que me disculpe Artem Trishkin, acaba de acortar la espera de nys2000).

Gracias, pero la numeración de los pedidos de 0 a OrdersTotal()-1 se tiene en cuenta en OrderSelect(i-1,...)

 
int OrdersTotalT(int _type)
  {
   int _total=0;
   for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
     {

      bool select=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol() && OrderType()==_type)
        {
           _total++;
        }
     }
   return(_total);
  }
 
nys2000:

Gracias, pero la numeración de los pedidos de 0 a OrdersTotal()-1 se contabiliza en OrderSelect(i-1,...)


Hacer el orden inverso de la búsqueda ...

 
nys2000:

Se trata de un código sencillo como éste:

En el momento en que se inicia la función, se abren dos posiciones de compra. La función imprime la presencia de dos órdenes dos veces: Pasaje 1, Pasaje 2.

Eliminamos los comentarios y volvemos a ejecutar la función. Anota enérgicamente una orden de compra, declara "Paso nº 1" y abandona el bucle. El mensaje "Pasaje #2" no aparece.

¿Cuál es la magia?


1. i=1, calculamos las órdenes ... ¿ha comprobado la condición 1<= 2? sí. Seleccionado y cerrado el pedido.

2. i++ (i=2)

3. OrdersTotal()=1 <---------- al cerrar la orden dentro del bucle realmente cambió la condición para salir del bucle

4. 2<=1 ? no <----------- aquí su "magia" y en consecuencia la salida del bucle

void CloseAllOrders()
{
bool Ans;
int total=OrdersTotal();
   for(int i=1; i <=total; i++)     
      {      
      Print("Проход № ", i);      
      if (OrderSelect(i-1,SELECT_BY_POS)==true) 
         {  
         if (OrderSymbol() != Symbol())
            continue;
         if (OrderType()==0)
             {
//            Ans=OrderClose(OrderTicket(),OrderLots(), NormalizeDouble(Bid,Digits),25);
             }           
         if (OrderType()==1)
             {
//            Ans=OrderClose(OrderTicket(),OrderLots(), NormalizeDouble(Ask,Digits),25);
             } 
         }
      }      
         
return;
   
}
 

¿Por qué hay un identificador de gráficoCHART_WINDOW_HANDLE adicional, para qué sirve?

 
Konstantin:

¿Por qué hay un identificador de gráficoCHART_WINDOW_HANDLE adicional, para qué sirve?

Asumiré que el ID del gráfico es para el entorno mql y el HWND es para winapi.
 

Error durante la ejecución

int f( int t )
{
union U {
        U( int t ) : t1( t ) {}
        int t2;
        int t1;
};
	U u( t );
        return u.t2;
}
void OnStart()
{
        Print( f( 3 ));
}

Resultado: número aleatorio (ciertamente no 3)