Características del lenguaje mql5, sutilezas y técnicas - página 225
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
¿Qué significa eso? ¿Puede ampliarlo?
Tuve tiempo de comprobarlo: sí, el truco falló, ChartID()=12345 para visual y no visual...(tal ChartID constante del probador).
Pero ChartGetInteger(ChartID(),CHART_WIDTH_IN_PIXELS) da un honesto -1 si no hay pantalla. Puede utilizarlo para determinar la física - si hay un lugar para la salida de algo o no. Porque hay un montón de banderas, y no sabemos lo que hay en VPS en absoluto
Otro matiz repentino de MQL - los métodos virtuales no se llaman desde los constructores.
en código
no se puede hacer así :-)) OnAttach de la clase padre será llamado desde el constructor ; Y durante el acceso normal - de la clase hijo.
no se puedeentender, hay que memorizarlo:-)
Otro matiz repentino de MQL - los métodos virtuales no son llamados desde los constructores.
en el código
no se puede hacer así :-)) OnAttach de la clase padre será llamado desde el constructor ; Y durante el acceso normal - de la clase hijo.
no puedesentenderlo, tienes que memorizarlo:-)
¿Por qué es imposible de entender? La inicialización de un puntero a un método de la tabla de métodos virtuales tiene lugar en el constructor. Primero se llama al constructor de la clase padre y luego al constructor de la clase sucesora. En consecuencia, cuando se ejecuta el cuerpo del constructor de la clase padre, en la tabla de métodos virtuales el puntero apunta a la dirección del método de la clase base.
PD. Esto es para el eterno cholivar sobre si deberías aprender C++. Si lo estudias, escarbando en la esencia de las cosas y no empollando, estas cosas se hacen evidentes).
¿Por qué es imposible de entender? La inicialización de un puntero a un método de la tabla de métodos virtuales tiene lugar en el constructor. Primero se llama al constructor de la clase padre y luego al constructor de la clase sucesora. En consecuencia, cuando se ejecuta el cuerpo del constructor de la clase padre, el puntero apunta a la dirección del método de la clase base en la tabla de métodos virtuales.
PD. Esto es para el eterno cholivar sobre si deberías aprender C++. Si lo estudias, escarbando en la esencia de las cosas y no empollando, estas cosas se hacen evidentes).
Después de los guiones, donde todo es posible, es un poco sorprendente que "un constructor no puede ser virtual" :-))
después de los scripts, donde todo es posible, es un poco sorprendente que "un constructor no pueda ser virtual" :-)
Para tu "problema", existe una solución: https: //habr.com/ru/post/64369/.
PS. No es exactamente lo mismo, por supuesto, pero como una dirección general de pensamiento
después de los scripts, donde todo es posible, es un poco sorprendente que "un constructor no pueda ser virtual" :-)
¿inesperado?
Imagina que se llamara a HiLow::OnAttach. Si hubiera nuevos campos en HiLow y OnAttach los leyera, habría "uso de variables no inicializadas" (porque el constructor de HiLow no ha empezado a ejecutarse todavía).
POSITION_TIME_UPDATE es relevante sólo en el cambio del lote de una posición. Por ejemplo, el cierre parcial de una posición en cualquier tipo de cuenta o una recarga en la compensación.
Los cambios en los niveles SL/TP no afectan a POSITION_TIME_UPDATE.
Parafraseando, POSITION_TIME_UPDATE sólo se ve afectado por las modificaciones reflejadas en el Historial de Operaciones - trades. Los niveles SL/TP no pertenecen a dichas modificaciones, por lo que no les afectan.
Sí, de hecho, es así en una cuenta real.
Pero después de construir el Asesor Experto, lo pruebo en el probador, y resulta que en el probador, las modificaciones de los niveles SL/TP afectan POSITION_TIME_UPDATE.
Aquí hay un extracto de los registros.
Aquí he resaltado en amarillo la hora de apertura de la posición, y luego (en el siguiente tick) en rojo la hora de modificación (colocación) de SL y TP a la misma. Luego compruebo los tiempos POSITION_TIME y POSITION_TIME_UPDATE usando la impresión -son diferentes.
Cuando la modificación de SL y TP es dentro del mismo segundo, los tiempos POSITION_TIME y POSITION_TIME_UPDATE son, por supuesto, los mismos.
¡Gracias por la información!
El campo ORDER_TIME_SETUP_MSC cambia cuando las órdenes se ejecutan parcialmente.
Como consecuencia, DEAL_TIME_MSC puede ser menor que ORDER_TIME_SETUP_MSC de su orden.
Ejemplo.