Fehler, Irrtümer, Fragen - Seite 2614

 
Andrei Kossarev:
Das Lesen von Binärdaten aus dem Indikator funktioniert nicht, ähnlicher Code aus dem EA funktioniert ohne Probleme!

Der ChartScreenShot in den Indikatoren arbeitet höchstwahrscheinlich asynchron.

 
fxsaber:

Höchstwahrscheinlich arbeitet ChartScreenShot in Indikatoren asynchron.

Ich habe es überprüft, deshalb habe ich eine Schleife eingefügt.

 
Andrei Kossarev:

Ich habe es überprüft, deshalb habe ich eine Schleife eingefügt.

Das Beenden der Schleife garantiert nicht, dass eine Datei vorhanden ist.

 

Andrei Kossarev:
Не работает чтение бинарного файла из индикатора, аналогичный код из советника работает без проблем!

void TestPhoto() {
   string name;
   MqlDateTime  dtLocal;
   TimeToStruct(TimeLocal(), dtLocal);
   string date = IntegerToString(dtLocal.year) + IntegerToString(dtLocal.mon, 2, '0') + IntegerToString(dtLocal.day, 2, '0');
   string time = IntegerToString(dtLocal.hour, 2, '0') + "." + IntegerToString(dtLocal.min, 2, '0') + "." + IntegerToString(dtLocal.sec, 2, '0');
   name = "ScreenShots/" + date + "/" + _Symbol + "_" +date + "_" + time + ".png";
   
   if (!ChartScreenShot(0, name, 1920,1200, ALIGN_RIGHT))
      return;

   ResetLastError();
   
   for (int i=0; i < 100000; i++){
      if (FileIsExist(name,false) && FileSize(name) > 0)
         break;
   }
   //---
   int flags=FILE_READ|FILE_BIN|FILE_SHARE_READ;

   //---
   int file=FileOpen(name,flags);
   if(file<0) {
      Print("Операция FileOpen неудачна, ошибка ",GetLastError());
      return;
}
   uchar photo[];
   FileReadArray(file,photo);
   FileClose(file);
   
   Print(ArraySize(photo));
}

Stört es Sie nicht, dass in Ihrem Code Fehler enthalten sind?

ulong  FileSize( 
   int  file_handle      // handle файла 
   );

Die Funktion FileSize erwartet eine int-Variable, und Sie setzen string...

 
//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_plots   1
#property indicator_buffers 1
#include <Trident\TCoreMain.mqh>
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   ::EventSetMillisecondTimer(500);
   return(INIT_SUCCEEDED);
  }
  
  void OnDeinit(const int reason) {
   ::EventKillTimer();
}

void OnTimer() {
   ::EventKillTimer();
   TestPhoto();
}
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

void TestPhoto() {
   string name;
   MqlDateTime  dtLocal;
   TimeToStruct(TimeLocal(), dtLocal);
   string date = IntegerToString(dtLocal.year) + IntegerToString(dtLocal.mon, 2, '0') + IntegerToString(dtLocal.day, 2, '0');
   string time = IntegerToString(dtLocal.hour, 2, '0') + "." + IntegerToString(dtLocal.min, 2, '0') + "." + IntegerToString(dtLocal.sec, 2, '0');
   name = "ScreenShots/" + date + "/" + _Symbol + "_" +date + "_" + time + ".png";
   
   if (!ChartScreenShot(0, name, 1920,1200, ALIGN_RIGHT))
      return;

   ResetLastError();
   
   //---
   int flags=FILE_READ|FILE_BIN|FILE_SHARE_READ;

   //---
   int file=FileOpen(name,flags);
   if(file<0) {
      Print("Операция FileOpen неудачна, ошибка ",GetLastError());
      return;
   }
   
   for (int i=0; i < 100000; i++){
      if (FileSize(file) > 0)
         break;
   }
   
   uchar photo[];
   FileReadArray(file,photo);
   FileClose(file);
   
   Print(ArraySize(photo));
}

Korrigierter Code, funktioniert immer noch nicht

 
Andrei Kossarev:

Korrigierter Code, funktioniert immer noch nicht

Versuchen Sie, den Code in zwei separate Funktionen aufzuteilen:

1. Datei lesen und weiterverfolgen.

2. Einen Screenshot machen.

Und wenn das Ergebnis null ist, dann versuchen Sie es mit der Markierung. Und Sequenz von Funktionsaufrufen, zuerst versuchen zu lesen, aber durch die Flagge lesen wird übersprungen, dann überfliegen, durch die Flagge wird ausgeführt und die Flagge wird geschaltet. Danach wird die Datei beim nächsten Ticken gelesen.

 

Vorschlag - Hinzufügen eines weiteren Feldes zum Speichern von Benutzerinformationen, das vom Makler nicht geändert werden kann und bei Rollover zwingend gespeichert werden muss.

Kurz gesagt, ein nicht zerstörbares Feld, das nur vom Benutzer geändert werden kann.

 
Михаил:

Vorschlag - Hinzufügen eines weiteren Feldes zum Speichern von Benutzerinformationen, das vom Makler nicht geändert werden kann und bei Rollover zwingend gespeichert werden muss.

Kurz gesagt, ein nicht zerstörbares Feld, das nur vom Benutzer geändert werden kann.

Plus 100600
 
Vladislav Andruschenko:
Plus 100600

Nein, der Server-Teil von MT muss neu geschrieben werden, das ist seit über 10 Jahren nicht mehr geschehen, also wird es in naher Zukunft geschehen, verwenden Sie das, was Ihnen gegeben wurde - Datei, globale Variablen des Terminals, DB

Ich schreibe den Status der Aufträge in die Datei, ich habe eine Vorlage meiner universellen Datenbankunter https://www.mql5.com/ru/forum/85652/page17#comment_12370424 verwendet.

hier ist das neueste Angebot der Entwickler - eine SQLite-Datenbankhttps://www.mql5.com/ru/forum/327940

 
Igor Makanu:

Nein, der Server-Teil von MT muss neu geschrieben werden, das ist seit über 10 Jahren nicht mehr geschehen, also wird es in naher Zukunft geschehen, verwenden Sie das, was Ihnen gegeben wurde - Datei, globale Variablen des Terminals, DB

Ich schreibe den Status der Aufträge in die Datei, ich habe eine Vorlage meiner universellen Datenbankunter https://www.mql5.com/ru/forum/85652/page17#comment_12370424 verwendet.

dies ist das neueste Angebot der Entwickler - eine SQLite DBhttps://www.mql5.com/ru/forum/327940


Ja, ich speichere die Informationen auch in einer DB. Aber ... aber ... aber ...