Баг при создании скриншота.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Andrey Voytenko
30950
Andrey Voytenko  

Прошу разработчиков обратить внимание. Билд 1160.

Суть проблемы сводится к тому, что при указании идентификатора графика отличного от текущего, функция ChartScreenshot не создает результирующего файла.

Проблема замечена только в MT4, в MT5 все гладко.

Изредка файл все же создается, но при этом приходится ждать по  15-20 секунд.

Тестовый скрипт:

//+------------------------------------------------------------------+
//|                                              Screenshot_Test.mq4 |
//+------------------------------------------------------------------+
#property strict
#property script_show_inputs

input bool InpOpenNewChart=true;//Open New Chart
//+------------------------------------------------------------------+
void OnStart()
  {
   long chart_id=0;

   if(InpOpenNewChart)
     {
      //--- open a new chart!
      chart_id=ChartOpen(_Symbol,_Period);
      if(chart_id==0)
        {
         Print("ChartOpen error ",_LastError);
         return;
        }
      ChartSetInteger(chart_id,CHART_BRING_TO_TOP,true);
     }

//--- update chart
   ChartRedraw(chart_id);
   Sleep(500);

//--- apply new settings
   ChartSetInteger(chart_id,CHART_SHOW_GRID,false);
   ChartSetInteger(chart_id,CHART_MODE,CHART_CANDLES);
   ChartSetInteger(chart_id,CHART_SHOW_PERIOD_SEP,false);

//--- check file
   string filename=StringFormat("%s%d.gif",_Symbol,_Period);
   if(FileIsExist(filename))
      FileDelete(filename);

//---
   if(ChartScreenShot(chart_id,filename,800,600,ALIGN_RIGHT))
     {
      //--- waiting 30 sec for save screenshot
      int wait=30;
      while(!FileIsExist(filename) && --wait>0)
        {
         printf("Waiting %d sec ...",wait);
         Sleep(1000);
        }
      //--- check file
      if(FileIsExist(filename))
         printf("Screenshot '%s' created successfuly.",filename);
      else
         printf("Failed to create a screenshot '%s'.",filename);
     }
   else
     {
      Print("ChartScreenShot error ",_LastError);
     }

//--- close my chart
   if(InpOpenNewChart)
      ChartClose(chart_id);
  }
//+------------------------------------------------------------------+
Taras Slobodyanik
38464
Taras Slobodyanik  
в 1090 работает без ошибок
Andrey Voytenko
30950
Andrey Voytenko  
Taras Slobodyanik:
в 1090 работает без ошибок

Благодарю за проверку. У меня 1160, работает крайне плохо.

Этот кусок кода используется в статье про телеграм. Судя по отзывам у народа тоже с ним проблемы.

Насколько я понял проблема проявляется при отсутствии поступления тиков для того графика с которого делается скриншот.

Попробуйте запустить этот скрипт при отсутствии подключения к серверу.

Taras Slobodyanik
38464
Taras Slobodyanik  
да, без подключения к серверу не работает
Taras Slobodyanik
38464
Taras Slobodyanik  
добавил в цикл ChartRedraw(chart_id); заработало
Andrey Voytenko
30950
Andrey Voytenko  
Taras Slobodyanik:
добавил в цикл ChartRedraw(chart_id); заработало

Благодарю Тарас. Осталось спросить, это нормально, что в MT4 скриншоты не создаются без принудительного обновления графика?

Taras Slobodyanik
38464
Taras Slobodyanik  
Andrey Voytenko:

Благодарю Тарас. Осталось спросить, это нормально, что в MT4 скриншоты не создаются без принудительного обновления графика?

да похоже на баг, ждём что ответят разработчики)

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий