Strange Probleme HST Datei Offline Chart und Daten daraus lesen kein Update usw

Email Account  

Hallo Leute,

ich habe mal wieder ein stranges Problem mit dem Metatrader, welches ich euch gerne ausfuehrlich beschreiben moechte und diskutieren will, vielleicht koennt ihr mir ja dabei helfen eine Loesung zu finden.

Mein Ziel ist es jeweils eigene HST Dateien zu erstellen, also so zu sagen Offline Chart Dateien, das ganze klappt soweit auch, ich habe eine Quelle wo Candelstick Daten herkommen und ich habe ein Script welches aus diesen Daten eine HST Datei erstellt und ich kann auch ein Offline Chart oeffnen, nachdem die HST Datei erstellt wurde, hier einmal mein derzeitiges Script:

void CreateChart(string symbol, int period)
{
//---
   datetime time0;
   ulong    last_fpos=0;
   long     last_volume=0;
   int      i,start_pos,periodseconds;
   int      cnt=0;
//---- History header
   int      file_version=401;
   string   c_copyright;
   string   c_symbol=symbol;
   int      i_period=period;
   int      i_digits=8;
   int      i_unused[13];

   MqlRates rate;
//---
   int ExtHandle=FileOpenHistory(c_symbol+(string)i_period+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);
   if(ExtHandle<0)
      return;
   c_copyright="(C)opyright 2003, MetaQuotes Software Corp.";
   ArrayInitialize(i_unused,0);
//--- write history file header
   FileWriteInteger(ExtHandle,file_version,LONG_VALUE);
   FileWriteString(ExtHandle,c_copyright,64);
   FileWriteString(ExtHandle,c_symbol,12);
   FileWriteInteger(ExtHandle,i_period,LONG_VALUE);
   FileWriteInteger(ExtHandle,i_digits,LONG_VALUE);
   FileWriteInteger(ExtHandle,0,LONG_VALUE);
   FileWriteInteger(ExtHandle,0,LONG_VALUE);
   FileWriteArray(ExtHandle,i_unused,0,13);
//--- write history file
   periodseconds=i_period*60;
   start_pos=anzahlbars-1; 
   rate.open=open[start_pos];
   rate.low=low[start_pos];
   rate.high=high[start_pos];
   rate.tick_volume=(long)volume[start_pos];
   rate.spread=0;
   rate.real_volume=0;
   //--- normalize open time
   rate.time=zeit[start_pos]/periodseconds;
   rate.time*=periodseconds;
   for(i=start_pos-1; i>=0; i--)
     {
        if(IsStopped())break;
        //---
        rate.open=open[i];
        rate.low=low[i];
        rate.high=high[i];
        rate.close=close[i];
        rate.tick_volume=(long)volume[i];
        rate.spread=0;
        rate.real_volume=0;
        rate.time=zeit[i];
        //---
        last_fpos=FileTell(ExtHandle);
        last_volume=(long)volume[i];
        uint ress = FileWriteStruct(ExtHandle,rate);
        cnt++;
     } 
   FileFlush(ExtHandle);
   FileClose(ExtHandle);
   Alert("%d record(s) written ",cnt+"  symbol "+symbol);
   
   /*
   for(int a=0; a<100; a++)
   {
      ChartSetSymbolPeriod(ChartsNr[a],symbol,i_period);
   }
   */
}

Sobald ich diese Funktion ausfuehre, wird also eine HST Datei erstellt, alle Daten werden gespeichert und ich kann mir den Offline Charts anschauen, alles schoen und gut, ich weis auch wie ich den Offline Chart updaten kann, soweit ich den Offline Chart geoeffnet habe.

Das Problem ist jetzt folgendes, wenn ich den Offline Charts nicht oeffne und meine Funktion zum erstellen des Charts die ganze Zeit weiter laufen lassen, dann sagt mir die Funktion zwar das die HST Datei fortlaufend geupdated wird, aber wenn ich Beispielweise ein Script benutze und mit einem Alert die Daten aus der HST Datei anzeigen lasse, dann sehe ich das die ganze Zeit der aktuelle Closepreis sich nicht aendert, also zb:

Alert("close "+iClose("ARDZDF",180,0)+" bars "+iBars("ARDZDF",180));

Also sagen wir mein Symbol heist "ARDZDF" und der aktuelle Closepreis ist 100 und ich starte die Funktion zum erstellen des Charts, dann wird der Chart erstellt und ich kann danach mit iClose() den aktuellen Closepreis lesen ohne das der Offline Chart irgendwo geoeffnet ist, aber sagen wir die Funktion laeuft weiter und der Closepreis ist jetzt schon 125 und wurde auch so in die HST Datei geschrieben, dann zeigt mir iClose() weiterhin den Wert 100 an. Mir ist natuerlich klar das hier der Metatrader sein eigenes Verhalten hat und ich suche ein Woraround.

