Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 648

 
psyman:

Neverness, ¿por qué escribes esto aquí?

Abre un hilo aparte en la canaleta y reparte elefantes allí, me quito el sombrero.

Bueno, se lo dije al moderador de inmediato.

Señor moderador, discutamos la teoría del comercio en un hilo aparte.

El moderador está en contra hasta ahora.

Quizá el moderador no tenga su propia "teoría del comercio".

 
inter78:

Hola! Yo también pregunto sobre el cambio de gráficos. Hay 28 o 30 cartas abiertas. Los cambio de forma pensada con atajos y si se ajustan a la condición abro posiciones. Tengo 10 o 20. O 5. No importa. Lo importante es que el resto estorba y no hay información sobre los puestos vacantes. Intenté enviar los ID a las variables globales. Pero devuelve números completamente diferentes. Me explicaron que el ID es grande y distorsionado. Lo intenté a través de un archivo. Se devuelve en TXT y no se convierte en long. Puse el ID manualmente en el código - parece que funciona. Al desplazar el campo, se abre el gráfico necesario, ¿qué debo hacer correctamente?

El doble y el largo tienen la misma longitud: 8 bytes.

Para guardar un long en un double (y viceversa), puedes usar "unión".


Por ejemplo:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   long id=ChartID();
   
   double X=LongToDouble(id);
   long   Y=DoubleToLong(X);
   
   Print("id=",id," X=",X," Y=",Y);
  }


//+------------------------------------------------------------------+
union eightbytes
   {
   double   dbl;
   long     lng;
   } VALUE;

double LongToDouble(long value)
   {
   VALUE.lng=value;
   return(VALUE.dbl);
   }

long DoubleToLong (double value)
   {
   VALUE.dbl=value;
   return(VALUE.lng);
   }
 
neverness:

Bueno, se lo dije al moderador inmediatamente.

Señor moderador, discutamos la teoría del comercio en un hilo aparte.

El moderador está en contra hasta ahora.

Quizá el moderador no tenga su propia "teoría del comercio".

Hay que ir a la sucursal de los payasos teóricos donde se aficionan a dibujar algo que no entiendes y no sabes por qué.

Hay muchos hilos similares en el foro, ¡al menos discútelos!

От теории к практике
От теории к практике
  • 2017.12.01
  • www.mql5.com
Добрый вечер, уважаемые трейдеры! Решил было на какое-то время покинуть форум, и сразу как-то скучно стало:)))) А просто читать, увы - неинтересно...
 
Taras Slobodyanik:

Double y long tienen la misma longitud: 8 bytes.

Para guardar un long en un double (y viceversa) puedes usar "union".


Por ejemplo:

Disculpa, Taras , ¿podrías tener un trozo de código sobre cómo enviar el ID a una variable global y recuperarlo sin distorsión?
 
inter78:
Lo siento Taras , ¿no puedes tener un poco de código sobre cómo enviar el ID a una variable global y extraerlo sin distorsión?

así que todo está listo, sólo hay que añadir escritura/lectura

string GVname="gvName";

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   //создаем временную глобальную переменную
   if (!GlobalVariableCheck(GVname))
      GlobalVariableTemp(GVname);
   
   long  id=ChartID();
   
   //сохраняем long как double
   GV_Save(LongToDouble(id));
   
   //читаем double и переводим в long
   long  Y=DoubleToLong(GV_Read());
   
   Print("id=",id," Y=",Y);
  }

//+------------------------------------------------------------------+
union eightbytes
   {
   double   dbl;
   long     lng;
   } VALUE;

double LongToDouble(long value)
   {
   VALUE.lng=value;
   return(VALUE.dbl);
   }

long DoubleToLong (double value)
   {
   VALUE.dbl=value;
   return(VALUE.lng);
   }


//+------------------------------------------------------------------+
double GV_Read()
{
if (!GlobalVariableCheck(GVname))
   GlobalVariableTemp(GVname);
   
return(GlobalVariableGet(GVname));
}
//+------------------------------------------------------------------+
void GV_Save(double value)
{
GlobalVariableSet(GVname, value);
}
 
Taras Slobodyanik:

así que está todo preparado, sólo hay que añadir la escritura/lectura

¡Muchas gracias! Me pregunto si alguien ha intentado hacer un indicador de este tipo antes? No he sido capaz de encontrar uno desde hace tanto tiempo. Creo que sería de interés para mucha gente.
 
Vitaly Muzichenko:

Hacer la inicialización de OnInit()

No, no señala en la barra actual. Tal vez la variable _time se pueda restablecer después de que el indicador haya contado todo por primera vez después de unirse al gráfico.

¿Cómo sé que el indicador ha contado todo una vez?
 
Ghabo:

Pongo el indicador en el gráfico y... ALERTA pero la señal está a 5 barras. Durante el trabajo posterior pita como debe ser.

¿Cómo hacer que deje de pitar al arrancar?

if(М_А>0.0)  
{
if(time!=Time[0])
   {
    time=Time[0]; 
    AL(Symbol()+" "+Period()+" УХ ТЫ",2);//
   }
 }

En la función AL(), todas las alertas posibles.

¿Qué es M_A ? ¿Qué contiene y de dónde toma los datos?

Es necesario comprobar la validez de la señal en la barra actual junto con la comprobación del tiempo. Y sólo tienes que comprobar el valor M_A. ¿De dónde lo sacas?

 
Artyom Trishkin:

¿Qué es M_A ? ¿Qué contiene y de dónde obtiene los datos?

Es necesario comprobar la validez de la señal en la barra actual junto con la hora. Y simplemente se comprueba el valor M_A. ¿De dónde lo sacas?

Llamar a un indicador.

М_А =NormalizeDouble(iCustom(NULL,0,"Morning_All_Best",0,i),Digits);

¿Cómo puedo comprobar la validez?

 
Ghabo:

Llamada al indicador.

¿Cómo puedo comprobar la validez?

1. ¿Por qué se hace la normalización? Es una operación demasiado cara para trabajar en el ciclo de los indicadores y no es necesaria aquí.

2. ¿Qué significa "más que cero"? ¿Qué señales emite este indicador personalizado? ¿Qué se muestra en los valores del buffer de este indicador en la ventana de datos (Ctrl+D)?

Razón de la queja: