FORTALEZAS Por favor, ayuda - página 7

 
¿Seguir ocultando el código?
 
barabashkakvn:
¿Seguir ocultando el código?

¿Acaso lees los mensajes?

Mikalas2015.03.26 18:56RU

Gritaste y los llamaste chukchi, ¡pero el problema no está resuelto!

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#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;
datetime start_time;
datetime end_time;
int mix_bars, rts_bars, si_bars;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
    start_time = StringToTime( "2015.03.17" );
    end_time = TimeCurrent();
//--- indicator buffers mapping
  mix_bars = GetBars( "MIX-6.15" , PERIOD_CURRENT, start_time, end_time ); 
  if ( mix_bars < 1 )
  {
    is_failed = true;
    Print( "Init failed. MIX-6.15 ");
  }
  rts_bars = GetBars( "RTS-6.15" , PERIOD_CURRENT, start_time, end_time ); 
  if ( rts_bars < 1 )
  {
    is_failed = true;
    Print( "Init failed. RTS-6.15 ");
  }
  si_bars = GetBars( "Si-6.15" , PERIOD_CURRENT, start_time, end_time ); 
  if ( si_bars < 1 )
  {
    is_failed = true;
    Print( "Init failed. Si-6.15 ");
  }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator Get bars function                               |
//+------------------------------------------------------------------+
int GetBars( string symbol, ENUM_TIMEFRAMES period, const datetime start_date, const datetime end_date )
{
  if ( !SymbolInfoInteger( symbol, SYMBOL_SELECT ) )
  {
    ResetLastError();
//---    
    if ( GetLastError() != ERR_MARKET_UNKNOWN_SYMBOL )
    {
      SymbolSelect( symbol, true );
    }
    else
    {
      Print( "GetBars: Неизвестный символ - ", symbol );
      return( 0 );
    }    
  }
//---  
  if ( MQL5InfoInteger( MQL5_PROGRAM_TYPE ) == PROGRAM_INDICATOR && Period() == period && Symbol() == symbol )
  {
    Print( "GetBars: Не пройдена проверка типа программы!" );
    return( 0 );
  }  
//---
  if ( SymbolIsSynchronized( symbol ) )
  {
    return( Bars( symbol, period, start_date, end_date ) );
  }
  else
  {
    long first_date = 0;
    datetime times[1];
//---    
    if ( SeriesInfoInteger( symbol, PERIOD_M1, SERIES_TERMINAL_FIRSTDATE, first_date ) )
    {
      if ( first_date > 0 )
      {
//--- force timeseries build
        CopyTime( symbol, period, datetime( first_date ) + PeriodSeconds( period ), 1, times );
//--- check date
        if ( SeriesInfoInteger( symbol, period, SERIES_FIRSTDATE, first_date ) )
//---        
        if ( first_date > 0 && first_date <= long( start_date ) )
        {
          return( Bars( symbol, period, start_date, end_date ) );
        } 
      }
    }
    Print( "Необходима загрузка истории с сервера!");
  }       
//---  
  return( 0 );
}  
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   if ( is_failed )
   {
     Print( "Sorry! Get Bars failed." );
   }
   else Print( "Bingo! We done.");
//--- return value of prev_calculated for next call
   return(rates_total);
  }

Todavía no he escrito la descarga del historial, pero los datos están en el terminal, ¡y NO salen de él a la primera!

2015.03.26 20:49:01.641 Test (MIX-6.15,M1)      Необходима загрузка истории с сервера!
2015.03.26 20:49:01.641 Test (MIX-6.15,M1)      Init failed. RTS-6.15 
2015.03.26 20:49:01.641 Test (MIX-6.15,M1)      Необходима загрузка истории с сервера!
2015.03.26 20:49:01.641 Test (MIX-6.15,M1)      Init failed. Si-6.15 
2015.03.26 20:49:01.641 Test (MIX-6.15,M1)      Sorry! Get Bars failed. 

en el bolsillo|editar|borrar

 

¿Puede alguien explicarlo?

Por qué la función con identificador SERIES_TERMINAL_FIRSTDATE, cuando hay datos

en el terminal devuelve FALSE?

SeriesInfoInteger( symbol, PERIOD_M1, SERIES_TERMINAL_FIRSTDATE, first_date )
 
Mikalas:

¿Puede alguien explicarlo?

Por qué la función con identificador SERIES_TERMINAL_FIRSTDATE, cuando hay datos

en el terminal devuelve FALSE?

5 seg. Voy a poner algunos enlaces...
 
MigVRN:
5 seg. Voy a poner algunos enlaces...

Desde la Ayuda Organizar el acceso a los datos --> Script de ejemplo para descargar el historial:

