Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 578

 
PolarSeaman:

No se me ocurrió a mí mismo"Sólo asegúrese de actualizar los datos en OnTimer() para que su código funcione. "

¿Cómo debo hacerlo?

¿Tiene un horario fuera de línea?

 
¿Puedes decirme cómo obtener los indicadores de fondo de un marco temporal distinto al que el búho está rondando?
 
Galim_V:
¿Puedes decirme cómo obtener los indicadores de fondo de un marco temporal distinto al que el búho está rondando?

1. ¿Por qué colgaste el pájaro? ¿No es una pena?

2. ¿Has abierto alguna vez la ayuda? Recibir los datos del indicador en el Asesor Experto desde cualquier marco temporal no es un problema en absoluto porque los dos primeros parámetros de las funciones de recepción de datos del indicador se utilizan para especificar el símbolo y el período del gráfico desde el que se quieren recibir los valores.

De hecho, incluso cuando se escribe el código en el editor, se abre la lista de variables formales de la función, y un tooltip muestra allí el símbolo y el plazo. Es extraño que no les hayas prestado atención.

 
Artyom Trishkin:

¿Tiene un horario fuera de línea?

No.

 
PolarSeaman:

No.

Entonces, ¿por qué la actualización constante sin necesidad?

¿Necesitas tiempo? Puede obtener la hora del último tick: TimeCurrent(), o la última hora local: TimeLocal().

Si obtiene la hora del último tic del fin de semana, el temporizador no le servirá: la hora será el último tic del viernes, o el último tic del último día laborable. Y TimeLocal() no te dará la hora del servidor - tienes que recalcularla con un offset.

Sin embargo, no sé exactamente lo que quieres conseguir al final.

 
Artyom Trishkin:

1. ¿Por qué colgaste el pájaro? ¿No es una pena?

2. ¿Has abierto alguna vez la ayuda? Recibir los datos del indicador en el Asesor Experto desde cualquier marco temporal no es un problema en absoluto porque los dos primeros parámetros de las funciones de recepción de datos del indicador se utilizan para especificar el símbolo y el período del gráfico desde el que se quieren recibir los valores.

De hecho, incluso cuando se escribe el código en el editor, se abre la lista de variables formales de la función, y un tooltip muestra allí el símbolo y el plazo. Es extraño que no les hayas prestado atención.

2018.07.04 22:17:38.398 2016.11.10 13:00:00 Arap01 EURUSD,H1: Redondeo 44.53781512605145 45.0 Son datos estocásticos en modo "normal":

2=iStochastic(NULL,0,K,D,slowing,Average_method,price_field,MODE_MAIN,2);

aquí pido M5 2=iStochastic(NULL,5,K,D,slowing,Average_method,price_field,MODE_MAIN,2);

Me sale 2018.07.04 22:23:05.680 2016.11.10 13:00:00 Arap01 EURUSD,H1: Redondeo 0.0 0.0



 
Artyom Trishkin:

Sin embargo, no sé exactamente con qué quieres acabar.

Alerta, quiero, dos segundos antes de que se cierre la barra. No trabajaré durante el fin de semana.

 
PolarSeaman:

Así que necesito una alerta dos segundos antes de que la barra se cierre sin un tick.

No es fácil de hacer, es necesario ejecutar un temporizador más preciso (al menos 500 ms) y previamente hacer la sincronización de la hora local y la hora del servidor.
Ya te he hablado de esto:

En el momento de la llegada del tick, contar la diferencia TimeCurrent()-TimeLocal()
(esto se hace una vez para sincronizar la hora local y la del servidor)

- Este es el desplazamiento relativo al corredor, si este desplazamiento cambia más tarde, el tiempo debe ser recalculado;
- en el inicio del Asesor Experto (oen la aparición de la barraD1) volvemos a calcular todos los tiempos necesarios, en la hora local, teniendo en cuenta el desplazamiento;
- Esperamos lo que "contamos" en el temporizador, comprobando la desincronización, la pérdida de conexión con el corredor, la traducción de las manos locales.

puedes coger +/- 1 segundo
 
Taras Slobodyanik:

No es fácil de hacer, tienes que ejecutar un temporizador más preciso (al menos 500ms) y pre-sincronizar la hora local con la hora del servidor.
Ya te lo he contado:

Puedes coger +/- 1 segundo

Gracias. Cómo hacer el tiempo en segundos, antes de que la barra M5 se cierre. Ahora mismo está mostrando H1.

#property strict
#property indicator_chart_window
//--- input parameters
#define  MILLISEC_TIMER_INTERVAL         500 
int            timeOffset;
datetime       ServerLocalOffset;
datetime       prevTime,myTime,localtime;
bool           newBar = false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   EventSetMillisecondTimer(MILLISEC_TIMER_INTERVAL);
   
  datetime srvtime,tmpOffset;
   RefreshRates();
   srvtime = TimeCurrent();
   // Modified
   localtime = TimeLocal()+TimeGMTOffset();
   if(TimeHour(srvtime)>TimeHour(localtime)){
      // Server Time is still ahead of us
      int newOffset = TimeHour(srvtime)-TimeHour(localtime);
      ServerLocalOffset = (newOffset*60*60);
   }else if(TimeHour(srvtime)<TimeHour(localtime)){
      // Server Time is Behind us
      int newOffset = TimeHour(localtime)-TimeHour(srvtime);
      ServerLocalOffset = (newOffset*60*60);
   }else{
      // No modification required
      ServerLocalOffset = srvtime;
   }
   localtime = TimeLocal()-ServerLocalOffset;
   
   tmpOffset = TimeSeconds(srvtime) - TimeSeconds(localtime);
   if(tmpOffset < 30 && tmpOffset >= 0){
      timeOffset = TimeSeconds(srvtime) - TimeSeconds(localtime);
   }
   return(INIT_SUCCEEDED);
  }
  
void OnDeinit(const int reason)
  {
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
datetime sec;
   datetime localtime;
   localtime = TimeLocal()+(TimeGMTOffset()+(60*60));
 sec=Time[0]-localtime-timeOffset;
 if(sec<=2){Alert("время откр. бара ",Time[0]);}
      Comment(TimeToStr(sec,TIME_SECONDS ));
  }
//+------------------------------------------------------------------+
 
Todavía no he descubierto cómo contar los segundos hasta que la barra se cierra en el período actual. Ayuda.
Razón de la queja: