FORTS Bitte helfen Sie - Seite 7

 
Den Code weiter verstecken?
 
barabashkakvn:
Den Code weiter verstecken?

Lesen Sie die Beiträge überhaupt?

Mikalas2015.03.26 18:56RU

Sie haben geschrien und sie Chukchi genannt, aber das Problem ist nicht gelöst!

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

Ich habe den Verlaufsdownload noch nicht geschrieben, aber die Daten sind im Terminal, und sie kommen beim ersten Mal NICHT aus dem Terminal heraus!

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. 

in die Tasche stecken|bearbeiten|löschen

 

Kann mir das bitte jemand erklären?

Warum die Funktion mit SERIES_TERMINAL_FIRSTDATE-Bezeichner, wenn es Daten gibt

im Terminal FALSE zurückgibt?

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

Kann mir das bitte jemand erklären?

Warum die Funktion mit SERIES_TERMINAL_FIRSTDATE-Bezeichner, wenn es Daten gibt

im Terminal FALSE zurückgibt?

5 Sek. Ich werde ein paar Links einfügen...
 
MigVRN:
5 Sek. Ich werde ein paar Links einfügen...

Aus der Hilfe Datenzugriff organisieren --> Beispielskript für das Herunterladen der Historie:

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

Alles geschieht genau so, wie es in der Dokumentation steht. :)

Skizzierte einen Indikator und einen Expert Advisor zur Überprüfung + das Ergebnis auf dem Video.

1) Zuerst werfe ich einen Expert Advisor auf den Chart, der eine Funktion innerhalb des OnTick hat, die für 20 Sekunden arbeitet.

Das Ergebnis ist, dass das Diagramm weiterhin funktioniert und alles so anzeigt, wie es sein sollte. Auch das Diagramm funktioniert wie erwartet.

2) Dann wenden wir auf das Diagramm den Indikator an, der die FunktionOnCalculate für 20 Sekunden hat.

Das Ergebnis: Der Chat bleibt hängen. Gleichzeitig wird der nächste Chat mit demselben Symbol, der einen anderen Zeitraum hat, ebenfalls ausgesetzt. Das Glas funktioniert weiterhin wie es soll. Nachdem die Funktion funktioniert hat, ist alles wieder normal.

3) Das Video zeigt es nicht - aber wenn Sie einen Indikator auf einen Chat werfen (60 Sek. eingestellt) und einen EA auf den anderen - beginnt der EA nicht zu arbeiten, bis der Indikator auf einem anderen Chat versagt!

Ich habe das Video separat angehängt - es verlangsamt sich in meinem Browser.

Ohne Scheiß, wo ist das Multithreading hin?!

Solange der Indikator nicht funktioniert, erreichen die Ticks den EA nicht!

 
Serj_Che:

Wo zum Teufel ist das Multithreading geblieben?!

Solange der Indikator nicht funktioniert, erreichen die Ticks den EA nicht!

Die Ticks gelangen nicht in den Ticker, sie werden nur nicht im Diagramm angezeigt.
 
Serj_Che:

Wo zum Teufel ist das Multithreading geblieben?!

Solange der Indikator nicht funktioniert, erreichen die Ticks den EA nicht!

Das war schon immer so.

Mikalas:
Die Gebote erreichen die Tasse, sie werden nur nicht in der Tabelle angezeigt.

Die Ticks des EA funktionieren nicht. Und alles andere im Chat. Ich habe Timer und benutzerdefinierte Ereignisse nicht überprüft.

Mikalas:

Hilfe Organisation des Datenzugriffs --> Beispiel für ein Skript zum Laden der Historie:

Auch von Hilfe.

...Die Servicedateien im HCC-Format dienen als Datenquelle für die Erstellung der Preisdaten für die gewünschten Zeiträume im HC-Format. Bei den Daten im HC-Format handelt es sich um Zeitreihen, die maximal für den schnellen Zugriff aufbereitet sind. Sie werden nur auf Anforderung eines Diagramms oder mql5-Programms in der Menge erstellt, die den Parameter "Max bars in charts" nicht überschreitet, und werden zur weiteren Verwendung in Dateien mit der Endung hc gespeichert.

Um Ressourcen zu sparen, werden die Daten des Zeitfensters nur bei Bedarf in den Arbeitsspeicher geladen und gespeichert, und bei längerer Abwesenheit von Anfragen werden die Daten aus dem Arbeitsspeicher entladen und in einer Datei gespeichert. Die Daten für die einzelnen Zeiträume werden unabhängig von den Daten für andere Zeiträume aufbereitet. Die Regeln für die Datenaufbereitung und -verfügbarkeit sind für alle Zeiträume gleich. D.h. trotz der Tatsache, dass die Einheit der Datenspeicherung im HCC-Format ein Minutenbalken ist, bedeutet die Verfügbarkeit von Daten im HCC-Format nicht die Verfügbarkeit und Zugänglichkeit von Daten im HC-Format für den Zeitrahmen M1 im gleichen Umfang.

 
Mikalas:

Kann mir das bitte jemand erklären?

Warum die Funktion mit SERIES_TERMINAL_FIRSTDATE-Bezeichner, wenn es Daten gibt

im Terminal FALSE zurückgibt?

Weil es das ERSTE Mal ist, dass es auf diese spezielle Serie zugreift.
 
Mikalas:

Aus der Hilfe von Data Access Organisation --> Beispielskript für das Herunterladen der Historie:

Das war's. Sie sind auf dem richtigen Weg. Um zu überprüfen, wie genau das Terminal funktioniert, und nicht, wie man es sich vorstellt, gibt es einen einfachen Algorithmus zur Überprüfung.

  • Öffnen Sie eine Karte "MIX-6.15 M1" im Terminal. Auf dem Chart ist der Indikator aus dem ersten Beitrag zu sehen.
  • Öffnen Sie "Open Data Catalog" über das Terminal.
  • So suchen Sie nach der Historie für das Symbol "MIX-6.15" ...\Terminal\D0*******CF37AD**55**0E51F**75\bases\Open-Demo\history
  • Terminal entladen.
  • Löschen Sie den Ordner "MIX-6.15".
  • Terminal hochfahren. Wir sehen Fehler. Ein kleiner Scherz auf dem Chart - ändern Sie den Zeitrahmen mehrmals. Ändern Sie zum Beispiel M1 und M5 mehrmals. Der Fehler verschwindet. Dies bedeutet, dass Daten eines anderen Zeitraums (als dem im Code angeforderten) vorbereitet wurden. Wenn Sie die Zeiträume nicht manuell ändern wollen, müssen Sie die Daten selbst aufbereiten.
  • Laden Sie das Terminal neu - kein Fehler.
  • Wenn es nicht klar ist, wiederholen Sie das Experiment.