Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 1129

 
Vladimir:
Es besteht die Möglichkeit, wenn der EA (oder das Skript) unter dem Gesichtspunkt der Übernahme und Korrektur des Quellcodes zur Verfügung steht. Sie müssen alle Warnmeldungen mit einer Bedingung versehen, die prüft, ob die Schaltfläche gedrückt wird. Wenn die Taste nicht gedrückt wird, werden die Alarme nicht aufgerufen.

DankeVladimir - ich denke, ich werde entweder Ihre Methode verwenden oder den gesamten EA in diesen Zustand versetzen.

Danke an Vitalie Postolache- ich werde Ihre Empfehlung studieren. Ich habe mql5 noch nicht studiert.

 
miss.natasha:

Ich muss Daten in eine hst-Datei schreiben, damit ich die Daten zur Erstellung eines autonomen Diagramms verwenden kann.

Ich bemühe mich schon seit zwei Tagen, aber nichts funktioniert.

Code:

#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
ulong    last_fpos=0;         //
int      HandleHistory=-1;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string symbol=Symbol();
   int per=Period()*9;

   ResetLastError();
   if(CreateHeader()==true)//если создали заголовок
     {
      HandleHistory=FileOpenHistory(symbol+(string)per+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);
      if(HandleHistory!=INVALID_HANDLE)
        {

         for(int i=199;i>0;i--)//заполняем данными
           {
            MqlRates r;
            r.time=Time[i];//просто пытаюсь записать, это так для примера
            r.open=Open[i];//просто пытаюсь записать, это так для примера
            r.low=Low[i];
            r.high=High[i];
            r.close=Close[i];
            r.tick_volume=(long)10;
            r.spread=0;
            r.real_volume=(long)10;
            uint byteswritten=FileWriteStruct(HandleHistory,r);
            Print("FileOpen OK ",byteswritten," ",Time[i]);
           }
       FileClose(HandleHistory);
       // FileFlush(HandleHistory);
        }
      else Print("Операция FileOpen неудачна, ошибка ",GetLastError());
     }
// long id=ChartOpen(symbol,per);
//Alert(id);
  }
//+------------------------------------------------------------------+
bool CreateHeader()//создаем файл с историей hst(заголовок)
  {

   int      file_version=401;
   string   c_copyright;
   string   c_symbol=Symbol();
   int i_period=Period()*9;
   int      i_digits=Digits;
   int      i_unused[13];
//---  
   ResetLastError();
   HandleHistory=FileOpenHistory(c_symbol+(string)i_period+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);
   if(HandleHistory<0)
     {
      Print("Error open ",c_symbol+(string)i_period,".hst file ",GetLastError());
      return(false);
     }
   c_copyright="(C)opyright 2003, MetaQuotes Software Corp.";
   ArrayInitialize(i_unused,0);
//--- write history file header
   FileWriteInteger(HandleHistory,file_version,LONG_VALUE);
   FileWriteString(HandleHistory,c_copyright,64);
   FileWriteString(HandleHistory,c_symbol,12);
   FileWriteInteger(HandleHistory,i_period,LONG_VALUE);
   FileWriteInteger(HandleHistory,i_digits,LONG_VALUE);
   FileWriteInteger(HandleHistory,0,LONG_VALUE);
   FileWriteInteger(HandleHistory,0,LONG_VALUE);
   FileWriteArray(HandleHistory,i_unused,0,13);
   return(true);
  }

Als Ergebnis der Ausführung wird eine Datei mit der Historie erstellt, aber es wird kein eigenständiger Graph erstellt.

Hier sind die Informationen zum Diagramm

Aus irgendeinem Grund sind die Daten von 2003!

Infolgedessen erhalte ich einen Fehler, wenn ich das Diagramm starte HistoryBase: 196 Fehler in 'NZDCHF45'.

Ich verstehe, dass ich etwas falsch geschrieben habe. Ich weiß nicht, wie ich es richtig schreiben soll, ich habe zu wenig Informationen. Wer weiß - bitte um Rat.


Ich kann mich nicht daran erinnern, dass MQ offiziell die .hst-Dateistruktur öffnet (falls doch, prüfen Sie die offiziellen Spezifikationen).

vielleicht ist dies ein Auszug aus einem sehr, sehr alten Projekt (C, gcc) :


/* .hst file header
*/
struct HstHeader {
    uint32_t    version;        // +0 4 LE  : database version
    char        copyright[64];  // +4 64    : copyright data
    char        symbol[12];     // +68 12   : symbol (EURUSD..)
    uint32_t    period;         // +80 4 LE : timeframe (sec. in period)
    uint32_t    digits;         // +84 4 LE : decimals after .
    datetime    timesign;       // +88 4 LE : creation time sign.
    datetime    last_sync;      // +92 4 LE : last sync. timestamp
    uint8_t     unused[52];     // +96 52   : reserved for feauture use
                                // total 148 bytes, packed, aligned by 1
};

