Errori, bug, domande - pagina 2614

 
Andrei Kossarev:
La lettura del binario dall'indicatore non funziona, il codice simile dall'EA funziona senza problemi!

Il ChartScreenShot negli indicatori funziona molto probabilmente in modo asincrono.

 
fxsaber:

Molto probabilmente ChartScreenShot negli indicatori funziona in modo asincrono.

Controllato, ecco perché ho messo un ciclo

 
Andrei Kossarev:

Ho controllato, ecco perché ho messo un ciclo

La fine del ciclo non garantisce che ci sia un file.

 

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

Non ti dà fastidio che ci siano errori nel tuo codice?

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

La funzione FileSize si aspetta una variabile int e voi mettete una stringa...

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

Codice corretto, ancora non funziona

 
Andrei Kossarev:

Codice corretto, ancora non funziona

Provate a dividere il codice in due funzioni separate:

1. Leggere il file e seguire.

2. Fare uno screenshot.

E se il risultato è nullo, allora prova a flaggare. E sequenza di chiamate di funzione, prima prova a leggere, ma dalla bandiera leggere viene saltato, poi scremare, dalla bandiera viene eseguito e la bandiera viene commutata. E dopo, al prossimo tick il file viene letto.

 

Suggerimento - aggiungere un altro campo per memorizzare le informazioni dell'utente, non accessibile al cambiamento da parte del broker e obbligatorio per essere salvato sui rollover.

In breve, un campo non distruttibile che può essere cambiato solo dall'utente.

 
Михаил:

Suggerimento - aggiungere un altro campo per memorizzare le informazioni dell'utente, non accessibile al cambiamento da parte del broker e obbligatorio per essere salvato sui rollover.

In breve, un campo non distruttibile che può essere cambiato solo dall'utente.

Più 100600
 
Vladislav Andruschenko:
Più 100600

No, la parte server di MT deve essere riscritta, non è stato fatto in più di 10 anni, quindi lo sarà nel prossimo futuro, usa quello che ti è stato dato - file, variabili globali del terminale, DB

Scrivo lo stato degli ordini nel file, ho usato un modello del mio database universalesu https://www.mql5.com/ru/forum/85652/page17#comment_12370424

ecco l'ultima offerta degli sviluppatori - un database SQLitehttps://www.mql5.com/ru/forum/327940

 
Igor Makanu:

No, la parte server di MT deve essere riscritta, non è stato fatto in più di 10 anni, quindi lo sarà nel prossimo futuro, usa quello che ti è stato dato - file, variabili globali del terminale, DB

Scrivo lo stato degli ordini nel file, ho usato un modello del mio database universalesu https://www.mql5.com/ru/forum/85652/page17#comment_12370424

questa è l'ultima offerta degli sviluppatori - un DB SQLitehttps://www.mql5.com/ru/forum/327940


Sì, memorizzo anche le informazioni in un DB. Ma... ma... ma...