Funciones útiles de KimIV - página 126

 
khorosh:
Ponte en su lugar. La vida en un país extranjero, lejos de su patria, no desaparece. Estoy irritado, enfadado conmigo mismo por haber cometido un error irreparable al hacerme trabajador invitado).
La comprobación de errores funciona correctamente, pero hasta ahora no hay errores, a pesar de los numerosos intentos de impedir el funcionamiento normal. Disponer de una protección suficiente contra todas las contingencias posibles. De nuevo, ¡el futuro lo demostrará!
 
artmedia70:

Hice deliberadamente if(OrderSelect(i,SELECT_BY_POS)) un bloque separado. Para devolver el valor del error durante la depuración. else {// escriba el error de selección como quiera y regrese de él, por ejemplo EMPTY}.

Y pensemos en una situación en la que se produce un error de selección de una orden a colocar en el mercado. Vamos a discutirlo. Todavía no me he encontrado con ninguno.

Roger:

Y mencione al menos una razón por la que un bucle de pedido correctamente creado puede devolver "falso".

Oops, no me di cuenta de que Artem ya había preguntado, oops. Y sin embargo.

¿Qué diferencia hay?

En el caso general puede volver. ¿Y qué pasa si la observación de algunas condiciones o incluso de un conjunto de condiciones diferentes muestra que no devuelve falso?

No conocemos los detalles de la implementación de esta función y la documentación no proporciona ninguna "suposición" al respecto. ¿Qué pasa si, en el siguiente conjunto de condiciones en el siguiente corredor, la función devuelve repentinamente falso?

Aún así, responderé a la pregunta planteada sobre la razón/situación, porque es fácil: la razón podría ser un error de implementación de esta función cometido por el equipo de desarrollo cuando se lanzó la siguiente versión de MT. Espero que sea un evento lo suficientemente probable como para ser considerado seriamente.

Supongamos que, debido a este hipotético fallo, la función comenzara aleatoriamente, pero, de media, sólo por cada 5 peticiones, a devolver falso.

Normalmente no se puede pensar en cosas de antemano que no se saben. Así que no tiene mucho sentido preguntar a qué puede deberse. Cuando ocurra, entonces podrá explicar fácilmente por qué.

Pero no saber lo que puede ocurrir en el futuro no impide defenderse de ello. Puede resultar que algunos algoritmos de alto nivel den muchos problemas debido a un valor falso recibido. No sabrán que el valor es falso.

Pero si saben que no hay valor y si lo hay, es cierto, no se harán un lío si no hay errores propios. Y es por eso que la información sobre la imposibilidad de calcular el valor debe darse no sólo en el modo de depuración, sino también en el modo de combate.

 

¿Es posible cargar datos externos en el indicador, por ejemplo, desde un archivo de texto?

Por ejemplo, ¿hay un precio diario y necesita construir una línea en cualquier gráfico de marco temporal?

FECHA Precio

04.12.2014 100.00

03.12.2014 101.12

02.12.2014 102.45

01.12.2014 103.23

28.11.2014 102.43

27.11.2014 101.90

 
Buenas características, gracias a Igor por su duro trabajo.
 
KimIV:

Ejemplos de uso de la función OpenPosition().

1. Comprar 0,1 lote del instrumento actual

2. Vender 0,2 lotes de EURUSD

3. Vender 0,12 lotes de USDCAD con un stop de 20 pips

4. Comprar 0.15 lote de USDJPY con 40 pips de stop

5. Vender 0.1 lote de GBPJPY con stop 23 y takeaway 44 pips

Se adjunta el script para probar la función OpenPosition(). Los 4 primeros ejemplos están comentados.
No sé si me contestarán o no. Estoy aquí sentado, no sé cómo hacer que mi EA sea multidivisa.
 
logut:
No sé si me contestarás o no, estoy aquí sentado, estoy perplejo, no sé cómo hacer que mi EA sea multidivisa.
Dmitry, suelo anotar toda la lógica en un papel. Qué hacer y cuándo, y con qué.
 
Roger:

Y dame una razón por la que un bucle de pedido correctamente creado pueda devolver "false".

Oops, no me di cuenta de que Artem ya había preguntado, oops. Y sin embargo.

¡Fácil!

Después de otra actualización el terminal se recargó y sólo empezó a mostrar los pedidos del último día. No se puede ver el historial de pedidos. La función debería devolver algo, como que no hay historia.

El corredor borró algunas órdenes.

Hay un agujero en la memoria principal. Tu memoria se ha colapsado y la función está tomando una celda de memoria basura. Puede aparecer en el monitor. Puede aparecer o no. Puede haber otros problemas de hardware.

El terminal se reinicia y "pierde" la comunicación con el servidor. Solía usar Mt3 usando un servidor proxy. Solía tener internet de acceso telefónico con un ancho de banda y un tiempo muy limitados y la calidad de internet era horrible. Veo que vienen ticks y el gráfico se mueve. Cuando intenté abrir una orden el terminal intentó escribir "no hay conexión con el servidor".

Me enfrenté a un problema en MT4 y sigue existiendo: tengo un tick y una pantalla de gráfico negra (vacía). Si saco el gráfico con el ratón o el robot da un error, aparecerá un mensaje de error y el robot se bloqueará. Si saco el gráfico con el ratón o viene un nuevo tick, todo es normal. Por lo tanto, al dividir, primero compruebo entre qué hay que dividir y si no es igual a cero, ¡sigo adelante!

 

Estimado KimIV, estoy utilizando su función para cerrar todas las posiciones cuando se ha alcanzado un determinado beneficio y me he encontrado con una situación en la que una orden pendiente ha activado otra posición que no se ha cerrado. Ahora he implementado la comprobación adicional de tal situación y la llamada repetida de su función. ¿Cree que esta mejora debería aplicarse dentro de la función una vez finalizado el ciclo de cierre principal?

Se trata de las funciones ClosePosBySortLots() y ClosePositions();

 

Existen códigos de función para eliminar las órdenes pendientes tanto para las pruebas en línea como para las pruebas de historial - https://forum.mql4.com/ru/38949#434195

¿podría explicar la diferencia entre las pruebas y los exámenes en línea?

 
Las funciones isCloseLastPosByStop() y isCloseLastPosByTake() no siempre funcionan correctamente, porque el precio de cierre de la orden y el Stop Loss (TakeProfit) no siempre coinciden. Lo he rehecho en el mío. He sustituido la condición de igualdad de estos valores por la condición: el valor absoluto de la diferencia de estos valores (entre comillas de 5 bits) debe ser menor que 5*Punto.
Razón de la queja: