Errores, fallos, preguntas - página 2301
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
Para un objeto de texto situado en High[], el punto de anclaje (propiedad OBJPROP_ANCHOR) debe estar establecido en ANCHOR_LOWER (punto de anclaje en el centro inferior).
Para un objeto de texto que se encuentra en Low[], el punto de anclaje (propiedad OBJPROP_ANCHOR) debe estar establecido en ANCHOR_UPPER (punto de anclaje en el centro superior).
O ANCHOR_CENTER para ambas ubicaciones, el punto de anclaje está centrado.
Pruébalo.
Pero eso requiere crear DOS objetos llamados, por ejemplo, Hi y Lo (extremos superior e inferior de un zigzag o extremos superior e inferior de la tendencia local real alcista o bajista) y vincularlos ambos al gráfico con los valores correspondientes de ANCHOR_LOWER y ANCHOR_UPPER. ¿No sería más fácil (de alguna manera) atar la parte superior del ZigZag - a la parte inferior previamente "atada"? Esto es más o menos lo que hice, añadiendo una línea a la función anterior
ObjectSetInteger(0,Obj,OBJPROP_ANCHOR,ANCHOR_CENTER); e introducir una "corrección de desplazamiento" en la línea de salida if(tvT) ORT(kBtT,Low[kBtT]-2*_Point,DtT,LowClr); else ORT(kBtT,High[kBtT]+2*_Point,DtT,HighClr); //
Hasta ahora parece que funciona. Gracias.
Pero eso requiere crear DOS objetos llamados, por ejemplo, Hi y Lo (extremos superior e inferior del zigzag o extremos superior e inferior de la tendencia local real alcista o bajista) y vincularlos ambos al gráfico con los valores correspondientes de ANCHOR_LOWER y ANCHOR_UPPER. ¿No sería más fácil (de alguna manera) atar la parte superior del ZigZag - a la parte inferior previamente "atada"? Esto es más o menos lo que hice, añadiendo una línea a la función anterior
ObjectSetInteger(0,Obj,OBJPROP_ANCHOR,ANCHOR_CENTER); e introducir una "corrección de desplazamiento" en la línea de salida if(tvT) ORT(kBtT,Low[kBtT]-2*_Point,DtT,LowClr); else ORT(kBtT,High[kBtT]+2*_Point,DtT,HighClr); //
Hasta ahora parece que funciona. Gracias.
¿Qué sentido tiene? Puedes cambiar el anexo en cualquier momento. ¿O me estoy perdiendo algo? Se cambia el color. Así que cambia el enlace.
Tras cerrar la ventana del visor de depuración, volver a compilar y ejecutar una única ejecución en el probador sin visualización, obtuve lo siguiente
No pude hacer nada durante 20 segundos. El botón de inicio ha estado en gris todo el tiempo.
Registros del agente.
Los registros muestran que el Probador trató de conectarse al Agente a las 01:52, pero el propio Agente (Servidor) sólo se detuvo a las 01:54. De ahí la incapacidad de conectarse y colgarse. Es un error que viene de lejos, pero al menos la causa ya está clara.
Resultados del perfilador en datos históricos
El OrderSend interno tarda un tercio del tiempo. ¿Qué causa estos resultados tan desagradables?
Resultados del perfilador en datos históricos
El OrderSend interno tarda un tercio del tiempo. ¿Qué causa estos resultados tan desagradables?
En el probador, toda la lógica de comercio está aquí, no en el servidor de comercio.
En el probador, toda la lógica de comercio está aquí, no en el servidor de comercio.
Casi tres millones de ticks y sólo 16K OrderSend. Pero estas órdenes comerciales tardan un tercio del tiempo. Y en cada tick hay cálculos en el Asesor Experto.
De ahí mi pregunta. ¿Podría ejecutar el código de OrderSend en el perfilador? ¿En qué lugar se encuentra ese inconveniente?
Supongo que si sustituyes la función estándar por la tuya propia, funcionará más rápido. Probablemente, hay algunas comprobaciones y gestos costosos en OrderSend. Por ejemplo, si no hay funciones de Historial y OnTrade* en el Asesor Experto (+ indicadores), entonces formar los registros/eventos apropiados es una pérdida de tiempo.
Entiendo que para algunas personas una carrera dura muchos minutos. Pero hay casos como el anterior: unidades de segundos, si se presta atención a la velocidad de ejecución. Y aquí resulta que lanzo Optimize durante tres horas, y de ellas una hora es OrderSend, cuyo tiempo medio de ejecución es de 69 µs (ver captura de pantalla):
He perfilado el probador muchas veces. Y ya sé dónde está el "enganche". Se trata de cálculos financieros que implican varias normalizaciones de los resultados al número de dígitos de la moneda del depósito
Escribiré mi OrderSend y lo compararé.