Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2635

 
Vitaly Muzichenko #:

После долгих тестов выяснилось, что в индикаторе на мт5 целая история с сохранением рисунка

Простейший код для тестов

Печать

--

Пока цикл не пойдёт до конца, файл в папке создан не будет!

НО, после прохождения цикла файл создаётся сразу, но с чистым графиком - без индикаторов и объектов.

Если цикл убрать - файл создаётся правильный, но с задержкой, и прочитать его невозможно - он ещё пустой = нужна пауза.

Именно в паузе для индикатора есть проблема.

наверное только со статической переменной получится

сделали скрин

static value=1

дальше в 

GetMicrosecondCount

отсчитываем сколько нужно, после чтения value=0

но это в разных тиках будет...

 
Vitaly Muzichenko #:

Как это реализовать, чтобы после сигнала сохранения изображения, через 3-5 секунд начать читать файл?

--

P.S. Сейчас без паузы изображение не успевает создаться и начинается чтение, при таком раскладе файл создаётся с нулевым размером (пустой)

 По моему алгоритм должен быть простой. При получении сигнала на запись,  включается функция в таймере, которая поэтапно(по таймеру) отслеживает корректность всех операций.

 
Логику понял, всем спасибо!
 
Vitaly Muzichenko #:

Как это реализовать, чтобы после сигнала сохранения изображения, через 3-5 секунд начать читать файл?

--

P.S. Сейчас без паузы изображение не успевает создаться и начинается чтение, при таком раскладе файл создаётся с нулевым размером (пустой)

Виталий, вся проблема в том, что пока не завершится функция в которой создавался скрин, его не будет видно.

Вот решение, допиливайте под себя.

int customEventID; // номер пользовательского события
string filename="1233.png";
/*************Custom indicator initialization function***************/
int OnInit()
 {
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/****************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[])

 {
  if(!FileIsExist(filename))
   {
    if(ChartScreenShot(ChartID(),filename,800,600))
     {
      printf("Сохранили скриншот %s",filename);
      customEventID=CHARTEVENT_CUSTOM+1;
      if(!EventChartCustom(ChartID(), ushort(customEventID-CHARTEVENT_CUSTOM), 20, 50, filename))
        Print(GetLastError());
     }
    else
      printf("%s %d ",filename,GetLastError());
   }
  return rates_total;
 }/******************************************************************/

/**************Custom indicator chart's event handler****************/
void  OnChartEvent(const int       id,       // идентификатор события
                   const long&     lparam,   // параметр события типа long
                   const double&   dparam,   // параметр события типа double
                   const string&   sparam    // параметр события типа string
                  )
 {
  if(id > CHARTEVENT_CUSTOM)
    if(id == customEventID)
     {
      if(FileIsExist(filename))
        printf("customEventID = %d %s ",customEventID,filename);
     }
 }/******************************************************************/
2025.06.22 19:13:51.698 Variant 1 (AUDCAD,H1)   Сохранили скриншот 1233.png
2025.06.22 19:13:51.712 Variant 1 (AUDCAD,H1)   customEventID = 1001 1233.png 

Вот скрин


 
Alexey Viktorov #:

Виталий, вся проблема в том, что пока не завершится функция в которой создавался скрин, его не будет видно.

Вот решение, допиливайте под себя.

Вот скрин

Я сделал на таймере с флагом, задержку поставил 5 секунд, если меньше - бывают случаи, что не успевает сохранить скрин и происходит чтение = ошибка.

Спасибо!

 
Vitaly Muzichenko #:

Я сделал на таймере с флагом, задержку поставил 5 секунд, если меньше - бывают случаи, что не успевает сохранить скрин и происходит чтение = ошибка.

Спасибо!

В принципе, можно и по таймеру, но для меня таймер нежелателен в таких случаях.

 
Maxim Kuznetsov #:
PS/ @#45й бабай, за столько лет так и не смогли сделать форматирование кода...

datetime timeToRead=0;

void DoScreenshot() {

....

timeToRead=TimeLocal()+Nseconds;

}

void OnTimer() {

if (timeToRead!=0 && TimeLocal()<timeToRead) {

               if (ReadFuxingFile()) {

timeToRead=0;

}

        }

}

Кто-то из нас что-то делает не так. Кто? И почему?

 

добрый день

может кто подскажет в чем дело

запускаю советника на тестере с мая 2024 по сегодняшний день без визуализации , где то в середине зависает

запускаю с визуализацией проходит до конца

и так постоянно

 
fvdtrejder #:

добрый день

может кто подскажет в чем дело

запускаю советника на тестере с мая 2024 по сегодняшний день без визуализации , где то в середине зависает

запускаю с визуализацией проходит до конца

и так постоянно

 Возможно, ему нравится, как он выглядит?) Сова  что-то оставляет вам в лог-файле. Вы их смотрели?

 

честно говоря не знаю где их смотреть

советники программирую но многими нюансами не владею