Errores, fallos, preguntas - página 1234

 
Tapochun:
Entonces esta pregunta. Si el indicador está funcionando en M15. Se forma una nueva vela. Al solicitar datos para M15 y M30, ¿deben estar disponibles al mismo tiempo?

Sí.

Después de crear un indicador(incluyéndolo en el ciclo de procesamiento normal) y entrar en el ciclo de procesamiento de ticks normal (ontik), los datos estarán disponibles con una alta probabilidad. Pero no olvide que no hay ninguna garantía debido a la posible descarga del historial de otros símbolos.

Es decir, comprobar siempre los resultados de las solicitudes de datos de los indicadores. Si solicita datos en la ontika y no están disponibles, salga inmediatamente para comprobarlo en el siguiente tick.

No cometas el típico error de "todo está siempre a punto, no pienso en los procesos técnicos de entrega y cálculo de datos, no debe preocuparme, siempre tengo suerte". Implementar siempre una lógica de inicialización perezosa y un control de datos.

Asegúrese de probar sus programas en una base gráfica vacía. Suele bastar con reiniciar el terminal con la base de datos del historial borrada manualmente para que se produzcan diversos errores de acceso por índice erróneo o división por cero.

Si tienes una barra m15 en un símbolo, entonces definitivamente hay una barra m30 en el mismo símbolo.

 
Renat:

Sí.

Otra pregunta. ¿La función BarsCalculated( ) se comporta igual cuando se llama desde un EA y un indicador?
 
Tapochun:
Otra pregunta. ¿La función BarsCalculated( ) se comporta igual cuando se llama desde un EA y un indicador?
¿Qué tiene de malo?
 
Renat:
¿Qué ocurre?

Es que he experimentado con diferente información. Según tengo entendido, deberían funcionar de la misma manera. Pero no lo hacen. Como es domingo, no hay manera de comprobar la hora actual. Pero también funcionan de forma diferente en el probador. Aquí hay dos ejemplos de código. La esencia es la siguiente. Estamos tratando de obtener datos de siete TFs. Lo iniciamos (tanto el asesor como el indicador) no desde el TF más significativo. Por ejemplo, de М15. Si el tick actual ha sincronizado la formación de una nueva vela y la recepción de datos en esta vela a través de BarsCalculated() - entonces registramos el número de barras calculadas utilizando BarsCalculated() y el tiempo de la vela actual. Vea los detalles en el código.

El indicador.

Primera marca.

Para cada TF, se forma una nueva vela. Pero en TF M1, M5, M15, BarsCalculated() devuelve 0. Pero en TF M30, H1, H4, D1 devuelve -1. Aquí tenemos una pregunta, ¿por qué la función funciona de manera diferente? En consecuencia, si lo ejecutamos en el TF M30, para el TF M1, M5, M15, M30,BarsCalculated() devuelve 0. Y, respectivamente, para el TF H1, H4, D1, devuelve -1. De esto podemos concluir que para la TF más alta los datos no están disponibles inicialmente.

La segunda garrapata.

De acuerdo con la lógica del código, la sincronización, es decir, la escritura de los parámetros (todo de acuerdo con los registros de las muestras);

La tercera y la siguiente garrapata.

Obtenemos una nueva barra por indicador para TF M30, H1, H4, D1. Aunque parece que los datos ya se han obtenido. Y resulta que el número en TF, mayor que el actual, es mayor en 1. Un comportamiento muy extraño. En el futuro (utilizando el ejemplo actual) no podremos obtener la sincronización.

Asesor experto.

La primera garrapata.

La sincronización se realiza inmediatamente. El nuevo valor de BarsCalculated() se recibe de forma sincronizada con la formación de una nueva vela.

Segundo y siguientes ticks.

Comportamiento lógico de la función. Todo está sincronizado.

Ejecuta ambos ejemplos por ticks en el probador, lo verás por ti mismo. El comportamiento actual de la función es diferente para los Asesores Expertos y los indicadores. Además, los datos procedentes de los indicadores se retrasan en los plazos más altos. Porlo tanto, creo queal solicitar datos para M15 y M30 no estarán disponibles al mismo tiempo.Los datos reales definitivamente no lo son.

Si me equivoco, por favor, aconséjeme cómo obtener correctamente los datos del indicador de la TF más antigua. Gracias.

Archivos adjuntos:
 
//+------------------------------------------------------------------+
//| Search position of an element in a sorted list                   |
//+------------------------------------------------------------------+
CObject *CList::QuickSearch(CObject *element)
  {
   int      i,j,m;
   CObject *t_node=NULL;
//--- check
   if(m_data_total==0)
      return(NULL);
//--- check the pointer is not needed
   i=0;
   j=m_data_total;
   while(j>=i)
     {
      //--- ">>1" is quick division by 2
      m=(j+i)>>1;
      if(m<0 || m>=m_data_total)
         break;
      t_node=GetNodeAtIndex(m);
      if(t_node.Compare(element,m_sort_mode)==0)
         break;
      if(t_node.Compare(element,m_sort_mode)>0)
         j=m-1;
      else
         i=m+1;
      t_node=NULL;
     }
//--- result
   return(t_node);
  }
Biblioteca estándar CList
¿Por qué llamar dos veces aCompare? Puede ser una operación cara (si necesitamos comprobar la igualdad de objetos grandes, no la equivalencia de algunos campos).
Uno puede simplemente guardar el resultado después de la primera llamada deComparación.
 
Renat:
¿Debo esperar aquí su respuesta? ¿O debo llevarlo al servicio técnico?
 

¿De dónde vienen estos iconos en la parte inferior del gráfico?

No hay ningún indicador en el gráfico, pero los iconos aparecen siempre. Estoy harto de borrarlos. ¿Cómo desactivo esta mierda? No encuentro nada en la configuración del terminal al respecto.

 
meat:

¿De dónde vienen estos iconos en la parte inferior del gráfico?

No hay ningún indicador en el gráfico, pero los iconos aparecen siempre. Estoy harto de borrarlos. ¿Cómo puedo desactivar esta mierda? No encuentro nada relacionado con ella en la configuración del terminal.

Se trata de eventos de la pestaña "Calendario". Para eliminar: Haga clic con el botón derecho del ratón dentro de la pestaña "Calendario" -> "Mostrar en gráficos" -> "Eliminar todos los eventos".

P. S. Y desmarca la opción "Actualización automática". Ahora los nuevos eventos del Calendario no se mostrarán en el gráfico.

 
crOss:
Tome cualquier Asesor Experto (de los ejemplos de MetaQuotes), ejecútelo bajo la compilación 975 en un período determinado y con los mismos parámetros,
Obtenga los resultados, es decir, el gráfico de la curva de rendimiento y la tabla de ofertas.


Ahora ejecute el mismo EA bajo la build 1010 en el mismo periodo y con los mismos parámetros, obtendrá resultados completamente diferentes...

P.D. Metatester es de 32 bits

¿Cuál de los resultados es correcto? ¿En la versión 975 o en la versión 1010?
 

Hola a todos) Por favor, ayúdenme a poner en marcha el temporizador:

int OnInit()

{

bool setTimer=EventSetTimer(60);

Print("setTimer");

}

void OnTimer()

{

Print("Pasando el tiempo");

}

Pregunta: ¿por qué no funciona? Me ha hecho perder la cabeza...(((.