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

 
Artyom Trishkin:

En OnInit() llame a la serie temporal del símbolo: iTime(Symbol,Timeframe,1);

Al principio de OnTick(), pida la barra necesaria de la serie de tiempo necesaria a través de la correspondiente iFunc(), o si( iTime(Symbol,Timeframe,10)==0) devuelva;

En este caso, el Asesor Experto no detectará una nueva barra y esperará al siguiente tick.

En OnInit() hemos solicitado los datos de la serie temporal, activando así la paginación de datos.

En OnTick() comprobamos si el historial mínimamente necesario está disponible para el EA y si aún no lo está, esperamos al siguiente tick.

Y hasta que se reciban todos los datos requeridos por el Asesor Experto, éste esperará al siguiente tick.

Tan pronto como se descarguen y obtengan todos los datos necesarios, el Asesor Experto comenzará a trabajar con la nueva barra y el historial requerido.

Para mantener los datos en serie actualizados, asegúrese de acceder a ellos al menos una vez cada dos minutos. Haga un segundo temporizador de aproximadamente un minuto y medio (90 segundos) y en él, simplemente acceda a cualquier serie de tiempo del símbolo deseado, por ejemplo iTime(Symbol,Timeframe,1); Sin comprobar los datos recibidos - sólo "mover" la historia. Así, todos los datos del símbolo estarán siempre actualizados.

Por supuesto, voy a tratar de comprobar la nueva barra utilizando todos los TFs, pero no es sincrónico, esto no es MT4. El problema no es con la barra, sino con el no funcionamiento de los indicadores que son llamados desde el indicador, que a su vez es llamado desde el Asesor Experto.

Trabajo en minutos, por lo que el historial debería estar siempre actualizado.

Y, todas estas comprobaciones se hacen para la prueba y sólo ralentizarán el trabajo en una cuenta real, porque allí todo funciona más lento que en las condiciones estacionarias del probador, repito que en una cuenta real el indicador funciona correctamente.

 

Hasta ahora he resuelto el problema comprobando la disponibilidad de los indicadores, que han fallado, antes de iniciar el código principal

//При появлении нового бара проверяем корректность расчета индикаторов
      if(isNewBar_Predv_Calc_Ind()==true)Predv_Calc_Ind=true;
      if(Predv_Calc_Ind==true)
      {
      double arr_DonUp=ZZ_Vibor(0,2,0);
      double arr_DonDown=ZZ_Vibor(0,3,0);
      double arr_DonUp_m2=ZZ_Vibor(1,2,0);
      double arr_DonDown_m2=ZZ_Vibor(1,3,0);
      double arr_DonUp_m5=ZZ_Vibor(2,2,0);
      double arr_DonDown_m5=ZZ_Vibor(2,3,0);
      double arr_DonUp_m15=ZZ_Vibor(3,2,0);
      double arr_DonDown_m15=ZZ_Vibor(3,3,0);
      if (arr_DonUp<1     || arr_DonDown<1    ||
          arr_DonUp_m2<1  || arr_DonDown_m2<1 ||
          arr_DonUp_m5<1  || arr_DonDown_m5<1 ||
          arr_DonUp_m15<1 || arr_DonDown_m15<1
         )return;
      else{Predv_Calc_Ind=false;}      
      }
//Операции выполняются только при появлении следующего бара   
   if(!isNewBar()) return;

Pero este enfoque no es universal, porque hay que listar todos los indicadores, ¿hay otro método más universal para que el entorno del probador funcione correctamente?

 
Artyom Trishkin:

En OnTick() comprobamos si el historial mínimo requerido está disponible para el Asesor Experto, y si no está disponible todavía - esperamos al siguiente tick.

Y hasta que se obtengan todos los datos requeridos por el EA, éste esperará al siguiente tick.

Tan pronto como se bombeen y obtengan todos los datos necesarios, el Asesor Experto comenzará a trabajar con la nueva barra y el historial requerido.

Cómo propones comprobar la disponibilidad del historial, no lo entiendo...

 
fxsaber:

Añade esta línea antes de la función MQL4

y funcionará en MT5.

Eso es una genialidad. ¡Muchas gracias!

 
Hola, soy un joven jubilado al que le gustaría hacer esos botones en MT5.

¿Puede decir MT5 puede implementar este tipo de botones, tal vez ya tienen uno, compartir el código ...


El botón "Iniciar " y el botón "Cerrar todas las órdenes". MT5, todos los pares, todos los plazos, 4/5 señales. Lote inicial 0,01 incluyendo centavos.
Prever el deslizamiento y las recotizaciones.

Funciones del botón "Inicio"
Una vez que haya desenvuelto manualmente el Fibo, deberá abrir de 1 a 11 órdenes a la vez en BAY o SELL al precio actual.
Si ha seleccionado previamente en los ajustes cuántas y qué órdenes (1, 2, 5, 7 o las 11) deben abrirse en la dirección del Fibo desplegado.
En los ajustes era posible especificar el tamaño de lote manual para cada orden, o aumentarlo/disminuirlo dinámicamente.