Если мы успешно прошли все проверки, то сделаем последнюю попытку обойтись без обращения к торговому серверу. Сначала узнаем начальную дату, для которой доступны минутные данные в формате HCC.
Запросим это значение функцией SeriesInfoInteger() с модификатором SERIES_TERMINAL_FIRSTDATE и опять сравним со значением параметра start_date.

   if(SeriesInfoInteger(symbol,PERIOD_M1,SERIES_TERMINAL_FIRSTDATE,first_date))
     {
      //--- there is loaded data to build timeseries
      if(first_date>0)
        {
         //--- force timeseries build
         CopyTime(symbol,period,first_date+PeriodSeconds(period),1,times);
         //--- check date
         if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date))
            if(first_date>0 && first_date<=start_date) return(2);
        }
     }
 
 
MigVRN:

Todo sucede exactamente como dice la documentación. :)

Esbozado un indicador y un Asesor Experto para comprobar + el resultado en el video.

1) Primero lanzo un Asesor Experto en el gráfico que tiene una función dentro del OnTick que funciona durante 20 segundos.

El resultado es que el gráfico sigue funcionando y muestra todo como debe ser. El gráfico también funciona como se esperaba.

2) Luego aplicamos al gráfico el indicador que tiene la funciónOnCalculate durante 20 segundos.

El resultado: el chat se cuelga. Al mismo tiempo, el siguiente chat con el mismo símbolo que tiene un periodo diferente también se suspende. El cristal sigue funcionando como debe. Una vez que la función ha funcionado, todo vuelve a la normalidad.

¡3) El video no lo muestra - pero si usted lanza un indicador en un chat (fijado 60 seg), y un EA en el otro - el EA no comienza a trabajar hasta que el indicador funciona mal en otro chat!

Adjunto el vídeo por separado - se ralentiza en mi navegador.

No me digas, ¿dónde está el multithreading?

Hasta que el indicador no funcione, los ticks no llegan al EA.

 
Serj_Che:

¡¿Dónde demonios se ha metido el multihilo?!

Hasta que el indicador no funcione, los ticks no llegan al EA.

Los ticks no llegan al ticker, simplemente no aparecen en el gráfico.
 
Serj_Che:

¡¿Dónde demonios se ha metido el multihilo?!

Hasta que el indicador no funcione, los ticks no llegan al EA.

Siempre ha sido así.

Mikalas:
Las ofertas están llegando a la copa, sólo que no aparece en el gráfico.

Los ticks del EA no funcionan. Y todo lo demás en el chat. No he comprobado el temporizador ni los eventos personalizados.

Mikalas:

De la ayuda Organización del acceso a los datos --> Ejemplo de script para cargar el historial:

También de ayuda.

...Los archivos de servicios en formato HCC actúan como fuente de datos para construir los datos de precios para los plazos solicitados en formato HC. Los datos en el formato HC son series temporales, que están preparadas al máximo para un acceso rápido. Se crean sólo a petición de un gráfico o programa mql5 en el volumen que no exceda el parámetro "Barras máximas en los gráficos", y se guardan para su posterior uso en archivos con la extensión hc.

Para ahorrar recursos, los datos del marco temporal se cargan y almacenan en la RAM sólo cuando se necesitan. En caso de ausencia prolongada de solicitudes, los datos se descargan de la RAM guardándolos en un archivo. Los datos de cada marco temporal se preparan independientemente de los datos listos para otros marcos temporales. Las normas de preparación y disponibilidad de los datos son las mismas para todos los plazos. Es decir, a pesar de que la unidad de almacenamiento de datos en el formato HCC es una barra de minutos, la disponibilidad de los datos en el formato HCC no significa la disponibilidad y accesibilidad de los datos del formato HC para el marco temporal M1 en el mismo volumen.

 
Mikalas:

¿Puede alguien explicarlo?

Por qué la función con identificador SERIES_TERMINAL_FIRSTDATE, cuando hay datos

en el terminal devuelve FALSE?

Porque es la PRIMERA vez que accede a esta serie en particular.
 
Mikalas:

Desde la Ayuda de la Organización de Acceso a Datos --> Script de ejemplo para descargar el historial:

Ahí lo tienes. Vas por buen camino. Para comprobar cómo funciona exactamente el terminal, en lugar de cómo te lo imaginas, un simple algoritmo de comprobación.

  • Abra una carta "MIX-6.15 M1" en el terminal. En el gráfico está el indicador del primer post.
  • Abra "Open Data Catalog" desde el terminal.
  • Buscando la historia en el símbolo "MIX-6.15" de esta manera ...\NTerminal\D0*******CF37AD**55**0E51F**75\Nbases\NApertura-Demo\Nhistoria
  • Descarga de la terminal.
  • Borre la carpeta "MIX-6.15".
  • Arranca el terminal. Vemos el error. Una pequeña broma en el gráfico - cambiar el marco de tiempo varias veces. Por ejemplo, cambiar M1 y M5 varias veces. El error desaparece. Significa que se han preparado datos de otro marco temporal (diferente al que se solicita en el código). Si no quiere cambiar los plazos manualmente, debe preparar los datos usted mismo.
  • Recarga el terminal - no hay error.
  • Si no está claro, repite el experimento.