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!!!