Cambiar spread de pips a puntos

 

Hola!,


Tengo un asesor experto que no permite abrir operaciones si el spread es mayor que "x" pips. El caso es que quiero cambiar a que el máximo spread admisible sea en puntos y no en pips...¿cómo puedo hacerlo?, gracias!!!



Text("Current Spread: "+DoubleToString(Spread(),1)+" pips",3);



double Spread(string symbol=NULL)

   {

      

   double res=(int)SymbolInfoInteger(NN(symbol),SYMBOL_SPREAD);

   

   int digits=(int)SymbolInfoInteger(NN(symbol),SYMBOL_DIGITS);

          

   if(digits==5 || digits==3 || digits==1) res=res*0.1;

      

   return(res);

   

   }

 
Jose Ramon Rosaenz:

Hola!,


Tengo un asesor experto que no permite abrir operaciones si el spread es mayor que "x" pips. El caso es que quiero cambiar a que el máximo spread admisible sea en puntos y no en pips...¿cómo puedo hacerlo?, gracias!!!



Text("Current Spread: "+DoubleToString(Spread(),1)+" pips",3);



double Spread(string symbol=NULL)

   {

      

   double res=(int)SymbolInfoInteger(NN(symbol),SYMBOL_SPREAD);

   

   int digits=(int)SymbolInfoInteger(NN(symbol),SYMBOL_DIGITS);

          

   if(digits==5 || digits==3 || digits==1) res=res*0.1;

      

   return(res);

   

   }

Según la documentación de MQL5, la función que usas para averiguar el spread [SymbolInfoInteger(NN(symbol),SYMBOL_SPREAD)] devuelve el valor en puntos, no en pips...
 
Jose Luis Perez Navarro:
Según la documentación de MQL5, la función que usas para averiguar el spread [SymbolInfoInteger(NN(symbol),SYMBOL_SPREAD)] devuelve el valor en puntos, no en pips...
No puede ser...si pongo el máximo spread admisible = 1 y se abren operaciones sin problemas es porque está en pips, no en puntos...el spread minimo de mi broker es 7 puntos
 
Jose Ramon Rosaenz:

Hola!,


Tengo un asesor experto que no permite abrir operaciones si el spread es mayor que "x" pips. El caso es que quiero cambiar a que el máximo spread admisible sea en puntos y no en pips...¿cómo puedo hacerlo?, gracias!!!



Text("Current Spread: "+DoubleToString(Spread(),1)+" pips",3);



double Spread(string symbol=NULL)

   {

      

   double res=(int)SymbolInfoInteger(NN(symbol),SYMBOL_SPREAD);

   

   int digits=(int)SymbolInfoInteger(NN(symbol),SYMBOL_DIGITS);

          

   if(digits==5 || digits==3 || digits==1) res=res*0.1;

      

   return(res);

   

   }

double Spread(string symbol=NULL)

   {
   double res=(int)SymbolInfoInteger(NN(symbol),SYMBOL_SPREAD);     

   return(res);  

   }

Si pones la formula simplemente asi, te retorna el valor en puntos,

el problema es que si esta funcion se llama en otras partes del codigo, pues puede afectar la logica y/o resultados del expert.


Si aun asi no funciona, puede ser que el input maximo spread, tambien se transforme a pips, en algun lugar del codigo
Espero lo puedas solucionar

Saludos!!!




 
Miguel Antonio Rojas Martinez:

Si pones la formula simplemente asi, te retorna el valor en puntos,

el problema es que si esta funcion se llama en otras partes del codigo, pues puede afectar la logica y/o resultados del expert.


Si aun asi no funciona, puede ser que el input maximo spread, tambien se transforme a pips, en algun lugar del codigo
Espero lo puedas solucionar

Saludos!!!




Gracias!!!,
Podría ser por esto?

  if(digits==5 || digits==3 || digits==1) res=res*0.1;

En lugar de multiplicar por 0.1, multiplicar por 1? 😀
 
Jose Ramon Rosaenz:
Gracias!!!,
Podría ser por esto?

  if(digits==5 || digits==3 || digits==1) res=res*0.1;

En lugar de multiplicar por 0.1, multiplicar por 1? 😀

Exacto, tendria el mismo efecto que omitirlo

El tema, repito, es que puede afectar la logica del expert en "otro" lado, porque quizas esa funcion sea llamada para otros calculos

Saludos!!!

Razón de la queja: