FORTALEZAS Por favor, ayuda - página 5

 

Alguien está mintiendo, o Michael no está aceptando las objeciones del soporte técnico, o el soporte técnico no quiere reconocer el problema.

Mikalas 2015.03.26 00:44  RU

Una vez más, servicedexk no puede reproducir el error.


alexvd2015.03.26 15:16

Código equivocado también en el primer post.

 
MigVRN:

Seamos amigos :)

Pero no inmediatamente, sino cuando la carga sea exitosa.

Tu código muestra que la función OnInit es inútil, o los desarrolladores la han fastidiado.

 
Mikalas:

Sí, bueno, ¿y si realmente no hay datos?

¿Y entonces qué? ¿Un ciclo? ¿Con cuántas iteraciones?

Aquí no hay recetas específicas...

No me gustan nada los indicadores... Esa es la única razón:

En el mismo hilo con indicadores, se ejecutan secuencialmente las demás operaciones para ese símbolo: el procesamiento de ticks y la sincronización del historial. Significa que si se ejecuta una acción sin fin en un indicador, todos los demás eventos para ese símbolo nunca se ejecutarán.

Pueden hacer que el chat, y todo lo demás, sea más lento. Por lo tanto, los utilizo sin solicitudes de cotizaciones de charlas vecinas y como proveedor de eventos personalizados. En general, trabaja sólo con lo que viene en OnCalculate().

Serj_Che:

En su código se ve que la función OnInit es inútil, o los desarrolladores la han fastidiado.

Este es su código - sólo he pegado en él lo que dijoalexvd. No he entendido por qué significa quela función OnInit es inútil.

 
alexvd:
En tu código, sólo tienes que borrar el error en la variable global is_failed justo después de ResetLastError(). De lo contrario, una vez que haya detectado un error, recibirá un mensaje al respecto

¡Bingo! Ya casi lo tienes). Hay una razón por la que se dice "confía pero verifica". El texto final se encuentra a continuación.

#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//
bool is_failed = false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
  SymbolSelect( "MIX-6.15", true );
  SymbolSelect( "RTS-6.15", true );
  SymbolSelect( "Si-6.15", true );
//---  
  ResetLastError();
//---  
  int total_bars = Bars( "MIX-6.15", PERIOD_M1 );
  if ( total_bars > 0 )
  {
    total_bars = Bars( "RTS-6.15", PERIOD_M1 );
    if ( total_bars > 0 )
    {
      total_bars = Bars( "Si-6.15", PERIOD_M1 );
      {
        if ( total_bars > 0 )
        {
           is_failed = false;
           Print( "Init OK." );
        }
        else
        {
          is_failed = true;
          Print( "Get Bars failed Si-6.15 Last error = ", string(GetLastError() ) );
        }
      }
    }
    else
    {
      is_failed = true;
      Print( "Get Bars failed RTS-6.15 Last error = ", string(GetLastError() ) );
    }
  }
  else
  {
    is_failed = true;
    Print( "Get Bars failed MIX-6.15 Last error = ", string(GetLastError() ) );
  } 
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
  ResetLastError();
//---  
 int total_bars = Bars( "MIX-6.15", PERIOD_M1 );
  if ( total_bars > 0 )
  {
    total_bars = Bars( "RTS-6.15", PERIOD_M1 );
    if ( total_bars > 0 )
    {
      total_bars = Bars( "Si-6.15", PERIOD_M1 );
      {
        if ( total_bars > 0 )
        {
          Print( "Init OK." );
          is_failed = false;
        }
        else
        {
          is_failed = true;
          Print( "Get Bars failed Si-6.15 Last error = ", string(GetLastError() ) );
        }
      }
    }
    else
    {
      is_failed = true;
      Print( "Get Bars failed RTS-6.15 Last error = ", string(GetLastError() ) );
    }
  }
  else
  {
    is_failed = true;
    Print( "Get Bars failed MIX-6.15 Last error = ", string(GetLastError() ) );
  } 
//---
   if ( is_failed )
   {
     Print( "Sorry! Get Bars failed." );
   }
   else Print( "Bingo! We done.");
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
MigVRN:

Aquí no hay recetas específicas...

No me gustan nada los indicadores... Esa es la única razón:

En el mismo hilo con indicadores se realizan secuencialmente otras acciones relativas al símbolo: el procesamiento de ticks y la sincronización del historial. Significa que si se ejecuta una acción infinita en el indicador, todos los demás eventos para este símbolo nunca se ejecutarán.

Pueden hacer que el chat, y todo lo demás, sea más lento. Por lo tanto, los utilizo sin solicitudes de cotización de los chats vecinos y como proveedor de eventos personalizados. En general, sólo trabaja con lo que viene en OnCalculate().

Este es su código - sólo he puesto lo quealexvd mencionó. No entiendo por qué se deduce quela función OnInit es inútil.

¿Qué código es el mío? No he publicado ningún código aquí.

Los indicadores no ralentizarán todo lo demás. La cuestión es que todo está desincronizado en MT5, los indicadores funcionan en sus hilos y los EAs en los suyos. El vaso está solo.

A mí tampoco me gustan los indicadores, pero tengo que usarlos de vez en cuando.

 
Dima_S:

¡Bingo! Ya casi lo tienes). Dicen que hay que confiar pero verificar por una razón. El texto final se encuentra a continuación.

¿Por qué se repite en OnCalculate lo que había en OnInit? ¿Es un hechizo de este tipo?)
 
Serj_Che:

¿Cuál es mi código? No he publicado ningún código aquí.

OH... Lo siento, me confundí con Dima_S.

Serj_Che:

No voy a frenar todo lo demás por los indicadores. El caso es que todo está desincronizado en MT5, los indicadores funcionan en su hilo y los EAs en el suyo. El vaso está solo.

A mí tampoco me gustan los indicadores, pero tengo que usarlos de vez en cuando.

Los indicadores funcionan en sus hilos... Pero el chat funciona en este flujo. Si algo va mal en un indicador (un bucle eterno enOnCalculate()) el Asesor Experto que se ejecuta en su "propio" hilo no verá nada del chat...

 
MigVRN:

OOO... Lo siento, me he confundido con Dima_S.

Los indicadores están funcionando en su hilo... Sólo el chat funciona en el mismo hilo. Y si algo va mal en un indicador (un bucle eterno enOnCalculate()) el Asesor Experto que se ejecuta en "su" hilo no verá nada de ese chat...

Dudo, incluso me inclino a pensar que no es así, el Asesor Experto debería funcionar por sí mismo. Yo no he tenido ningún problema de este tipo, pero si quieres, puedes comprobar este extremo.

 
Serj_Che:

Lo dudo, incluso me inclino a pensar que no, el EA debería funcionar por sí mismo. No ha habido tales chanchullos específicamente, pero se puede comprobar tal extremo si se quiere.

Voy a esbozar el código de comprobación. Lo comprobaré en 2-3 horas. Pero el hecho de que si el indicador 1 del chat "se ralentiza" entonces los demás se ralentizan con él - es un hecho con el que he experimentado repetidamente.
 
MigVRN:
Haré un esbozo de código de prueba. En unas 2-3 horas. Pero si un indicador del chat se "ralentiza", los demás se ralentizan con él; es un hecho al que me he enfrentado más de una vez.

Vale, ¡interesante!

Los indicadores trabajan en su propio hilo, los EAs en su propio hilo. A menos que, por supuesto, sea una piedra de núcleo único.