Errores, fallos, preguntas - página 2614

 
Andrei Kossarev:
¡La lectura del binario del indicador no funciona, el código similar del EA funciona sin problemas!

El ChartScreenShot de los indicadores probablemente funciona de forma asíncrona.

 
fxsaber:

Lo más probable es que ChartScreenShot en los indicadores funcione de forma asíncrona.

Lo he comprobado, por eso he puesto un bucle

 
Andrei Kossarev:

Lo he comprobado, por eso he puesto un bucle

La finalización del bucle no garantiza que haya un archivo.

 

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

¿No te molesta que haya errores en tu código?

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

La función FileSize espera una variable int y tú pones una cadena...

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

Código corregido, sigue sin funcionar

 
Andrei Kossarev:

Código corregido, sigue sin funcionar

Prueba a dividir el código en dos funciones distintas:

1. Leer el expediente y hacer un seguimiento.

2. Haciendo una captura de pantalla.

Y si el resultado es nulo, entonces intenta marcarlo. Y secuencia de llamadas a la función, primero se intenta leer, pero por la bandera se salta la lectura, luego se desnuda, por la bandera se ejecuta y se cambia la bandera. Y después, en el siguiente tick se lee el archivo.

 

Sugerencia - añadir otro campo para almacenar la información del usuario, no accesible para cambiar por el corredor y obligatorio para ser guardado en las renovaciones.

En definitiva, un campo no destructible que sólo puede ser modificado por el usuario.

 
Михаил:

Sugerencia - añadir otro campo para almacenar la información del usuario, no accesible para cambiar por el corredor y obligatorio para ser guardado en las renovaciones.

En definitiva, un campo no destructible que sólo puede ser modificado por el usuario.

Más 100600
 
Vladislav Andruschenko:
Más 100600

No lo hará, la parte del servidor de MT necesita ser reescrita, no se ha hecho en más de 10 años, por lo que será en un futuro próximo, utilice lo que se le dio - archivo, variables globales de la terminal, DB

escribo el estado de los pedidos en el archivo, he utilizado una plantilla de mi base de datos universalen https://www.mql5.com/ru/forum/85652/page17#comment_12370424

aquí está la última oferta de los desarrolladores - una base de datos SQLitehttps://www.mql5.com/ru/forum/327940

 
Igor Makanu:

No lo hará, la parte del servidor de MT necesita ser reescrita, no se ha hecho en más de 10 años, por lo que será en un futuro próximo, utilice lo que se le dio - archivo, variables globales de la terminal, DB

escribo el estado de los pedidos en el archivo, he utilizado una plantilla de mi base de datos universalen https://www.mql5.com/ru/forum/85652/page17#comment_12370424

esta es la última oferta de los desarrolladores - una base de datos SQLitehttps://www.mql5.com/ru/forum/327940


Sí, también almaceno la información en una base de datos. Pero... pero... pero...