[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 209

 
polycomp:
Estas son las funciones, y los objetos son los rectángulos que aparecen en la gráfica.

Archivos adjuntos:
 
polycomp:


Archivos adjuntos:
 
Habrá que ver, llevará tiempo.
 
polycomp:
Una de las posibles razones de que el código funcione de forma diferente después de la reinicialización es la peculiaridad de la inicialización de las variables estáticas en MT4. En la función isNewBar() se utiliza dicha variable. Durante la inicialización primaria BarTime = 0. Y en una nueva reinicialización esta variable contendrá el valor anterior (no 0). Para comprobar esta suposición, haga global la variable BarTime y compruebe cómo funciona el código.
 
polycomp:
alsu:

En primer lugar, imprime algo de las funciones de la biblioteca en Print, para que sepas si son llamadas

Los objetos gráficos se crean en las funciones de la biblioteca . Tras la primera llamada al indicador, los objetos se crean y se muestran en la ventana del terminal.

Cuando los llama de nuevo no están presentes en la lista de objetos, lo que sugiere que las funciones externas no funcionan al recalcular el indicador por alguna razón, y el terminal no dice nada al respecto.

Bien. En lugar de signos indirectos, imprima ( " llamada de esta función") en el indicador; veremos de inmediato si se llama a esta función.

Deberías ser menos arrogante, entonces los errores se encontrarán más rápido)

 
polycomp:



En general, lo más probable es que su problema esté en la función

bool isNewBar()
{
  static datetime BarTime;  
   bool res=false;
    
   if (BarTime!=Time[0]) 
      {
         BarTime=Time[0];  
         res=true;
      } 
   return(res);
}

La cosa es que la estática no se reinicia durante la reinicialización, por lo que cuando se reinicia, su BarTime es siempre igual al tiempo de la última barra contada la última vez, es decir, isNewBar () es falso hasta que llega una nueva vela. Sería mejor mover la función de la biblioteca al inluder mqh y poner a cero BarTime=0 explícitamente en init ().

Esto es sólo un primer vistazo al código, así que no juzgues demasiado si me equivoco.

 
polycomp:



Yo empezaría por eliminar esta línea de su biblioteca

#property library

Dado que no está utilizando una biblioteca, sino un archivo de inclusión

 
alsu:

Por lo que recuerdo, tienes que recordar específicamente esta hora cuando estableces la orden pendiente. Puedes memorizarlo directamente en el comentario de la orden (o en magik, como una perversión especial:).
Muchas gracias.
 

PREGUNTA 1.

Cómo codificar esta idea.

Para establecer una orden pendiente pero hacer que se convierta en una orden de mercado sólo si el precio establecido de la orden pendiente coincide con el precio de apertura de cualquier vela TF60

PREGUNTA 2.

Cómo codificar esta idea.

Si una orden pendiente se convierte en una orden de mercado, en 10 minutos deberíamos establecer otra orden pendiente con los mismos valores: precio de apertura, precio de stop, volumen como en la orden pendiente anterior que se convirtió en una orden de mercado.

Gracias.

 
alsu:

Bien. Tal vez, en lugar de juzgar por los signos indirectos, basta con teclear el propio indicador: Print ("llamada de tal función"); veremos de inmediato si se llama o no.

Si no se confía demasiado, los errores se encontrarán más rápido).

alsu:

Y en general su problema está muy probablemente en la función

La cuestión es que la estática no se pone a cero al reiniciar, por lo que cuando se reinicia, el BarTime siempre es igual al tiempo de la última barra contada la última vez, es decir, isNewBar () será falso hasta que llegue una nueva vela. Sería mejor mover la función de la biblioteca al inluder mqh y poner a cero BarTime=0 explícitamente en init ().

Esto es sólo un primer vistazo al código, así que no juzgues demasiado si me equivoco.


¡Muchas gracias!

Se ha eliminado isNewBar () de la biblioteca y se ha puesto en el archivo del indicador. Todo funciona como un reloj.

Razón de la queja: