Filtrar operaciones dentro del loop por símbolo - página 2

 
David Diez:

Hola de nuevo, pego el código tal y como lo tengo ahora y el error que me da:

Aquí una captura de pantalla donde se puede ver que no realiza la suma correctamente:


Si, mira lo que pasa, estas haciendo una Alert cada vez que sumas una posición mas a tu contador.

Eso esta mal, tienes que sumarlo todo y al final de todo ya fuera del ciclo de contar posiciones hacer el Alert con la suma ya hecha del total. Solo 1 Alert por simbolo.

void OnStart(){
   for(int s=0;s<SymbolsTotal(false);s++){ // Define a counter loop for all broker symbols.
      int Long=0,Short=0;
      string CSymbol=SymbolName(s,false);  // Declare current working symbol from the loop.
      for(int i=0;i<PositionsTotal();i++){ // Here it goes the main loop for the advisor tool.
         ulong Ticket=PositionGetTicket(i);      
         if(PositionSelectByTicket(Ticket)){
            string PS=PositionGetString(POSITION_SYMBOL);       // Declare position symbol value.
            if(PositionGetString(POSITION_SYMBOL)==CSymbol){    // Check if position symbol is current working symbol.
               int SD=(int)SymbolInfoInteger(PS,SYMBOL_DIGITS); // Declare symbol digits to get its value (working).
               if(PositionGetInteger(POSITION_TYPE)==ORDER_TYPE_BUY){
                  Long++; //Aqui solo suma, no hagas Alert // Count long orders from each symbol to print its value.
                  }
               if(PositionGetInteger(POSITION_TYPE)==ORDER_TYPE_SELL){
                  Short++; //Aqui solo suma, no hagas Alert // Count short orders from each symbol to print its value.
                  }
               }
            }
         }

	if(Long>0){Alert(PS," buy orders are ",Long);}		
	if(Short>0){Alert(PS," sell orders are ",Short++);}

      }
   }
 
Imanol Salazar Garcia:

Si, mira lo que pasa, estas haciendo una Alert cada vez que sumas una posición mas a tu contador.

Eso esta mal, tienes que sumarlo todo y al final de todo ya fuera del ciclo de contar posiciones hacer el Alert con la suma ya hecha del total. Solo 1 Alert por simbolo.

Esto cada vez va a peor, Imanol:


 
Al final papel y boli...no falla.
 

Era cuestion de cambiar de posicion alguna linea y ya esta

void OnStart()
  {
   for(int s=0;s<SymbolsTotal(false);s++)
     { // Define a counter loop for all broker symbols.     
       string PS="";
      int Long=0,Short=0;
      string CSymbol=SymbolName(s,false);  // Declare current working symbol from the loop.
      for(int i=0;i<PositionsTotal();i++)
        { // Here it goes the main loop for the advisor tool.
         ulong Ticket=PositionGetTicket(i);
         if(PositionSelectByTicket(Ticket))
           {
                   // Declare position symbol value.
            if(PositionGetString(POSITION_SYMBOL)==CSymbol)
              {    // Check if position symbol is current working symbol.
              PS=PositionGetString(POSITION_SYMBOL); 
               int SD=(int)SymbolInfoInteger(PS,SYMBOL_DIGITS); // Declare symbol digits to get its value (working).
               if(PositionGetInteger(POSITION_TYPE)==ORDER_TYPE_BUY)
                 {
                  Long++; //Aqui solo suma, no hagas Alert // Count long orders from each symbol to print its value.
                 }
               if(PositionGetInteger(POSITION_TYPE)==ORDER_TYPE_SELL)
                 {
                  Short++; //Aqui solo suma, no hagas Alert // Count short orders from each symbol to print its value.
                 }
              }
           }
        }

      if(Long>0){Alert(PS," buy orders are ",Long);}
      if(Short>0){Alert(PS," sell orders are ",Short++);}

     }
  }



Pero mas alla de tu necesidad, y la intencion de colaborar de algunas personas en este foro, me preocupa lo siguiente:



No estaras pidiendo ayuda para algun trabajo que ofreciste, ¿verdad que no?
Espero con animo que no sea asi, pero tus carpetas dejan mucho que pensar.

Saludos!

 
Miguel Antonio Rojas Martinez:

Era cuestion de cambiar de posicion alguna linea y ya esta



Pero mas alla de tu necesidad, y la intencion de colaborar de algunas personas en este foro, me preocupa lo siguiente:



No estaras pidiendo ayuda para algun trabajo que ofreciste, ¿verdad que no?
Espero con animo que no sea asi, pero tus carpetas dejan mucho que pensar.

Saludos!

No, no es así, no te preocupes. Es una herramienta que estoy haciendo para poder irme a dormir la siesta tranquilo.
 
David Diez:
No, no es así, no te preocupes. Es una herramienta que estoy haciendo para poder irme a dormir la siesta tranquilo.

Y no es que sea ilegal o malo o que sea un delito, no es nada de eso, (de hecho no debe importar pedir ayuda para hacer algo asi)

Yo lo mencione porque estaria mal que, sin la experiencia suficiente como para poder resolver un problema tan pequeño, estes queriendo ofrecer en los servicios freelancer.

ya mencionaste que no es asi, y te creo, pero queria aclarar mi punto de vista

Saludos!

 

Jejeje cierto ahora mirando mi ultima corrección veo que hay un error que impediria incluso el compilado, es lo que tiene improvisar asi.

Pero mi intención era expresar un concepto determinado que creo que quedaba claro con el mensaje.

Por otra parte estoy de acuerdo con Miguel Antonio Rojas en que este tipo de problemas son como demasiado obvios y que si no eres capaz de resolverlo yo te animaria a que hagas un curso de programación, aprendiendo algoritmos básicos y tal, porque sino ya no se que va a pasar cuando te pongas con temas mas complejos ...

 
void OnStart()
{	
	for(int s=0;s<SymbolsTotal(false);s++)
     	{      
      		int Long=0,Short=0;

      		for(int i=0;i<PositionsTotal();i++)
      			if(PositionSelectByTicket(PositionGetTicket(i)))
           			if(PositionGetString(POSITION_SYMBOL)==SymbolName(s,false))
              			{    
               				if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) Long++; else Short++; 
              			}
		
		if(Long>0) Alert(SymbolName(s,false)," buy orders are ",Long);
		if(Short>0) Alert(SymbolName(s,false)," sell orders are ",Short);
        }      
  }

De hecho, como yo realmente lo programaría sería así, mirad que estilo, que elegancia, jejeje ;P

 
Imanol Salazar Garcia:


"De hecho, como yo realmente lo programaría sería así, mirad que estilo, que elegancia"

(Imanol Salazar Garcia, 2019)

 
Jajajaja tal cual broder. Ya tu sabe
Razón de la queja: