Erreurs, bugs, questions - page 2614

 
fxsaber:

Il est fort probable que ChartScreenShot dans les indicateurs fonctionne de manière asynchrone.

Je l'ai vérifié, c'est pourquoi j'ai mis une boucle.

 
Andrei Kossarev:

J'ai vérifié, c'est pour ça que j'ai mis une boucle.

La fin de la boucle ne garantit pas l'existence d'un fichier.

 

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

Cela ne vous dérange pas qu'il y ait des erreurs dans votre code ?

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

La fonction FileSize attend une variable int et vous mettez une chaîne...

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

Code corrigé, ne fonctionne toujours pas

 
Andrei Kossarev:

Code corrigé, ne fonctionne toujours pas

Essayez de diviser le code en deux fonctions distinctes :

1. Lire le dossier et assurer le suivi.

2. Je fais une capture d'écran.

Et si le résultat est nul, alors essayez le marquage. Et séquence d'appels de fonction, d'abord essayer de lire, mais par le drapeau lire est sauté, puis écrémer, par le drapeau est exécuté et le drapeau est commuté. Et après cela, au prochain tic-tac, le fichier est lu.

 

Suggestion - ajouter un autre champ pour stocker les informations de l'utilisateur, non accessible à la modification par le courtier et obligatoire à sauvegarder lors des reconductions.

En bref, un champ non destructible qui ne peut être modifié que par l'utilisateur.

 
Михаил:

Suggestion - ajouter un autre champ pour stocker les informations de l'utilisateur, non accessible à la modification par le courtier et obligatoire à sauvegarder lors des reconductions.

En bref, un champ non destructible qui ne peut être modifié que par l'utilisateur.

Plus 100600
 
Vladislav Andruschenko:
Plus 100600

Non, la partie serveur de MT doit être réécrite, cela n'a pas été fait depuis plus de 10 ans, donc cela le sera dans un futur proche, utilisez ce qui vous a été donné - fichier, variables globales du terminal, DB...

J'écris l'état des commandes dans le fichier, j'ai utilisé un modèle de ma base de données universelleà https://www.mql5.com/ru/forum/85652/page17#comment_12370424.

voici la dernière offre des développeurs - une base de données SQLitehttps://www.mql5.com/ru/forum/327940

 
Igor Makanu:

Non, la partie serveur de MT doit être réécrite, cela n'a pas été fait depuis plus de 10 ans, donc cela le sera dans un futur proche, utilisez ce qui vous a été donné - fichier, variables globales du terminal, DB...

J'écris l'état des commandes dans le fichier, j'ai utilisé un modèle de ma base de données universelleà https://www.mql5.com/ru/forum/85652/page17#comment_12370424.

voici la dernière offre des développeurs - une base de données SQLitehttps://www.mql5.com/ru/forum/327940


Oui, je stocke également les informations dans une base de données. Mais ... mais ... mais ...

 

Actuellement, dans les indicateurs personnalisés MT5, le redimensionnement des flèches ne fonctionne pas. Veuillez réparer ou indiquer comment changer.

PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_ARROW);
PlotIndexSetInteger(0, PLOT_ARROW, 233);
PlotIndexSetInteger(0, PLOT_LINE_WIDTH, 2); //1,2,3 - размер не меняется
PS. J'ai réussi à trouver la raison. Même intéressant. MT5, contrairement à MT4, réduit arbitrairement la taille des flèches au minimum lors d'un zoom arrière sur la largeur du graphique (Zoom Out).