Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
publicó una nueva versión 3.09 en Code Base, puedes descargarla.
Puedes mejorarla un poco más.
if(ObjectFind(0,nm)<0) ObjectCreate(0,nm,OBJ_VLINE,0,t1,2);
En tales construcciones ObjectFind() es obviamente innecesario. Cuando se crea por ObjectCreate( ) será similar buscar en la lista por nombre y o bien crear un nuevo objeto, o cambiar los parámetros de los puntos de anclaje del existente.
.
ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,false);
Para objetos creados desde el programa MQL esta propiedad se fuerza a false.
Del mismo modo, no tiene sentido cambiar el valor de OBJPROP_WIDTH, será igual a 1 de todos modos.
Según mis mediciones estas ediciones reducen el tiempo de construcción en un 10%.
Gracias. Lo tendré en cuenta. Estoy trabajando en algo ahora mismo. Hay un fallo.
Tengo 8 gráficos abiertos con sólo la cuadrícula en ellos.
Simulo la desconexión de la red durante 5 minutos. Esta es la imagen después de conectar la red. 2 gráficos se bloquean.
Adjunto una nueva versión de la rejilla versión 4.01.
Gracias. Lo tendré en cuenta. Estoy trabajando en algo ahora mismo. Hay un fallo.
Tengo 8 gráficos abiertos con sólo la cuadrícula en ellos.
Simulo la desconexión de la red durante 5 minutos. Esta es la imagen después de conectar la red. 2 gráficos se bloquean.
Adjunto una nueva versión del grid versión 4.01.
Esto es consecuencia de la arquitectura del terminal y del algoritmo del indicador. El indicador se ejecuta en el flujo de símbolos, es decir, durante su cálculo son imposibles muchas operaciones con el historial: procesamiento de ticks, cálculo de otros indicadores, sincronización del historial con el servidor, construcción o carga del historial por plazos de símbolos, etc.
Dado que el indicador Grid se calcula durante mucho tiempo y utiliza datos de otros timeframes de símbolos, es conveniente interrumpir su cálculo en caso de cualquier error. Si seriamente no reescribir el código, puede hacerlo de esta manera:
bool isNewBar_i(datetime date,ENUM_TIMEFRAMES timeFrame,bool& error)
{
...
else
{
Print("Timeframe ",fTimeFrameName(timeFrame)," is not ready");
error=true;
}
y así:
//--- определимся с цветом линии
if(_Period<PERIOD_H1) if(isNewBar_i(time[i],PERIOD_H1,error) && _Period<PERIOD_M30) line_color=new_hour;
if(_Period<PERIOD_D1) if(isNewBar_i(time[i],PERIOD_D1,error) && _Period<PERIOD_H4 ) line_color=new_day;
if(_Period<PERIOD_W1) if(isNewBar_i(time[i],PERIOD_W1,error) && _Period<PERIOD_D1 ) line_color=new_week;
if(_Period<PERIOD_MN1)if(isNewBar_i(time[i],PERIOD_MN1,error)&& _Period<PERIOD_MN1) line_color=new_mon;
//---
if(error) return(0);
Esto es consecuencia de la arquitectura del terminal y del algoritmo del indicador. El indicador se ejecuta en el flujo de símbolos, es decir, en el proceso de su cálculo son imposibles muchas operaciones con el historial: procesamiento de ticks, cálculo de otros indicadores, sincronización del historial con el servidor, construcción o carga del historial por plazos de símbolos, etc.
No consigo esta noción de stream, y he leído la ayuda sobre acceso a datos 50 veces (( el script se da allí como ejemplo. Y se tarda alrededor de un minuto para ejecutar (mucho tiempo), pero parece que empecé a conseguirlo. He entendido bien que mientras se calcula el indicador, es decir, la función ha empezado a ejecutarse
int OnCalculate () {
todos los recursos del ordenador (terminal) se dan a esta tarea, y hasta que se ejecute (finalice)
return(rates_total); }
No debe hacer nada de lo siguiente
- intentar leer la historia por este símbolo si no existe
- solicitar un marco temporal diferente
- solicitar otro símbolo
Creo que entiendo como rehacer el programa, tienes que poner todas las líneas en la primera llamada y olvidarte hasta if(prev_calculado==0).
¿es correcto ?
S.Y.
Según la evaluación de Renat tengo el nivel 5 :-)) https://www.mql5.com/ru/forum/1165/page3 fue un paso más allá )))
completamente reescrito el código. No se solicitan otros plazos.
si no te importa Pon las barras mac. en la ventana Unlimit y pasa por M15, M5 y M1. postea el resultado en el log aqui. tengo algo mal en M1 - he escrito al servicio. Sólo quiero ver si soy sólo yo o todo el mundo.
aquí está mi registro.
2010.06.17 11:39:55 Grid (EURUSD,M1) Fallo o primera ejecución Time= 1.2 sec for 1293476 bars ObjectsTotal= 48010 _time= 2002.10.25 06:41:00
2010.06.17 11:39:52 Grid (EURUSD,M5) Fallo o primera ejecución Time= 0.0 seg para 847192 barras ObjectsTotal= 423 _time= 2010.06.02 21:35:00
2010.06.17 11:39:48 Grid (EURUSD,M15) Fallo o primera ejecución Time= 0.0 sec para 285186 barras ObjectsTotal= 962 _time= 2010.05.04 22:00:00
gracias de antemano. grid version 4.11
No puedo conseguir esta noción de hilo, y he leído la ayuda sobre el acceso a datos 50 veces (( la secuencia de comandos se da allí como un ejemplo. Y tarda como un minuto en ejecutarse (mucho tiempo), pero creo que empiezo a entenderlo. Entiendo correctamente que mientras el cálculo del indicador está en curso, es decir, la función ha empezado a ejecutarse
int OnCalculate () {
se dan todos los recursos del ordenador (terminal ) a esta tarea, y hasta que se ejecute (termine)
return(rates_total); }
No debe hacer nada de lo siguiente
- intentar leer el historial de este símbolo si no existe
- solicitar otro marco temporal
Puede solicitarlo, pero si los datos faltan o son insuficientes, no tiene sentido esperar en OnCalculate(). Lo mismo ocurre con los datos de otros indicadores para el símbolo actual.
- solicitar otro símbolo
.
Creo que entiendo cómo rehacer el programa que necesita para establecer todas las líneas en la primera llamada y olvidarse de él if(prev_calculated==0).
si no es mucha molestia. Establecer las barras mac. en la ventana Unlimit y pasar por M15, M5 y M1. El resultado que estará en el registro, publicar aquí. Tengo algo mal en M1 - escribió al servicio. Sólo quiero ver si soy yo o todo el mundo.
2010.06.17 11:58:54 6op0k (EURUSD,M5) Fallo o primera ejecución Tiempo=0. 0seg para 847196 barras0seg para 847196 barras ObjectsTotal=605_time=2010.06.02 21:55:00
2010.06.17 11:58:44 6op0k (EURUSD,M15) Fallo o primera ejecución Time=0.0seg para 285187 barras ObjectsTotal=1108_time=2010.05.04 22:15:00
2010.06.17 11:58:59 6op0k (EURUSD,M1) Fallo o primera ejecución Time=0.1sec for 4009008 bars ObjectsTotal=403_time=2010.06.15 07:45:00
2010.06.17 11:58:54 6op0k (EURUSD,M5) Fallo o primera ejecución Time=0.0seg para 847196 barras ObjectsTotal=605_time=2010.06.02 21:55:00
2010.06.17 11:58:44 6op0k (EURUSD,M15) Fallo o primera ejecución Time=0.0seg para 285187 barras ObjectsTotal=1108_time=2010.05.04 22:15:00
Gracias. significa que finalmente escribí todo correctamente y el "indicador" realmente funciona como yo pretendía. el fallo que tuve es un problema del terminal (tiene todo normal). _time=2010.06.15 07:45:00). es una pena que los desarrolladores se callen en el service dex. al menos escribirían un par de palabras (( como
problema reproducido...creemos...gracias
gracias. significa que finalmente escribí todo correctamente y el "indicador" realmente funciona como yo pretendía. el fallo que tuve es un problema con el terminal (lo está haciendo bien. _time=2010.06.15 07:45:00). es una pena que los desarrolladores se callen en el service dex. al menos escribirían un par de palabras (( como
problema reproducido...creemos...gracias.
y se puede corregir:
si en H1 gravfik llevar una línea vertical u horizontal, a continuación, cambiar a otro intervalo de tiempo, las líneas no relacionadas con el indicador se eliminan.
Este es un indicador muy conveniente para comprobar la historia para determinar visualmente el paso de los precios, pero debido al hecho de que las marcas (líneas verticales y horizontales) puesto en los intervalos de tiempo más antiguos desaparecen al cambiar a un intervalo de tiempo más pequeño, se vuelve incómodo.
El indicador ha resuelto perfectamente el problema de la visualización utilizable de la escala de precios en las ventanas del terminal.
La compilación en builds hasta el 3021 inclusive no muestra errores y todo se dibuja OK (e incluso si se lanza la versión previamente compilada en un nuevo build de la terminal).
La compilación en builds posteriores no muestra errores, pero en la terminal, el sumador no dibuja marcas verticales y en los logs escribe: 1 leaked strings left
Habiendo comentado la línea
StringConcatenate(nombre_línea,IntegerToString(str.hora,2,'0'),":":",IntegerToString(str.min,2,'0'),"_N",contador_línea);
el error en los logs del terminal desaparece (aunque las líneas no se dibujan).
¿Por dónde cavar? ¿Cómo reanimar una gran herramienta?