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

 
Aleksey Vyazmikin:

Por favor, ayúdenme a resolver este problema.

Supongamos que tengo un timeframe actual M1, necesito saber la hora de la última barra N de la barra dada de cualquier TF superior, la hora puede no ser de 60 minutos, sino de 45 o cualquier otra, y además hay fines de semana, necesito saber la fecha de la última barra del TF actual de cualquier TF.

¿Cómo lo hago?

Especifique el número de barra, el nombre del símbolo y el plazo requerido:

//+------------------------------------------------------------------+ 
//| Get Time for specified bar index                                 | 
//+------------------------------------------------------------------+ 
datetime iTime(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT)
  {
   if(symbol==NULL)
      symbol=Symbol();
   if(timeframe==0)
      timeframe=Period();
   datetime Time[1];
   datetime time=0; // datetime "0" -> D'1970.01.01 00:00:00'
   int copied=CopyTime(symbol,timeframe,index,1,Time);
   if(copied>0)
      time=Time[0];
   return(time);
  }

Compruebe (por si acaso) - si la función devuelve la hora D'1970.01.01 00:00:00' - entonces hay un error.

 

He encontrado un problema con una orden de venta que no se realiza

2018.05.23 12:07:55.002 Trades  '50250084': market sell 0.01 EURUSD tp: 1.17397
2018.05.23 12:07:55.112 Trades  '50250084': accepted market sell 0.01 EURUSD tp: 1.17397
2018.05.23 12:07:55.113 Trades  '50250084': market sell 0.01 EURUSD tp: 1.17397 placed for execution
2018.05.23 12:07:55.114 Trades  '50250084': rejected market sell 0.01 EURUSD tp: 1.17397 (rejected)

¿He entendido bien que el corredor aceptó la orden y luego la rechazó?

¿En qué se basa entonces y por qué no? No hay más errores en los registros. Antes de este error había más de 50 pedidos sin errores. Después de este error tampoco hemos registrado ningún error.

¿Es posible deshacerse de este problema?

 
Vladimir Karputov:

Especifique el número de la barra, el nombre del símbolo y el plazo requerido:

Compruebe (por si acaso) - si la función devuelve la hora D'1970.01.01 00:00:00' - entonces hay un error.

Yo uso esta función, ¿es peor que la que sugieres?

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
datetime iTime(string symbol,int tf,int index)
  {
   if(index < 0) return(-1);
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   datetime Arr[];
   if(CopyTime(symbol,timeframe,index,1,Arr)>0)
      return(Arr[0]);
   else return(-1);
  }

El problema es que si el timeframe actual es de 1 minuto, quiero saber el número de la última barra del timeframe actual en el timeframe seleccionado, pero ha pasado mucho tiempo (un hueco por el fin de semana o porque la sesión de la tarde cerró a las 23-50, y la siguiente abrió sólo a las 10-00), entonces me devuelve las 09:59 y no las 23:49:00, pido la hora así

datetime         StopDt=iTime(Symbol(),TF_iDeltaP,_Shift-1)-60;

Por eso preguntaba, ¿cómo conseguir este tiempo del último compás con cualquier combinación de TFs?

 
Aleksey Vyazmikin:

...

El problema es que si tengo un timeframe actual de 1 minuto, quiero saber el número de la última barra del timeframe actual en el timeframe seleccionado, ...

Al oír la frase resaltada, mi cerebro explotó.

 
Vladimir Karputov:

Al oír la frase resaltada, mi cerebro explotó.

Hay un error tipográfico, necesito la fecha de la última barra del marco temporal actual, que se refiere a la barra seleccionada del marco temporal superior.

¿Está claro?
 
Aleksey Vyazmikin:

Hay un error tipográfico, necesito la fecha de la última barra del marco temporal actual, que se refiere a la barra seleccionada del marco temporal superior.

¿Está claro?

No, no está claro. Mi cerebro sigue burbujeando y explotando :). Una barra pertenece sólo a su propio marco temporal.

 
Aleksey Vyazmikin:

Un error tipográfico, necesito la fecha de la última barra del marco temporal actual, que se refiere a la barra seleccionada del marco temporal superior.

¿Está claro?

Si he entendido bien su petición, entonces:

1. Determine la hora de cierre de la barra deseada del marco temporal superior.

2. Calcula el tiempo de la barra de la TF baja que se cierra junto con la barra de la TF alta.

3. En este marco temporal pida la barra de la TF más joven (la petición no es estricta) - obtenga la barra más cercana a la izquierda en la línea de tiempo - la que necesita.

4. Compruebe, si es necesario, que esta barra se encuentra dentro de la barra de la TF superior (excluya la variante cuando las barras de la TF junior no están presentes dentro de la barra de la TF senior por alguna razón).

 
Vladimir Karputov:

No, no es así. El cerebro sigue burbujeando y explotando :). Una barra pertenece sólo a su marco temporal.

Ok, pasando a la visualización de los pensamientos :)

En blanco mostré dónde estamos haciendo la petición, en amarillo el tiempo de barra que deberíamos obtener.

¿Está más claro? Si no es así, por favor, pregunte.

 
Aleksey Vyazmikin:

OK, pasando a la visualización de los pensamientos :)

El blanco muestra dónde estamos haciendo la petición, el amarillo el tiempo de barra que deberíamos obtener.

¿Está más claro? Si no es así, haga preguntas para aclararlo.

1. La foto es pequeña - la próxima vez pon 2m por 2m :)

2. De nuevo, no entiendo lo que quieres decir: me has mostrado un gráfico en algún marco temporal. ¿Cuál es el problema para solicitar el número de barra N en este plazo?

 
Vladimir Karputov:

1. La foto es pequeña - la próxima vez pon 2 metros por dos a la vez :)

2. No entiendo el pensamiento de nuevo - usted mostró un gráfico en algún marco de tiempo. ¿Cuál es el problema de solicitar un número de barra N en este marco temporal?

1. Puedo hacer más - no hay problema ;)

2. El plazo mostrado en la esquina superior izquierda es M5. No puedo solicitar el número de compás N ya que no sé cómo saberlo exactamente, sobre todo si el desplazamiento no es de 1 compás de la TF superior, sino de más compases.

Intentaré que el siguiente algoritmo se desplace a una barra:

1. Averigua cuántas barras han pasado desde el inicio de la TF superior actual

2. Desplaza el número obtenido en 1 bar y averigua el tiempo utilizando la función iTime