TP - Take Profit se establece en orden ascendente de 1 a 11 órdenes en los niveles de Fibo de 61,8; 78,6; 100,0;
161.8; 185.4; 200.0; 261.8; 285.0; 423.6; 561,8; 685.4

SL - Stop Loss en tamaño de - 2 spreads (calculado automáticamente) desde la línea cero del fibo.

TS - Trailing Stop arrastra todas las órdenes detrás de él.
1. El Trailing Stop mueve el SL de todas las órdenes al 38.2 + 2 spreads si el precio ha alcanzado el nivel 61.8,
2. El Trailing Stop mueve el SL de todas las órdenes restantes al nivel 50.0 + 2 spreads si el precio alcanza el nivel 100.0,
3. trailing SL de todas las órdenes restantes a 78,6+2 spreads si el precio alcanza el nivel de 161,8,
4. SL de arrastre de todas las órdenes restantes hasta el nivel de spread de 100,0+2 cuando el precio alcance el nivel de 261,8. 5.
5. SL de arrastre de todas las órdenes restantes hasta el nivel de spread de 200,0+2 cuando el precio alcance el nivel de 423,6,
6. El trailing mueve el SL de todas las órdenes restantes al nivel del spread de 423,6+2 si el precio ha llegado a 561,8;

Lafunción del botón "Cerrar todas las órdenes" es cerrar forzosamente todas las órdenes.
 

Hola, si los precios Ask y Bid de la clase CSymbolInfo están más o menos claros, cómo obtener por ejemplo SessionInterest o SessionBuyOrdersVolume o SessionPriceLimitMin, Da ceros, no entiendo por qué...

 
Александр Юрин:

Hola, si los precios Ask y Bid de la clase CSymbolInfo están más o menos claros, como obtener por ejemplo SessionInterest o SessionBuyOrdersVolume o SessionPriceLimitMin, da ceros, no entiendo por qué...

Si el servidor de negociación difunde esta información, usted la recibirá.

Por regla general, esta información la emiten los corredores de bolsa para los símbolos bursátiles (no confundir corredores y centros de negociación).

 
Vladimir Karputov:

Si el servidor de negociación difunde esta información, usted la recibirá.

Esta información suele ser emitida por los Brokers para los símbolos bursátiles (no hay que confundir Brokers y centros de negociación).

Broker Otkritie, el RTS Index Futures, asumo que debe emitir al menos el SessionPriceLimitMin y el SessionPriceLimitMax (porque son hasta donde yo entiendo los precios de apertura utilizados en las órdenes de mercado). La apertura no se traduce... Yo prescribo, por ejemplo:

Print(m_symbol.Ask()," ",m_symbol.SessionBuyOrdersVolume()); - desde su EA

Sólo obtengo los precios de Ask en el registro

Archivos adjuntos:
y2a4cgbfjw.png  63 kb
 

Por favor, ayúdenos a escribir un código que determine correctamente la fecha de la última barra con cualquier desplazamiento en cualquier TF, con precisión en el TF actual.

int              N_bar=iBarShift(Symbol(),PERIOD_CURRENT,iTime(Symbol(),PERIOD_H1,0));//номер текущего бара
datetime         StopDt=iTime(Symbol(),PERIOD_CURRENT,N_bar+1);//только для минуток и то может быть не корректно!

Print("StopDt_Shift=",TimeToString(StopDt,TIME_DATE|TIME_MINUTES));

Este código generalmente funciona, pero sólo si la hora de inicio de la barra actual coincide con la barra actual (redondeada al minuto), ya que mi gráfico actual es M1. Y si no coincide, entonces se producen diferentes percances, según los diferentes TF. Por ejemplo, necesito saber la fecha de inicio de la última barra M1 de la última hora, si eran las 12 no hay problema, la hora será las 12:59, pero si eran las 13 será las 13:58 porque la barra horaria se abrió a las 14:05 y no a las 14:00 y la funcióniBarShift devolvió la barra más cercana a las 14:00, es decir, 13:59.

Añadido: hecho esto, parece que funciona

datetime         StopDt=iTime(Symbol(),PERIOD_CURRENT,Bars(Symbol(),PERIOD_CURRENT,iTime(Symbol(),TF_iDeltaP,_Shift-1),iTime(Symbol(),PERIOD_CURRENT,0)));
 
Александр Юрин:

Otkritie broker, RTS index futures, supongo que debería emitir al menos SessionPriceLimitMin y SessionPriceLimitMax (según tengo entendido se utilizan en las órdenes de mercado por precios de apertura ). La apertura no se traduce... Yo prescribo, por ejemplo:

Print(m_symbol.Ask()," ",m_symbol.SessionBuyOrdersVolume()); - desde su EA

Sólo obtengo los precios de Ask en el registro

¿El servidor es real o una demo?