FORTS Veuillez nous aider - page 7

 
Continuer à cacher le code ?
 
barabashkakvn:
Continuer à cacher le code ?

Est-ce que tu lis au moins les messages ?

Mikalas2015.03.26 18:56RU

Vous avez crié et les avez appelés chukchi, mais le problème n'a pas été résolu !

//+------------------------------------------------------------------+
//|                                                         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);
  }

Je n'ai pas encore écrit le téléchargement de l'historique, mais les données sont dans le terminal, et elles n'en sortent PAS du premier coup !

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 poche|modifier|supprimer

 

Quelqu'un peut-il m'expliquer ?

Pourquoi la fonction avec l'identifiant SERIES_TERMINAL_FIRSTDATE, quand il y a des données

dans le terminal renvoie FALSE ?

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

Quelqu'un peut-il m'expliquer ?

Pourquoi la fonction avec l'identifiant SERIES_TERMINAL_FIRSTDATE, quand il y a des données

dans le terminal renvoie FALSE ?

5 sec. Je vais ajouter quelques liens...
 
MigVRN:
5 sec. Je vais ajouter quelques liens...

A partir de l'aide Organiser l'accès aux données --> Exemple de script pour télécharger l'historique :

Если мы успешно прошли все проверки, то сделаем последнюю попытку обойтись без обращения к торговому серверу. Сначала узнаем начальную дату, для которой доступны минутные данные в формате 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:

Tout se passe exactement comme indiqué dans la documentation. :)

Esquisse d'un indicateur et d'un Expert Advisor pour vérification + le résultat sur la vidéo.

1) Tout d'abord, je l'envoie sur le graphique du conseiller expert qui contient la fonction OnTick qui fonctionne pendant 20 secondes.

Le résultat est que le graphique continue de fonctionner et affiche tout comme il se doit. Le graphique fonctionne également comme prévu.

2) Ensuite, nous appliquons au graphique l'indicateur qui a la fonctionOnCalculate pendant 20 secondes.

Résultat : le chat se bloque. En même temps, le prochain chat portant le même symbole et ayant une période différente est également suspendu. Le verre continue de fonctionner comme il le devrait. Une fois que la fonction a fonctionné, tout revient à la normale.

3) La vidéo ne le montre pas - mais si vous lancez un indicateur sur un chat (réglé sur 60 sec), et un EA sur l'autre - l'EA ne commence pas à fonctionner jusqu'à ce que l'indicateur fonctionne mal sur un autre chat !

J'ai joint la vidéo séparément - elle est ralentie dans mon navigateur.

Sans blague, où est passé le multithreading ? !

Tant que l'indicateur ne fonctionne pas, les ticks n'atteignent pas l'EA !

 
Serj_Che:

Où est passé le multithreading ? !

Tant que l'indicateur ne fonctionne pas, les ticks n'atteignent pas l'EA !

Les tics n'arrivent pas sur le téléscripteur, ils n'apparaissent pas sur le graphique.
 
Serj_Che:

Où est passé le multithreading ? !

Tant que l'indicateur ne fonctionne pas, les ticks n'atteignent pas l'EA !

Ça a toujours été comme ça.

Mikalas:
Les offres arrivent jusqu'à la coupe, mais ça n'apparaît pas sur le graphique.

Les ticks de l'EA ne fonctionnent pas. Et tout le reste sur le chat. Je n'ai pas vérifié les minuteurs et les événements personnalisés.

Mikalas:

Aide Organisation de l'accès aux données --> Exemple de script de chargement de l'historique :

Aussi de l'aide.

...Les fichiers de service au format HCC servent de source de données pour construire les données de prix pour les périodes demandées au format HC. Les données au format HC sont des séries chronologiques, qui sont préparées au maximum pour un accès rapide. Ils sont créés uniquement à la demande d'un graphique ou d'un programme mql5 dans un volume ne dépassant pas le paramètre "Max bars in charts", et sont sauvegardés pour une utilisation ultérieure dans des fichiers avec l'extension hc.

Afin d'économiser les ressources, les données de l'échéancier sont chargées et stockées dans la RAM uniquement lorsque cela est nécessaire. En cas d'absence prolongée de demandes, les données sont déchargées de la RAM et sauvegardées dans un fichier. Les données pour chaque période sont préparées indépendamment des données prêtes pour les autres périodes. Les règles de préparation et de disponibilité des données sont les mêmes pour toutes les périodes. C'est-à-dire que, malgré le fait que l'unité de stockage des données dans le format HCC est une barre de minutes, la disponibilité des données dans le format HCC ne signifie pas la disponibilité et l'accessibilité des données du format HC pour la période M1 dans le même volume.

 
Mikalas:

Quelqu'un peut-il m'expliquer ?

Pourquoi la fonction avec l'identifiant SERIES_TERMINAL_FIRSTDATE, quand il y a des données

dans le terminal renvoie FALSE ?

Parce que c'est la première fois qu'il accède à cette série particulière.
 
Mikalas:

À partir de l'aide de Data Access Organisation --> Exemple de script pour télécharger l'historique :

Et voilà. Vous êtes sur la bonne voie. Pour vérifier comment le terminal fonctionne exactement, plutôt que comme vous l'imaginez, un algorithme simple de vérification.

  • Ouvrez un tableau "MIX-6.15 M1" dans le terminal. Sur le graphique se trouve l'indicateur du premier message.
  • Ouvrez "Open Data Catalog" depuis le terminal.
  • Recherche de l'historique du symbole "MIX-6.15" de cette manière ...\Terminal\D0*******CF37AD**55**0E51F**75\bases\Open-Demo\history
  • Déchargez la borne.
  • Supprimez le dossier "MIX-6.15".
  • Démarrer le terminal. Nous voyons l'erreur. Une petite blague sur le graphique - changez plusieurs fois de cadre temporel. Par exemple, changez plusieurs fois M1 et M5. L'erreur disparaît. Cela signifie que les données d'une autre période (différente de celle qui est demandée dans le code) ont été préparées. Si vous ne souhaitez pas modifier les délais manuellement, vous devez préparer les données vous-même.
  • Rechargez le terminal - pas d'erreur.
  • Si ce n'est pas clair, répétez l'expérience.