Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 765

 
Alexey Kozitsyn:

Definitivamente no se genera un evento de movimiento del ratón. Con los otros, creo que es lo mismo.

¿Y en el EA?
 
Artyom Trishkin:
¿Y en el consejero?

Lo mismo...

 
Alexey Viktorov:

La respuesta se dio antes...

Pero es mejor no de una cantidad ligera, pero sobre el máximo para tratar de conseguir con una copia.

No voy a escribir un código de ejemplo. Un programador normal sólo necesita una pista. He aquí un algoritmo aproximado:

  1. Determinamos el número aproximado de barras en las que se cruza el canal. Que sean 15.
  2. Copiar los dos buffers del indicador.
  3. Copiar los valores de las barras usando CopyRates()
  4. En el bucle, empezamos a comparar los valores del límite superior del canal y las barras altas simultáneamente con la comparación de las barras bajas con el límite inferior del canal. Si se encuentra uno de estos cruces, el índice de la barra se almacena en una variable, y se continúa buscando el segundo cruce. Salimos del bucle cuando las dos variables de las barras de intersección tienen valores.

Así, es posible encontrar dos intersecciones en una copia y un ciclo, si es necesario. Incluso no es necesario en ArraySetAsSeries() porque al encontrar el cruce es posible y, en mi opinión, mejor recordar la hora de la barra, no su número. Aunque, conociendo la hora del bar, no hay dificultad para determinar su número.

Pregunta: ¿Qué será más rápido, un ciclo con la copia del buffer del indicador en 1 valor y la copia de la barra alta en 1 y la comparación de esos valores, o una sola copia de una cierta cantidad y la comparación de los valores de las dos matrices entre sí?

Sugiero no desviarse del concepto, que, según entendí, era copiar una cierta cantidad de datos de la barra al principio del código, y luego trabajar con estos datos - ¿o sugieres una excepción?

Y, ¿qué te hace pensar que soy un programador?

No creo que sea necesario adivinar - lo que será más rápido, a veces la respuesta puede no ser obvia - sólo la experiencia puede dar una respuesta a tales preguntas.


 
Vladimir Karputov:

Acabo de escribir esto ayer:

Tarea:

en cada tick obtener los elementos "InpCountCopy" open, high, low, close y time.

La puesta en práctica:

  1. bucle de "0" a "InpCountCopy-1" - el bucle obtiene una apertura, alta, baja, cierre y tiempo a la vez.
  2. En un momento dado obtenemos elementos "InpCountCopy" en la estructura MqlRates y luego hacemos un bucle a través de la estructura.

Características:

es posible elegir cómo comprobar: en OnTick o en OnTimer (1 segundo).

Gracias, intentaré darle sentido al código.
 

Dígame por qué este código encuentra un billete que no está ya en el historial

  HistorySelect(0,TimeCurrent()); 
  for(int i=HistoryOrdersTotal()-1; i>=0; i--) {
   string OrdTick=IntegerToString(HistoryOrderGetTicket(i));
   if(OrdTick=="63425010") Print(OrdTick);
  }
2017.07.24 23:58:33.514 RE (EURGBP.m,H1)      63425010


 
Vitaly Muzichenko:

Dígame por qué este código encuentra un billete que no está ya en el historial


¿Ha intentado buscar una operación cerrada (OUT)? Hubo una orden - se puede ver.

 
Vitaly Muzichenko:

Dígame por qué este código encuentra un billete que no está ya en el historial


Así es:

Usted está buscando una Orden , y la Orden de abrir la Posición = 63425010 ya ha hecho la suya, y está en el Historial.

Y creo que el orden de los billetes y la posición de los mismos son los mismos, lo que te ha llevado a error.

Si quiere analizar una Posición, utilice PositionSelect(), y luego analice sus propiedades.

 

Lo que se necesita:

Enviamos una orden, en respuesta recibimos un ticket de posición, entonces se dibuja un objeto llamado "ticket de posición" en el gráfico (no se especifica el reemplazo). Si abrimos varias posiciones, respectivamente, hay varios objetos con nombres de tickets en el gráfico, y si luego cerramos uno de ellos, se borran todos los objetos, y sólo hay que borrar del historial el objeto con el ticket cerrado. La función de eliminación funciona en OnTrade

 
Vitaly Muzichenko:

Lo que se necesita:

Enviamos una orden, en respuesta recibimos un ticket de posición, entonces se dibuja un objeto llamado "ticket de posición" en el gráfico (no se especifica el reemplazo). Si abrimos varias posiciones, respectivamente, hay varios objetos con nombres de tickets en el gráfico, y si luego cerramos uno de ellos, se borran todos los objetos, mientras que sólo hay que borrar del historial el objeto con el ticket cerrado. La función de eliminación funciona en OnTrade


Entonces, ¿qué necesita, un ticket de una orden o un ticket de una posición?

 
prostotrader:

Entonces, ¿qué necesita, una papeleta de pedido o una papeleta de posición?

Hay que eliminar los objetos con billete que ya están en el historial, pero no los que todavía están en el mercado

Duplicado:

  HistorySelect(0,TimeCurrent()); 
  for(int i=HistoryOrdersTotal()-1; i>=0; i--) {
   string OrdTick=IntegerToString(HistoryOrderGetTicket(i));
   if(OrdTick=="63425010") Print(OrdTick);
  }
2017.07.24 23:58:33.514 RE (EURGBP.m,H1)      63425010


Razón de la queja: