Errores, fallos, preguntas - página 1747
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
¿Cómo puedo eliminar la adherencia visual de los objetos NOT LABEL a las coordenadas temporales de las barras?
Pongo la coordenada temporal del objeto en segundos, pero se visualiza como si lo pusiera en el marco temporal.
He cavado la pregunta
Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias
Errores, fallos, preguntas
Andrew Petras, 2014.11.26 13:34
Me gusta mucho mover objetos como el triángulo, la elipse o el rectángulo, y los puntos de anclaje son desproporcionadamente "flotantes".
No depende de estos ajustes
Creo
arrastrar y soltar
El rectángulo tiene el segundo punto, el triángulo y la elipse tienen el tercer punto.
¿Se puede arreglar esto? Necesito "medidas" precisas.
Cuando selecciono "Escala de tiempo precisa", la mencionada vinculación desaparece y todo se muestra como debe ser. Sin embargo, no he encontrado en ninguna parte de MQL5 cómo activar/desactivar este parámetro. ¿No está previsto?
¡Realmente necesito ayuda! Llevo unas horas intentando averiguar la causa del extraño comportamiento. Al final escribí un EA con un resultado bastante inesperado
string TimeToString( const ulong Time )
{
return(TimeToString(Time / 1000, TIME_DATE|TIME_SECONDS) + "." + ::IntegerToString(Time % 1000, 3, '0'));
}
void OnTick()
{
static MqlTick PrevTick = {0};
MqlTick NowTick;
if (SymbolInfoTick(_Symbol, NowTick) && (PrevTick.time_msc > NowTick.time_msc))
Alert(TOSTRING(TimeToString(PrevTick.time_msc)) + TOSTRING(TimeToString(NowTick.time_msc)));
PrevTick = NowTick;
}
El resultado (ascendente)
2016.10.31 11:55:51.031 Test10 (Si-12.16,M1) TimeToString(PrevTick.time_msc) = 2016.10.31 12:58:10.702
2016.10.31 11:55:50.979 Test10 (Si-12.16,M1)
2016.10.31 11:55:50.979 Test10 (Si-12.16,M1) TimeToString(NowTick.time_msc) = 2016.10.31 12:58:10.654
2016.10.31 11:55:50.979 Test10 (Si-12.16,M1) TimeToString(PrevTick.time_msc) = 2016.10.31 12:58:10.656
2016.10.31 11:55:45.792 Test10 (Si-12.16,M1)
2016.10.31 11:55:45.792 Test10 (Si-12.16,M1) TimeToString(NowTick.time_msc) = 2016.10.31 12:58:05.458
2016.10.31 11:55:45.792 Test10 (Si-12.16,M1) TimeToString(PrevTick.time_msc) = 2016.10.31 12:58:05.464
2016.10.31 11:53:45.807 Test10 (Si-12.16,M1)
2016.10.31 11:53:45.807 Test10 (Si-12.16,M1) TimeToString(NowTick.time_msc) = 2016.10.31 12:56:05.474
2016.10.31 11:53:45.807 Test10 (Si-12.16,M1) TimeToString(PrevTick.time_msc) = 2016.10.31 12:56:05.476
¡SymbolInfoTick a veces devuelve (hay que esperar) un tick con un tiempo inferior al anterior!
¿Qué diablos es todo esto? Configuración
Terminal C:\Program Files\BCS Broker MetaTrader 5 Terminal
Terminal Windows 7 Ultimate (x64 based PC), IE 09.00, Intel Core i7-2700K @ 3.50GHz, RAM: 11327 / 16301 Mb, HDD: 4346 / 30000 Mb, GMT+02:00
Terminal MetaTrader 5 x64 build 1455 started (MetaQuotes Software Corp.)
¡Realmente necesito ayuda! Llevo unas horas intentando averiguar la causa del extraño comportamiento. Al final escribí un EA con un resultado bastante inesperado
string TimeToString( const ulong Time )
{
return(TimeToString(Time / 1000, TIME_DATE|TIME_SECONDS) + "." + ::IntegerToString(Time % 1000, 3, '0'));
}
void OnTick()
{
static MqlTick PrevTick = {0};
MqlTick NowTick;
if (SymbolInfoTick(_Symbol, NowTick) && (PrevTick.time_msc > NowTick.time_msc))
Alert(TOSTRING(TimeToString(PrevTick.time_msc)) + TOSTRING(TimeToString(NowTick.time_msc)));
PrevTick = NowTick;
}
El resultado (ascendente)
2016.10.31 11:55:51.031 Test10 (Si-12.16,M1) TimeToString(PrevTick.time_msc) = 2016.10.31 12:58:10.702
2016.10.31 11:55:50.979 Test10 (Si-12.16,M1)
2016.10.31 11:55:50.979 Test10 (Si-12.16,M1) TimeToString(NowTick.time_msc) = 2016.10.31 12:58:10.654
2016.10.31 11:55:50.979 Test10 (Si-12.16,M1) TimeToString(PrevTick.time_msc) = 2016.10.31 12:58:10.656
2016.10.31 11:55:45.792 Test10 (Si-12.16,M1)
2016.10.31 11:55:45.792 Test10 (Si-12.16,M1) TimeToString(NowTick.time_msc) = 2016.10.31 12:58:05.458
2016.10.31 11:55:45.792 Test10 (Si-12.16,M1) TimeToString(PrevTick.time_msc) = 2016.10.31 12:58:05.464
2016.10.31 11:53:45.807 Test10 (Si-12.16,M1)
2016.10.31 11:53:45.807 Test10 (Si-12.16,M1) TimeToString(NowTick.time_msc) = 2016.10.31 12:56:05.474
2016.10.31 11:53:45.807 Test10 (Si-12.16,M1) TimeToString(PrevTick.time_msc) = 2016.10.31 12:56:05.476
¡SymbolInfoTick a veces devuelve (hay que esperar) un tick con un tiempo inferior al anterior!
¿Qué diablos es todo esto? Configuración
Terminal C:\Program Files\BCS Broker MetaTrader 5 Terminal
Terminal Windows 7 Ultimate (x64 based PC), IE 09.00, Intel Core i7-2700K @ 3.50GHz, RAM: 11327 / 16301 Mb, HDD: 4346 / 30000 Mb, GMT+02:00
Terminal MetaTrader 5 x64 build 1455 started (MetaQuotes Software Corp.)
Línea mágica
virtual int f( const ABCDEFGHIJK ) const { return ABCDEFGHIJK; }
Secuencia de acciones (estricta)
Resultado:
Ajustes aquí: https://www.mql5.com/ru/forum/1111/page1127#comment_795376
Sí, no eres el único que necesita ayuda aquí. Llevo unas semanas intentando enrollar bien mis tics en una vela. Así que... los tics siguen siendo crudos. Oferta en SD#1598238
Tiki rueda hacia la vela con normalidad.
¿De verdad? ¿Y los volúmenes son los mismos? ¿Y has hecho controles? ¿Y puedes mostrar los registros?
Hizo el control - ver la codobase. No te preocupes por el desajuste entre los volúmenes de las velas y los calculados, porque se trata de un tick de frontera, que puede caer en una barra o en otra. Esto no es principal. También publiqué en el foro el indicador de volumen de negocio. Así que no hay ningún problema.
En tu caso, si te pones muy friki, puedes meterte con el mecanismo de creación de barras, pero no con CopyTicks.
Error de compilación
protected:
void f( int ) {} //(*)
};
class B : public A {
public:
void f( uint ) {}
};
void OnStart()
{
B b;
b.f( 1 ); //'A::f' - cannot call protected member function
}
Y si se elimina la línea (*), todo está bien. ¿Qué pasa con B::f(uint)? Si se mira la situación desde el otro lado
public:
void f( int ) {} //(**)
};
class B : public A {
public:
void f( uint ) {}
};
podemos ver las desventajas fundamentales del algoritmo MQL de búsqueda de una función coincidente. En el segundo ejemplo, se llamará a B::f(uint) hasta que no haya ninguna cadena (**). En cuanto aparezca la línea (**), se llamará a A::f(int). Significa que los cambios en la clase base afectan al resultado final, mientras que en C++ se llamará siempre a B::f(uint) independientemente de los cambios en la clase base, lo que garantiza la estabilidad del resultado final.
En MQL, resulta que el desarrollador de la clase A acaba de inventar una nueva función pública\nprotegida\nprivada y por ello el usuario de la clase B ya no compila el código y/o lo que es más crítico - el resultado final cambia
Línea mágica
virtual int f( const ABCDEFGHIJK ) const { return ABCDEFGHIJK; }
Secuencia de acciones (estricta)
Resultado:
Ajustes aquí: https://www.mql5.com/ru/forum/1111/page1127#comment_795376
Error de compilación
protected:
void f( int ) {} //(*)
};
class B : public A {
public:
void f( uint ) {}
};
void OnStart()
{
B b;
b.f( 1 ); //'A::f' - cannot call protected member function
}
Y si se elimina la línea (*), todo está bien. ¿Qué pasa con B::f(uint)? Si se mira la situación desde el otro lado
public:
void f( int ) {} //(**)
};
class B : public A {
public:
void f( uint ) {}
};
podemos ver las desventajas fundamentales del algoritmo MQL de búsqueda de una función coincidente. En el segundo ejemplo, se llamará a B::f(uint) hasta que no haya ninguna cadena (**). En cuanto aparezca la línea (**), se llamará a A::f(int). Significa que los cambios en la clase base afectan al resultado final, mientras que en C++ se llamará siempre a B::f(uint) independientemente de los cambios en la clase base, lo que garantiza la estabilidad del resultado final.
En MQL, resulta que el desarrollador de la clase A acaba de inventar una nueva función pública\nprotegida\nprivada y por ello el usuario de la clase B ha dejado de compilar el código y/o, lo que es más grave, el resultado final ha cambiado.
Sólo la constante "1" en la llamada b.f( 1 ) se interpreta como int. Haz una conversión explícita y todo funcionará:
b.f( (uint)1 );