Errores, fallos, preguntas - página 1781
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
Rendimiento inestable
Secuencia de pasos: Conecte el script 'Test_s.ex5' varias veces al gráfico M15 (símbolo EURUSD)
Resultado:
2017.02.05 15:17:59.076 OnStart 1a vez adjunta
2017.02.05 15:18:03.293 OnStart 2ª vez adjunta
2017.02.05 15:18:07.760 OnStart 3ª vez que se une
2017.02.05 15:18:07.778 OnInit
2017.02.05 15:18:07.781 OnDeinit:1
2017.02.05 15:18:16.891 OnStart 4ª vez que se une
Los resultados de las uniones son diferentes. No se espera que sean diferentes, pero el resultado es aleatorio: la línea con OnInit\OnDeinit puede aparecer desde la 1ª vez, o desde la 10ª vez
void OnInit() { Print( __FUNCTION__ ); }
void OnDeinit( const int reason ) { Print( __FUNCTION__, ":", reason ); }
int OnCalculate( const int, const int, const int, const double& [] ) { return 0; }
#import "..\\Experts\\Test.ex5"
void OnInit();
#import
void OnStart()
{
Print( __FUNCTION__ );
OnInit();
}
Se adjunta el archivo de expertos (en realidad se utiliza como una biblioteca), el código aquí https://www.mql5.com/ru/forum/1111/page1801#comment_4059227
No entiendo si el error es mío o del terminal
En el 5º dígito{
double A=1.11111;
double B=1.11111;
double C=1.11111;
long CalcX=
NormalizeDouble(A,Digits)*MathPow(10,(Digits+1)*3-1)+
NormalizeDouble(B,Digits)*MathPow(10,(Digits+1)*2-1)+
NormalizeDouble(C,Digits)*MathPow(10,(Digits+1)*1-1);
Print ("CalcX=",CalcX);
}
Imprime CalcX=111111111111111104 valor esperado CalcX=1111111111111111
Orden incorrecto de las llamadas a las funciones al cambiar el periodo del gráfico
Secuencia de acciones:
Queda por añadir aquí que la adición de un indicador al gráfico y la eliminación de un indicador del gráfico son operaciones no síncronas.
Además, cuando se cambia el marco temporal, el indicador no se descarga inmediatamente de este marco temporal. Y crea una nueva copia del indicador en el nuevo marco temporal. Veo tus impresiones en el constructor-destructor, ¿crees que el destructor se llama inmediatamente? No, se equivoca. El destructor se llama cuando el indicador se descarga, y el indicador se descarga sólo en unos segundos después de la eliminación del indicador
Muestra los registros. Así que puedes ver el momento.
Queda por añadir que añadir un indicador a un gráfico y eliminar un indicador de un gráfico son operaciones no síncronas.
Además, cuando cambie el marco temporal, el indicador no se descargará inmediatamente de este marco temporal. Y crea una nueva copia del indicador en el nuevo marco temporal. Veo tus impresiones en el constructor-destructor, ¿crees que el destructor se llama inmediatamente? No, se equivoca. El destructor se llama cuando el indicador se descarga y el indicador sólo se descarga unos segundos después de eliminar el indicador
Se supone que hay suficiente tiempo entre los pasos (cambios de periodo del gráfico)
2017.02.05 19:49:49.984 I::I->M5 #paso 1: unirse a
2017.02.05 19:49:49.984 OnInit->M5
2017.02.05 19:51:39.853 I::I->M15 #paso 2: cambio de periodo M5 ->M15
2017.02.05 19:51:39.853 OnInit->M15
2017.02.05 19:53:29.813 OnDeinit->M15:3 #paso 3: cambio de periodo M15->M30
2017.02.05 19:53:29.813 I::~I->M15
2017.02.05 19:53:29.864 I::I->M30
2017.02.05 19:53:29.864 OnInit->M30
2017.02.05 19:54:03.245 OnDeinit->M30:3 #paso 4: cambio de periodo M30->H1
2017.02.05 19:54:03.245 I::~I->M30
2017.02.05 19:54:03.286 I::I->H1
2017.02.05 19:54:03.286 OnInit->H1
2017.02.05 19:55:02.984 I::I->H4 #paso 5: cambio de periodo H1 ->H4
2017.02.02.05 19:55:02.984 OnInit->H4
2017.02.05 19:55:02.984 OnDeinit->H1:3
2017.02.05 19:55:02.984 I::~I->H1
2017.02.05 19:55:50.697 I::I->D1 #paso 6: Cambio de periodo H4 ->D1
2017.02.05 19:55:50.697 OnInit->D1
2017.02.05 19:55:50.697 OnDeinit->H4:3
2017.02.05 19:55:50.697 I::~I->H4
2017.02.05 19:56:11.122 OnDeinit->M5:1 #paso 7: borrar
2017.02.05 19:56:11.122 I::~I->M5
2017.02.05 19:56:11.122 OnDeinit->D1:1
2017.02.05 19:56:11.123 I::~I->D1
La no simultaneidad sólo afecta al diferente orden de las llamadas a las funciones dentro de un paso (como se ve en los pasos #3 y #5)
Como puede ver, se esperan todos los cambios posteriores del período del gráfico, excepto el primero (paso#2:dos líneas de salida), (similar al paso#3:cuatro líneas de salida). ¿Y por qué el primer cambio de periodo del gráfico debería ser diferente de todos los demás? ¿Cómo es mejor/peor? ¿Por qué las dos líneas de salida que faltan del paso#2 (y sólo esa) se han desplazado al paso#7 (resaltado en rojo)?
No entiendo si el error es mío o del terminal
Imprime CalcX=111111111111111104 valor esperado CalcX=1111111111111111
Se supone que hay suficiente tiempo entre los pasos (cambios de periodo del gráfico)
2017.02.05 19:49:49.984 I::I->M5 #paso1: unirse a
2017.02.05 19:49:49.984 OnInit->M5
2017.02.05 19:51:39.853 I::I->M15 #paso 2: cambio de periodo M5 ->M15
2017.02.05 19:51:39.853 OnInit->M15
2017.02.05 19:53:29.813 OnDeinit->M15:3 #paso 3: cambio de periodo M15->M30
2017.02.05 19:53:29.813 I::~I->M15
2017.02.05 19:53:29.864 I::I->M30
2017.02.05 19:53:29.864 OnInit->M30
2017.02.05 19:54:03.245 OnDeinit->M30:3 #paso 4: cambio de periodo M30->H1
2017.02.05 19:54:03.245 I::~I->M30
2017.02.05 19:54:03.286 I::I->H1
2017.02.05 19:54:03.286 OnInit->H1
2017.02.05 19:55:02.984 I::I->H4 #paso 5: cambio de periodo H1 ->H4
2017.02.02.05 19:55:02.984 OnInit->H4
2017.02.05 19:55:02.984 OnDeinit->H1:3
2017.02.05 19:55:02.984 I::~I->H1
2017.02.05 19:55:50.697 I::I->D1 #paso 6: Cambio de periodo H4 ->D1
2017.02.05 19:55:50.697 OnInit->D1
2017.02.05 19:55:50.697 OnDeinit->H4:3
2017.02.05 19:55:50.697 I::~I->H4
2017.02.05 19:56:11.122 OnDeinit->M5:1 #paso 7: borrar
2017.02.05 19:56:11.122 I::~I->M5
2017.02.05 19:56:11.122 OnDeinit->D1:1
2017.02.05 19:56:11.123 I::~I->D1
La no simultaneidad sólo afecta al diferente orden de las llamadas a las funciones dentro de un paso (como se ve en los pasos #3 y #5)
Como podemos ver, todos los cambios de periodo subsiguientes del gráfico, excepto el primero (paso #2), tienen lugar como se esperaba (similar al paso #3). ¿Por qué el primer cambio de periodo debe ser diferente de todos los demás? ¿Cómo es mejor/peor?
Hay algún tipo de indicador en el gráfico M5. Cuando se cambia el marco temporal de M5 a M15 se crea una segunda copia del mismo indicador. Se envía una orden a ambos indicadores: el primero a M5 Deinit, el segundo a M15 Init. Al mismo tiempo, no sabemos cuál de estos comandos se ejecutará antes que el otro - hay una carrera clásica entre los diferentes hilos.
Después de eso, el primer indicador tendrá su contador de uso disminuido. En varios segundos después de que el contador de uso se ponga a cero, el indicador se descargará del gráfico. En ese momento se llamará a los destructores de los objetos globales de este indicador
Permítanme que intente explicarlo de nuevo
Hay un indicador determinado en el gráfico M5. Cuando se cambia el marco temporal de M5 a M15 se crea una segunda copia del mismo indicador. Se envía una orden a ambos indicadores: el primero a M5 Deinit, el segundo a M15 Init. Al mismo tiempo, no sabemos cuál de estos comandos se ejecutará antes que el otro - hay una carrera clásica entre los diferentes hilos.
Después de eso, el primer indicador tendrá su contador de uso disminuido. En varios segundos después de que el contador de uso se ponga a cero, el indicador se descargará del gráfico. Los destructores de los objetos globales de este indicador serán llamados
Afirmo (y propongo comprobarlo) que cuando se cambia el timeframe de M5 a M15 no se envía el comando M5 Deinit al primer indicador (y sólo a él - en este caso M5) y no se descarga del gráfico hasta que el usuario elimina el EA
Si se excluye laestructura I en 'Test_i.ex5' (sin efecto), la salida se simplifica:
2017.02.05 20:49:06.842 OnInit->M5
2017.02.05 20:49:21.253 OnInit->M15(*) cambio de periodo M5 -> M15: el indicador M5 no está descargado
2017.02.05 20:56:40.001OnDeinit->M15:3 cambio de periodo M15 -> M30: el indicadorM15 se descarga inmediatamente
2017.02.05 20:56:40.132 OnInit->M30
Han pasado más de 5 minutos desde (*), pero el indicador M5 no está descargado
Cómo eliminar el Asesor Experto del gráfico
2017.02.05 20:57:35.176OnDeinit->M5: 1 el indicador M5 se descarga sólo después de eliminar el Asesor Experto
2017.02.05 20:57:35.177 OnDeinit->M30:1
Permítanme que intente explicarlo de nuevo
Hay un indicador determinado en el gráfico M5. Cuando se cambia el marco temporal de M5 a M15, se crea la segunda copia del mismo indicador. Se envía una orden a ambos indicadores: el primero a M5 Deinit, el segundo a M15 Init. Al mismo tiempo, no sabemos cuál de estos comandos se ejecutará antes que el otro - hay una carrera clásica entre los diferentes hilos.
Después de eso, el primer indicador tendrá su contador de uso disminuido. En varios segundos después de que el contador de uso se ponga a cero, el indicador se descargará del gráfico. En ese momento los destructores de los objetos globales de este indicador serán llamados
Fallos al instalar los indicadores de Bill Williams
Puse fractales - lo hace
set AO - ADX is set
construir 1031
Si el número de decimales significativos en el doble > DBL_DIG=15, las reglas normales no funcionan
¿Cuáles funcionan?
En el archivo de ayuda dice que el valor máximo para long es9223372036854775807 - obviamente no lo alcanzo.