/* .hst bar array (file payload)
*/
// when HstHeader.version==400
struct HstRates400 {
    datetime    ctm;            // +0 4 LE  : start (creation) time
    double      open;           // +4 8 LE  : open price
    double      low;            // +12 8 LE : lowest price
    double      high;           // +20 8 LE : highst price
    double      close;          // +28 8 LE : close price
    double      volume;         // +36 8 LE : volume (nr of ticks)
                                // total 44 bytes,packed, aligned by 1
} __attribute__((packed));

// when HstHeader.version==401

struct HstRates401 {
    datetime    ctm;            // +0 8 LE  : bar start time (with ms?)
    double      open;           // +8 8 LE  : open price
    double      low;            // +16 8 LE : lowest price
    double      high;           // +24 8 LE : highst price
    double      close;          // +32 8 LE : close price
    uint64_t    volume;         // +40 8 LE : volume (nr of ticks)
    uint32_t    spread;         // +48 4 LE : spread
    long        real_volume;    // +52 8 LE : real volume
                                // total 60 bytes,packed,aligned by 1
} __attribute__((packed));


Jetzt, nach vielen Jahren, bin ich mir nicht mehr sicher, ob hoch/niedrig in dieser Reihenfolge sein sollte, aber stellen Sie sicher, dass Ihre Strukturen mindestens die gleiche Größe haben (Kopf und Datensatz)
 

Hallo zusammen, wir arbeiten weiter an der Verfeinerung dessen, was wir bereits haben.

Wir haben ein unregelmäßiges Raster von Aufträgen und eine horizontale Linie, die überall sein kann

Wir müssen dies umsetzen:

wenn der Preis unter der Linie liegt, alle Aufträge schließen

Die Schwierigkeiten sind wie folgt

1) wenn die Aufträge nicht einheitlich sind und bereits beim Setzen der Linie alles erledigt ist, und nicht erst beim Setzen der Markierung und der Linie (in diesem Fall sollte man auch das Ein/Aus-Flag setzen)

2) Implementierung einer Aufschrift oben rechts auf der Linie nach Typ (wenn der Auftrag zu diesem Preis geschlossen wird, ist das Ergebnis das gleiche für den Saldo, d.h. wir müssen die Anzeige bei jedem Tick und auch beim Verschieben der Linie ändern; es ist im Allgemeinen ähnlich wie ein Trailing-Stop oder Sl, wenn der Auftrag manuell platziert wird, nur fließend und mit der Möglichkeit von fehlerhaften Auslösern am Anfang)

Der Roboter ist da, bis auf die numerische Beschriftung ist alles schon gezeichnet, die Frage liegt in der richtigen Zuordnung der Werte und der Informationsverarbeitung des gesamten Rasters.

Dateien:
USDCHFH1.png  26 kb
 
trader781:


1) wenn die Aufträge unregelmäßig sind

Das ist das erste Mal, dass ich von ihnen höre.
 
Hallo. Ich verstehe nicht, warum iTime manchmal die falsche Zeit anzeigt. Beim Öffnen einer neuen Kerze sollte PERIOD_H1 die Zeit im Protokoll Print(iTime(NULL,PERIOD_M1,30)) anzeigen. In Tests wird alles korrekt angezeigt, aber in der Realität weicht die Zeit manchmal sogar um mehrere Stunden ab. Warum ist das so?
 
Nauris Zukas:
Hallo. Ich verstehe nicht, warum iTime manchmal die falsche Zeit anzeigt. Bei der Eröffnung einer neuen Kerze soll PERIOD_H1 die Zeit im Protokoll Print(iTime(NULL,PERIOD_M1,30)) anzeigen. In Tests wird alles korrekt angezeigt, aber in der Realität weicht die Zeit manchmal sogar um mehrere Stunden ab. Warum ist das so?

Verwenden SieCopyTime, ich habe dieses Problem auch beim Erstellen von grafischen Objekten bemerkt undCopyTime hat das Problem gelöst

datetime TM[];
if(CopyTime(Symbol(),Period(),0,1,TM)<0) return;
TIME0=TM[0];
 
Vitaly Muzichenko:

Verwenden SieCopyTime, ich habe dieses Problem auch beim Erstellen von grafischen Objekten bemerkt undCopyTime hat das Problem gelöst

datetime TM[];
if(CopyTime(Symbol(),Period(),0,1,TM)<0) return;
TIME0=TM[0];
Ich danke Ihnen!
 
Evgeny Belyaev:
Das ist das erste Mal, dass ich von ihnen höre.
Ich brauche nur einen schwebenden Take, der an ein Objekt gebunden ist.
 
Wie kann ich erreichen, dass die Skala meines Indikators 5 Dezimalstellen anzeigt?

Hier hat das Diagramm 5 Stellen und der Indikator 4 Stellen.
 
igrok333:
Wie kann ich erreichen, dass die Skala meines Indikators 5 Dezimalstellen anzeigt?

Hier hat das Diagramm 5 Stellen und der Indikator 4 Stellen.
IndicatorSetInteger(INDICATOR_DIGITS,Digits());