Und eine komische Sache ist mir noch aufgefallen, wenn ich jetzt Beispielweise einfach nur den Metatrader schliese und neu starte, dann sehe ich aufeinmal das mir iClose() nun fuer den aktuellen Preis wieder ein anderen Wert anzeigt, also wahrscheinlich den zuletzt in die HST Datei geschriebenen Wert, also ein Neustart von Metatrader wirkt hier so aehnlich wie ein update vom offline chart per Funktion.

Aber ich will und kann nicht fuer alle Symbole welche ich erstelle ein offline chart noch oeffnen und laufen lassen, ich will eigentlich nur die HST Dateien erstellen und Daten daraus nutzen, der Metatarder hat ja sowieso auch ein limit von 100 offenen charts und das wuerden dann zu viele offene charts werden, ich will naemlich im Prinzip die ganze Zeit so im Hintergrund fuer jedes Symbol 9 unterschiedliche HST Dateien erstellen, also fuer alle Chartperioden welche ich brauche eine HST Datei und dann mit iClose() und aehnlichen Funktionen diese HST Chart Daten auch nutzen fuer Indikatoren usw und es haette ja auch alles gut funktioniert wenn der Metatrader hier das ganze updaten wuerde.

Wenn jemand gute Tips fuer mich hat wie ich das am besten loesen kann waere sehr nett von euch, hin und wieder kann man mit irgendwelchen Tricks den Metatrader auch dazu bringen so zu arbeiten wie man es will, mir faellt aber gerade nichts ein, ich denke ich waere auch bereit DLL Dateien zu nutzen falls es damit funktionieren koennte.

Carl Schreiber  

Kennst Du das hier: https://www.mql5.com/de/articles/8226

Es gibt fast nichts, was nicht schon für MT4/MT5 programmiert wurde.

Suchen is meist schneller als alles selber machen.

Nutzerdefinierte Symbole: Praktische Grundlagen
Nutzerdefinierte Symbole: Praktische Grundlagen
  • www.mql5.com
Der Artikel ist der programmatischen Generierung von nutzerdefinierten Symbolen gewidmet, die zur Demonstration einiger gängiger Methoden zur Anzeige von Ticks verwendet werden. Er beschreibt eine vorgeschlagene Variante der minimal-invasiven Anpassung von Expert Advisors für den Handel mit einem realen Symbol aus einem abgeleiteten nutzerdefinierten Symbolchart. Die MQL-Quellcodes sind diesem Artikel beigefügt.
Email Account  
Kuck mal Carl, ich bin schon seit einigen Tagen am suchen und dies hier ist wieder mal so ein spezielles Problem von Metatrader, die iClose Funktion gibt dir einfach nicht den neusten Wert obwohl er ja in der hst Datei steht nur wenn ich ein offline chart oeffne und update reagiert auch die iClose Funktion usw weist du ich bin auch bereit Geld zu zahlen fuer Hilfe weil ich es wirklich leid bin wegen solchen Sachen Tage lang nicht weiter zu kommen, verstehst du den wenigstens mein Problem und denkst du es gibt ein Workaround? Ich habe hier auch ein Job dafuer gepostet weil ich es wirklich leid bin mit diesen Metatarder: https://www.mql5.com/de/job/190345
Freelance Service auf MQL5.com: Read updated data from hst file with iClose() etc
Freelance Service auf MQL5.com: Read updated data from hst file with iClose() etc
  • 2023.03.03
  • www.mql5.com
I have a few hst files which are updated every second from a function but i see that metatrader does not give me the updated price which is save into the hst file, it looks like this is a special behavior from metatrader on not really a error in my code. because if i open a offline chart which belongs to one of this hst files and if i update this offline chart then i can see that the function iClose() does give me the updated price but if i dont open a offline chart then iClose() is also not
Email Account  
Carl Schreiber #:

Kennst Du das hier: https://www.mql5.com/de/articles/8226

Es gibt fast nichts, was nicht schon für MT4/MT5 programmiert wurde.

Suchen is meist schneller als alles selber machen.

Dein Link fuehrt auch zu einem Beitrag fuer Metatarder 5 und ich habe dieses problem gerade auf Metatrader 4

Carl Schreiber  
  1. MT4 hat weiter unten seinen eigene Thread.
  2. Man könnte auch MT5 code nach MT4 migrieren.
  3. Für MT4 kann man mit zB. Tickstory (Google) seine eigene hist. Kursdatenbank aus Tickdaten in csv-Dateien aufbauen, im MT5 ist das nicht mehr notwendig.
  4. Unter dem Stichwort Renko-Chart finden sich andere Beispiele, wie aus normalen (live) Tick-Preisen eigene andere Symbol-Charts (live) erstellt werden - MT4 ist halt schon etwas angejahrt, ob das schon damals ...
Grund der Beschwerde: