[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 644

 
Myth63:


El asunto es que no soy muy bueno en la programación de MQL y mi EA se basa en los principios de BASIC =) Se asigna una variable a una orden abierta. El terminal dice que se me ha vuelto a registrar y el valor de esta variable desaparece al abrir la orden. Si esto ocurre, el terminal debería comprobar las posiciones abiertas y asignar esos valores a las variables que han sido asignadas por el robot. Y el Asesor Experto muestra buenas lecturas en la prueba.

Dependiendo de lo que se quiera almacenar (qué información), se pueden utilizar diferentes opciones:

  • la información sobre la orden puede ser almacenada en su comentario y luego leída desde el comentario;
  • la información que desea puede escribirse en un archivo, un proceso lento;
  • La variante más utilizada es escribirla en las variables globales del terminal.
 
FelixFX:

Si no te importa, aquí tienes un ejemplo. Por lo que entiendo, los datos no se actualizarán hasta que se ejecute el bucle?
int start()
{
//----
    while (!IsStopped() && IsExpertEnabled())
    {fMineFunction();}
//----
    return (0);
}
 
TarasBY:

¿Se utilizarán sólo los mismos datos durante este ciclo interminable? ¿Se actualizarán los datos con un nuevo tick o no?
 
Myth63:


Lo que pasa es que no soy muy bueno en programación MQL y mi EA se basa en los principios de Bacyca =) Se asigna una variable a una orden abierta. El terminal dice que se me ha vuelto a registrar y el valor de esta variable desaparece al abrir la orden. Me pregunto cómo hacer para que compruebe las posiciones abiertas si hay un overlog y asigne esos valores a las variables que han sido establecidas por un robot.

¿Estás hablando de un número mágico? No hay suficiente información para ayudarte... cuál es la variable y cómo se asigna, de ahí tienes que partir.

Pero mi Asesor Experto está mostrando buenos resultados en la prueba.

100 oficios no es una lectura, es un buen pedazo de historia. Un par de miles de operaciones a lo largo de 2-3 años es algo en lo que se puede confiar.
 
FelixFX:

¿Se utilizarán sólo los mismos datos durante este ciclo interminable? ¿Se actualizarán los datos con un nuevo tick o no?
No. Para que se actualice, tiene que ser esto. La pregunta sobre el bucle se responde con el motor de búsqueda del sitio, el número de páginas que devuelve. Léalo.
 
FelixFX:

¿Se utilizarán sólo los mismos datos durante este ciclo interminable? ¿Se actualizarán los datos con la nueva garrapata o no?
El bucle le permite ejecutar su función en un "bucle", sin esperar a que llegue el siguiente tick. ¿Qué datos pregunta?
 
Por favor, avisen si hay alguna función incorporada que me permita ejecutar una función que escribí justo en la apertura de cada barra, y no en cada tick. Parece que es fácil de escribir a mano, pero cuando parte del código se ejecuta por ticks, y parte por barras, el programa se vuelve muy confuso) Muchas gracias)
 
Qwertee:
Por favor, avise si hay una función incorporada, que pueda ejecutar alguna función, escrita por mí, sólo en la apertura de cada barra, no en cada tick. No es difícil de escribir a mano, pero cuando ejecuto algún código por ticks y otros por barras, se vuelve muy confuso) Muchas gracias)

así que sólo tienes que determinar cuándo se abre una nueva barra y realizar tu función.

Puede determinar la aparición de una nueva barra memorizando la hora de apertura de la barra y comparándola con la hora actual de la barra 0. Si el nuevo tiempo es más largo que el anterior, entonces tenemos una nueva barra.

 

sergeev gracias por el consejo, parece que funciona)

Ok, una cosa más.

En mi EA tengo esta ramificación:

if(period=="M15")
{
//comprobar para abrir la compra
Alert(buysell);

if(buysell=="buy")

Alerta(1);

.............

}

Básicamente, un if anidado. PERO. la condición if(period=="M15") se cumple y la alerta da un resultado, y compra, pero la condición if(buysell=="buy") no se cumple y el comando Alert(1) ni siquiera se inicia. diablos, ambas condiciones son incluso sintácticamente iguales, pero ¿por qué una se cumple y la otra no?

 
sergeev:

así que sólo tienes que determinar cuándo se abre una nueva barra y realizar tu función.

Puede determinar la aparición de una nueva barra memorizando la hora de apertura de la barra y comparándola con la hora actual de la barra 0. Si el nuevo tiempo es más largo que el anterior, entonces tienes una nueva barra.

Lo escribiré:

int time.marker;

void start() {
   if(time.marker!=Time[0]) {
      time.marker=Time[0];
      // тут то что буде исполнятся только на открытии бара
      }
   // тут то что буде исполнятся на каждом тике
   }