Erros, bugs, perguntas - página 2614

 
Andrei Kossarev:
Ler binário a partir do indicador não funciona, código semelhante da EA funciona sem problemas!

O ChartScreenShot nos indicadores funciona muito provavelmente de forma assíncrona.

 
fxsaber:

Muito provavelmente o ChartScreenShot nos indicadores funciona de forma assíncrona.

Verifiquei-o, por isso é que pus em loop

 
Andrei Kossarev:

Verifiquei, por isso coloquei um laço

O fim do laço não garante a existência de um ficheiro.

 

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

Não o incomoda que haja erros no seu código?

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

A função FileSize espera a variável int e você coloca 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));
}

Código corrigido, ainda não funciona

 
Andrei Kossarev:

Código corrigido, ainda não funciona

Tente dividir o código em duas funções separadas:

1. Leia o ficheiro e faça o acompanhamento.

2. Tirar uma fotografia do ecrã.

E se o resultado for nulo, então tente fazer uma bandeira. E sequência de chamadas de função, primeiro tenta-se ler, mas pela bandeira lida é pulada, depois pula-se, pela bandeira é executada e a bandeira é trocada. E depois disso, no tique seguinte o ficheiro é lido.

 

Sugestão - adicionar outro campo para armazenar informação do utilizador, não acessível para alteração pelo corretor e obrigatório para ser guardado nos rollovers.

Em suma, um campo não destrutível que só pode ser alterado pelo utilizador.

 
Михаил:

Sugestão - adicionar outro campo para armazenar informação do utilizador, não acessível para alteração pelo corretor e obrigatório para ser guardado nos rollovers.

Em suma, um campo não destrutível que só pode ser alterado pelo utilizador.

Mais 100600
 
Vladislav Andruschenko:
Mais 100600

Não, a parte do servidor de MT precisa de ser reescrita, não é feita há mais de 10 anos, por isso será num futuro próximo, use o que lhe foi dado - ficheiro, variáveis globais do terminal, DB

escrevo o estado das encomendas no ficheiro, utilizei um modelo da minha base de dados universalem https://www.mql5.com/ru/forum/85652/page17#comment_12370424

aqui está a última oferta dos programadores - uma base de dados SQLitehttps://www.mql5.com/ru/forum/327940

 
Igor Makanu:

Não, a parte do servidor de MT precisa de ser reescrita, não é feita há mais de 10 anos, por isso será num futuro próximo, use o que lhe foi dado - ficheiro, variáveis globais do terminal, DB

escrevo o estado das encomendas no ficheiro, utilizei um modelo da minha base de dados universalem https://www.mql5.com/ru/forum/85652/page17#comment_12370424

esta é a última oferta dos criadores - um SQLite DBhttps://www.mql5.com/ru/forum/327940


Sim, também guardo a informação num BD. Mas ... mas ... mas ... mas ...