[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 604

 
hoz:

Pero si lo pones así:

De esta manera la señal será válida permanentemente después de la apertura de la barra y ... Hasta el infinito. ¿Para qué lo necesito? Lo principal es abrir una orden en la apertura del bar en lugar del paquete.


И ... Hasta el infinito - este es un caso especial, si su condición necesaria - fijación de la orden - no se cumplirá hoy o mañana...

Y para evitar la apertura de un paquete, basta con comprobar antes de cada apertura si el pedido está abierto o ha sido abierto durante el periodo que necesita.

 
rigonich:


En la práctica se utiliza en todas las operaciones que trabajan con órdenes. Primero hay que seleccionar la orden y luego hacer algo con ella (ver la información de la orden, enviar una orden de negociación al servidor para modificarla o cerrarla) Hay dos formas de seleccionar las órdenes en el terminal, por el ticket, que es el número asignado a la orden en el servidor que no cambia para una orden concreta, o por el número de orden (índice) con el que se almacena la orden en el terminal. Este número puede cambiar en cada tic, dependiendo de qué y cuántas órdenes se abran, fijen, cierren o eliminen.

Para trabajar con los pedidos, se implementan ciclos de evaluación de pedidos.


Sé cómo iniciar un bucle de este tipo.

for(int i=0; i<total; i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

¿Cómo puedo conseguir que una variable dé VERDADERO cuando las dos últimas operaciones son perdedoras, y FALSO cuando son rentables?

O de esta manera.

cuando las operaciones se cierran con el stop - en algún lugar debe estar activada la casilla counter.... ¿pero cómo puedo captar el momento del cierre?

 
rigonich:


Es el índice que determina la posición de la orden en el array donde se almacenan los datos de las órdenes presentes en el terminal.

Es decir,lo que está subrayado (en SELECT_BY_POS) bool OrderSelect(int index, int select, int pool=MODE_TRADES)



Entiendo correctamente que la última orden que cerré tendrá el índice 1. ¿Y después de cerrar la siguiente, el índice 2... y así con cada nueva posición cerrada? ¿Qué pasa con los totales diarios? ¿Cuentan las operaciones de ayer? o ¿se vuelve a empezar cada día?
 
lottamer:


Sé cómo iniciar ese bucle...

for(int i=0; i<total; i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

¿Cómo puedo conseguir que una variable dé VERDADERO cuando las dos últimas operaciones son perdedoras, y FALSO cuando son rentables?

O de esta manera.

cuando las operaciones se cierran con el stop - en algún lugar debe estar activada la casilla counter.... ¿pero cómo puedo captar el momento del cierre?


Hay algunas soluciones a estos problemas. La forma más fácil es pasar por todas las órdenes del bucle, buscando la que se cerró en último lugar, ver si su orden se cerró en un stop o en un beneficio, elegir su ticket, volver a empezar el bucle, si la orden con el ticket que guardó se guardó, saltarla, encontrar la que se cerró en último lugar...

P.D. Y noMODO_TRADES, sino MODO_HISTORIA.

 
pero otra pregunta ... funciónSecondsAfterOpenLastPos() . si el EA fue desactivado, ¿esta función devolverá el valor de la última operación CERRADA ayer? (no puedo comprobarlo - el mercado está estancado)
 
rigonich:


Hay algunas soluciones a estos problemas. La más fácil es probablemente la siguiente: recorre todas las órdenes del bucle, busca la que se cerró en último lugar, utiliza el stop o el profit para encontrar la orden, guarda su ticket, reinicia el bucle, si la orden con el ticket que guardaste fue seleccionada, sáltala,encuentra la que se cerró en último lugar...

P.D. Y noMODO_TRADES, sino MODO_HISTORIA.


la logica es clara.... pero para mi es imposible escribirla en mi codigo... es demasiado complicado... nunca he trabajado con bucles de fuerza bruta... simplemente no lo necesitaba... así que es un bosque oscuro :))) y los bucles que he visto no me parecen muy claros... está claro que intentan algo... y ya está.

¿Podrías ponerme el ejemplo más sencillo... pero con explicaciones, para que entienda qué pasa en el bucle y dónde?

 
lottamer:

tal vez usted puede rehacer las dos opciones de aquí https://forum.mql4.com/ru/38949/page5#434244

Función TimeOpenLastPos().

Esta función devuelve la hora de la última posición abierta.

Necesitamos una hora de apertura del último puesto CERRADO.

o

Función SecondsAfterOpenLastPos().

Esta función devuelve el número de segundos desde la última posición abierta.

Y debe ser en horas.... en lugar de segundos.

este está más cerca.

La primera opción se puede utilizar con cambios mínimos (busque el historial y lo que necesite). ¿Quieres que no abra más de una operación al día?
 
lottamer:
Pero otra pregunta... la funciónSecondsAfterOpenLastPos() . si el EA fue desactivado, ¿esta función devolverá el valor de la última operación CERRADA ayer? (no puedo comprobarlo - el mercado está estancado)


Lo hará.

Más concretamente, lo será, pero no cerrado, sino abierto.

 
rigonich:


En la práctica se utiliza en todas las operaciones que trabajan con órdenes. Primero hay que seleccionar una orden y luego hacer algo con ella (ver la información de la orden, enviar una orden comercial al servidor para modificarla o cerrarla) Hay dos formas de seleccionar las órdenes en el terminal, por ticket, que es el número asignado a la orden en el servidor que no cambia para una orden concreta, o por el número de orden (índice) en el que se almacena la orden en el terminal. Este número puede cambiar en cada tic, dependiendo de qué y cuántas órdenes se abran, fijen, cierren o eliminen.

Para trabajar con los pedidos, existen ciclos de evaluación de los mismos.


Bueno, por ejemplo, tengo una orden limitada en la apertura de D1. TP y SL pueden no funcionar durante unos días, si comprobamos que hay un pedido, estará disponible y no abriremos uno nuevo. Así que no es bueno. Así, se perderán posibles intercambios.
 
hoz:

Bueno, por ejemplo, tengo una orden limitada en la apertura de D1. TP y SL pueden no funcionar durante unos días, si comprobamos que hay un pedido... estará disponible y no abriremos uno nuevo. Así que no es bueno. Así, se perderán posibles intercambios.

A continuación, compruebe los horarios de apertura de todos los pedidos, y mire si hay alguno abierto hoy.