Новая версия платформы MetaTrader 4 build 1045 - страница 3

 

В MT4 нет нормальной возможности накинуть на чарт индикатор с нужными настройками так, чтобы сразу работал - не выпадало окно с заданием входных параметров.

Поэтому использовался костыльный метод

  1. Делался ChartSaveTemplate.
  2. Открывался через FileOpen сохраненный tpl-файл.
  3. Правился - вносился нужный индикатор с заданными входными параметрами.
  4. Загружался шаблон через ChartTemplateApply.
Метод ну очень костыльный. Однако, раньше работал без сбоев. Сейчас - нет, т.к. выполнение первого пункта идет в асинхронном режиме и tpl-файл может очень долго записываться. Соответственно, второй пункт становится бессмысленным, и все перестает работать, как задумывалось.

Так же имеется проблема с пунктом 4 - загрузка шаблона иногда тормозит.

ChartRedraw до и после Chart-функций не избавляет от проблемы.

Вполне возможно, что на MT5 с этими функциями та же засада. Но там есть ChartIndicatorAdd, поэтому городить этот костыль не требуется.

В общем, нужно либо править Chart-функции, либо находить решение, как нормально добавить индикатор на чарт с нужными входными параметрами, чтобы он СРАЗУ работал, а не просил подтверждений. 

 

ЗЫ Можно, конечно, написать свой собственный ChartSaveTemplate, но это уже звучит, как издевка.

 
fxsaber:

Поэтому использовался костыльный метод

  1. Делался ChartSaveTemplate.
  2. Открывался через FileOpen сохраненный tpl-файл.
  3. Правился - вносился нужный индикатор с заданными входными параметрами.
  4. Загружался шаблон через ChartTemplateApply.
Метод ну очень костыльный. Однако, раньше работал без сбоев. Сейчас - нет, т.к. выполнение первого пункта идет в асинхронном режиме и tpl-файл может очень долго записываться. Соответственно, второй пункт становится бессмысленным, и все перестает работать, как задумывалось.
Проверил описанный костыль с добавлением 11 индикаторов на чарте. Сохранение темплейта с вызовом синхронной функции, аплай темплейта тоже с вызовом синхронной функции.

Видимо у меня сохранение TPL файла c 100000 объектами и 11 индикаторами происходит довольно быстро (не SSD) не больше 1 секунды. Все добавленные индикаторы на месте. Может предоставите ваш код?
 
Alexey Da:
Проверил описанный костыль с добавлением 11 индикаторов на чарте. Сохранение темплейта с вызовом синхронной функции, аплай темплейта тоже с вызовом синхронной функции.

Видимо у меня сохранение TPL файла c 100000 объектами и 11 индикаторами происходит довольно быстро (не SSD) не больше 1 секунды. Все добавленные индикаторы на месте. Может предоставите ваш код?
Отвечаю за коллегу. Судя по описанию не правильно делали. Руками на график не нужно набрасывать никаких индикаторов.

Делаете скрипт. Сначала сохраняете темплейт пустого графика ChartSaveTemplate, затем после сохранения, открываете файл tpl и вписываете туда индикаторы или хотя бы один. Закрываете файл tpl. И потом вызываете этот tpl ChartTemplateApply. Все это в одном скрипте, подряд один за другим.

В результате, будет следующее, сначала дописываются индикаторы в файл tpl, а затем с задержкой пишется  ChartSaveTemplate (и пишет пустой график), затем с еще небольшой задержкой, срабатывает ChartTemplateApply - и естественно выводит пустой график без индикаторов. Притом попробуйте все это сделать еще и при отключенном от интернета компе.

У меня тоже SSD диск, 16G оперативка, 7-й интел процессор.
 
ANG3110:
Отвечаю за коллегу. Судя по описанию не правильно делали. Руками на график не нужно набрасывать никаких индикаторов.

Делаете скрипт. Сначала сохраняете темплейт пустого графика ChartSaveTemplate, затем после сохранения, открываете файл tpl и вписываете туда индикаторы или хотя бы один. Закрываете файл tpl. И потом вызываете этот tpl ChartTemplateApply. Все это в одном скрипте, не по очереди.

В результате, будет следующее, сначала дописываются индикаторы в файл tpl, а затем с задержкой пишется  ChartSaveTemplate (и пишет пустой график), затем с еще небольшой задержкой, срабатывает ChartTemplateApply - и естественно выводит пустой график без индикаторов. Притом попробуйте все это сделать еще и при отключенном от интернета компе.

У меня тоже SSD диск, 16G оперативка, 7-й интел процессор.
Все сделано именно так как вы сказали, за следующими исключениями:

  • эксперт. Соответственно инициализация при отсутствии подключения к серверу не выполнится.
  • изначально на чарт применяется темплейт с кучей объектов и одним единственным индикатором настройки которого вычитываются из tpl файла и добавляются в новый темплейт с модификацией входного параметра.
  • цикл организован через EventChartCustom на чарте с экспертом. То есть не использутся евенты на целевом чарте. Итого 11 итераций, с учетом эталонного индикатора в результате имеем 12 индикаторов на чарте.

В итоге вот как это выглядит в терминале


 
Alexey Da:
Все сделано именно так как вы сказали, за следующими исключениями:

  • эксперт. Соответственно инициализация при отсутствии подключения к серверу не выполнится.
  • изначально на чарт применяется темплейт с кучей объектов и одним единственным индикатором настройки которого вычитываются из tpl файла и добавляются в новый темплейт с модификацией входного параметра.
  • цикл организован через EventChartCustom на чарте с экспертом. То есть не использутся евенты на целевом чарте. Итого 11 итераций, с учетом эталонного индикатора в результате имеем 12 индикаторов на чарте.

В итоге вот как это выглядит в терминале


Да не при чем тут эксперт. Скриптом это делается. Нету там никаких инициализаций. Сразу start или OnStart. Вы делаете отсебячину и обходите задержки. И пытаетесь кого-то убедить. Вот сейчас идет нервная торговля, и теперь садись и пиши упрощенный вариант для проверки. Хотя коню понятно, что нельзя ChartSaveTemplate ставить в очередь. А после обновления, вообще звездец. Если Вы это не решаете, скажите Станиславу или Ренату на худой конец.

Скрипт для Вас нужно готовить, и это не просто так - вот я прикладываю вам сам рабочий скрипт, который не работает, но там прицепов куча и DLL-ки и экзешники, и еще куча всего, плюс кое-где жестко прописанные пути только для моего компа. Не могу я сейчас бросить торговлю и писать для Вас упрощенную версию для проверки. В функции void af_TTi() - там все дело (перенесена из библиотеки, чтобы вам хоть как-то понятно было).
Файлы:
 
Evgeny Chernyshev:
Пробовали воспроизвести описанную вами проблему на билдах 1031 и 1045. Функции ChartApplyTemplate() и ChartIndicatorDelete() работают корректно.
Поэтому от вас необходимо больше подробностей, в том числе шаблон, индикаторы, скрипты и тд.

Спасибо.
Вероятно целая группа функций ChartXXX() упала с новой версией.
Вчера описал проблему в сервисдеск. В моем случае после перезапуска перестает работать функция ChartSymbol(). 
т.е. тот же самый сценарий - при первом запуске все ок, при перезапуске советника - не работает. При перезапуске терминала все снова работает.

В советник который я пишу используется работа с объектами всех открытых графиков на терминале, для этого есть блок получения списка этих графиков и их параметров:
   int               graphs=0;
   long              graph_id[100];
   string            graph_symbol[100];
   long currChart=-1,prevChart;

   while(true) {
      if(currChart==-1) currChart=ChartFirst();
         else currChart = ChartNext(prevChart);
      if(currChart<0) break;
      prevChart=currChart;
      
      graph_id[graphs]              = currChart;
      graph_symbol[graphs]          = ChartSymbol(currChart);
      Print(graphs," ",currChart," ",ChartSymbol(currChart));
      graphs++;
      if(graphs>=100) break;
      }    

 обратите внимание на Print. А теперь на скриншот, слева то что мы получаем при первом запуске и нормальной работе. Справа то что мы получаем в случае перезапуска.
Как видите ID графиков не изменились, однако инструмент графика уже получить не получается через функцию ChartSymbol(), только для текущего графика - EURUSD.

Вероятно ChartPeriod, ChartGetInteger, CharGetString, CharGetDouble также не будут работать, не проверял. 
 
Windows 7 64 (сборка 7601).

 

Господа разработчики!

Сегодня обнаружил вот такую-же штуку, перебрал много вариантов - не работает.

Пока решил написать, оказывается проблема не только у меня.

Система Win7 Х64

Версия терминала: 1045

int ChartGetIDList(long &aList[]) {
int i=0;
long handle=0;
long chartID=ChartNext(handle);
  while(chartID!=-1) {
   handle=chartID;
     i++;
     ArrayResize(aList,i);
     aList[i-1]=handle; // Print(i," = ",chartID," = ",ChartSymbol(chartID));
   chartID=ChartNext(handle);
  }
  return(ArraySize(aList));
}

 

 

Аналогичная проблема в мт5, но немного легче.

Когда что-то начинает глючит, то помогает перезагрузка терминала, потом по какой-то причине "падает", и точно такие-же логи 

Код такой-же, как и в первом случае. Версия терминала:1525

 

 

 
Vitaly Muzichenko:

Господа разработчики!

Сегодня обнаружил вот такую-же штуку, перебрал много вариантов - не работает.

Пока решил написать, оказывается проблема не только у меня.

Система Win7 Х64

Версия терминала: 1045

int ChartGetIDList(long &aList[]) {
int i=0;
long handle=0;
long chartID=ChartNext(handle);
  while(chartID!=-1) {
   handle=chartID;
     i++;
     ArrayResize(aList,i);
     aList[i-1]=handle; // Print(i," = ",chartID," = ",ChartSymbol(chartID));
   chartID=ChartNext(handle);
  }
  return(ArraySize(aList));
}

 

 

Аналогичная проблема в мт5, но немного легче.

Когда что-то начинает глючит, то помогает перезагрузка терминала, потом по какой-то причине "падает", и точно такие-же логи 

Код такой-же, как и в первом случае. Версия терминала:1525

 

 

А взять рабочий код из справки кто мешает?

long currChart,prevChart=ChartFirst();
   int i=0,limit=100;
   Print("ChartFirst = ",ChartSymbol(prevChart)," ID = ",prevChart);
   while(i<limit)// у нас наверняка не больше 100 открытых графиков
     {
      currChart=ChartNext(prevChart); // на основании предыдущего получим новый график
      if(currChart<0) break;          // достигли конца списка графиков
      Print(i,ChartSymbol(currChart)," ID =",currChart);
      prevChart=currChart;// запомним идентификатор текущего графика для ChartNext()
      i++;// не забудем увеличить счетчик
     }

 скрипт, однократный запуск:

2017.02.07 18:53:28.067 Script chartlist USDCAD,M5: loaded successfully
2017.02.07 18:53:28.101 chartlist USDCAD,M5: initialized
2017.02.07 18:53:28.109 chartlist USDCAD,M5: ChartFirst = EURUSD ID = 130296731464218784
2017.02.07 18:53:28.116 chartlist USDCAD,M5: 0GBPUSD ID =130296731464218785
2017.02.07 18:53:28.119 chartlist USDCAD,M5: 1USDCHF ID =130296731464218786
2017.02.07 18:53:28.125 chartlist USDCAD,M5: 2USDCAD ID =130850896497812502
2017.02.07 18:53:28.126 chartlist USDCAD,M5: 3USDJPY ID =130851889821927502
2017.02.07 18:53:28.133 chartlist USDCAD,M5: 4AUDUSD ID =130850896497812503
2017.02.07 18:53:28.145 chartlist USDCAD,M5: 5NZDUSD ID =130850896497812504
2017.02.07 18:53:28.146 chartlist USDCAD,M5: 6EURGBP ID =130851889821927501
2017.02.07 18:53:28.147 chartlist USDCAD,M5: 7EURJPY ID =131271782861990001
2017.02.07 18:53:28.147 chartlist USDCAD,M5: 8USDCAD ID =131271782861990002
2017.02.07 18:53:28.147 chartlist USDCAD,M5: uninit reason 0
2017.02.07 18:53:28.152 Script chartlist USDCAD,M5: removed

советник, каждый тик:

2017.02.07 19:01:35.182 Expert chartlist EURUSD,H4: loaded successfully
2017.02.07 19:01:36.535 chartlist EURUSD,H4: initialized
2017.02.07 19:01:51.794 chartlist EURUSD,H4: ChartFirst = EURUSD ID = 130296731464218784
2017.02.07 19:01:51.806 chartlist EURUSD,H4: 0GBPUSD ID =130296731464218785
2017.02.07 19:01:51.806 chartlist EURUSD,H4: 1USDCHF ID =130296731464218786
2017.02.07 19:01:51.812 chartlist EURUSD,H4: 2USDCAD ID =130850896497812502
2017.02.07 19:01:51.820 chartlist EURUSD,H4: 3USDJPY ID =130851889821927502
2017.02.07 19:01:51.820 chartlist EURUSD,H4: 4AUDUSD ID =130850896497812503
2017.02.07 19:01:51.820 chartlist EURUSD,H4: 5NZDUSD ID =130850896497812504
2017.02.07 19:01:51.820 chartlist EURUSD,H4: 6EURGBP ID =130851889821927501
2017.02.07 19:01:51.821 chartlist EURUSD,H4: 7EURJPY ID =131271782861990001
2017.02.07 19:01:51.825 chartlist EURUSD,H4: 8USDCAD ID =131271782861990002
2017.02.07 19:01:51.825 chartlist EURUSD,H4: 9EURUSD ID =131271782861990003
2017.02.07 19:01:55.469 chartlist EURUSD,H4: ChartFirst = EURUSD ID = 130296731464218784
2017.02.07 19:01:55.481 chartlist EURUSD,H4: 0GBPUSD ID =130296731464218785
2017.02.07 19:01:55.486 chartlist EURUSD,H4: 1USDCHF ID =130296731464218786
2017.02.07 19:01:55.493 chartlist EURUSD,H4: 2USDCAD ID =130850896497812502
2017.02.07 19:01:55.493 chartlist EURUSD,H4: 3USDJPY ID =130851889821927502
2017.02.07 19:01:55.493 chartlist EURUSD,H4: 4AUDUSD ID =130850896497812503
2017.02.07 19:01:55.493 chartlist EURUSD,H4: 5NZDUSD ID =130850896497812504
2017.02.07 19:01:55.493 chartlist EURUSD,H4: 6EURGBP ID =130851889821927501
2017.02.07 19:01:55.493 chartlist EURUSD,H4: 7EURJPY ID =131271782861990001
2017.02.07 19:01:55.493 chartlist EURUSD,H4: 8USDCAD ID =131271782861990002
2017.02.07 19:01:55.493 chartlist EURUSD,H4: 9EURUSD ID =131271782861990003
2017.02.07 19:02:13.529 chartlist EURUSD,H4: ChartFirst = EURUSD ID = 130296731464218784
2017.02.07 19:02:13.530 chartlist EURUSD,H4: 0GBPUSD ID =130296731464218785
2017.02.07 19:02:13.530 chartlist EURUSD,H4: 1USDCHF ID =130296731464218786
2017.02.07 19:02:13.531 chartlist EURUSD,H4: 2USDCAD ID =130850896497812502
2017.02.07 19:02:13.533 chartlist EURUSD,H4: 3USDJPY ID =130851889821927502
2017.02.07 19:02:13.533 chartlist EURUSD,H4: 4AUDUSD ID =130850896497812503
2017.02.07 19:02:13.543 chartlist EURUSD,H4: 5NZDUSD ID =130850896497812504
2017.02.07 19:02:13.543 chartlist EURUSD,H4: 6EURGBP ID =130851889821927501
2017.02.07 19:02:13.549 chartlist EURUSD,H4: 7EURJPY ID =131271782861990001
2017.02.07 19:02:13.549 chartlist EURUSD,H4: 8USDCAD ID =131271782861990002
2017.02.07 19:02:13.549 chartlist EURUSD,H4: 9EURUSD ID =131271782861990003
2017.02.07 19:02:16.004 chartlist EURUSD,H4: ChartFirst = EURUSD ID = 130296731464218784
2017.02.07 19:02:16.007 chartlist EURUSD,H4: 0GBPUSD ID =130296731464218785
2017.02.07 19:02:16.008 chartlist EURUSD,H4: 1USDCHF ID =130296731464218786
2017.02.07 19:02:16.020 chartlist EURUSD,H4: 2USDCAD ID =130850896497812502
2017.02.07 19:02:16.020 chartlist EURUSD,H4: 3USDJPY ID =130851889821927502
2017.02.07 19:02:16.020 chartlist EURUSD,H4: 4AUDUSD ID =130850896497812503
2017.02.07 19:02:16.026 chartlist EURUSD,H4: 5NZDUSD ID =130850896497812504
2017.02.07 19:02:16.033 chartlist EURUSD,H4: 6EURGBP ID =130851889821927501
2017.02.07 19:02:16.033 chartlist EURUSD,H4: 7EURJPY ID =131271782861990001
2017.02.07 19:02:16.033 chartlist EURUSD,H4: 8USDCAD ID =131271782861990002
2017.02.07 19:02:16.033 chartlist EURUSD,H4: 9EURUSD ID =131271782861990003
2017.02.07 19:02:39.058 chartlist EURUSD,H4: ChartFirst = EURUSD ID = 130296731464218784
2017.02.07 19:02:39.071 chartlist EURUSD,H4: 0GBPUSD ID =130296731464218785
2017.02.07 19:02:39.074 chartlist EURUSD,H4: 1USDCHF ID =130296731464218786
2017.02.07 19:02:39.080 chartlist EURUSD,H4: 2USDCAD ID =130850896497812502
2017.02.07 19:02:39.085 chartlist EURUSD,H4: 3USDJPY ID =130851889821927502
2017.02.07 19:02:39.091 chartlist EURUSD,H4: 4AUDUSD ID =130850896497812503
2017.02.07 19:02:39.097 chartlist EURUSD,H4: 5NZDUSD ID =130850896497812504
2017.02.07 19:02:39.100 chartlist EURUSD,H4: 6EURGBP ID =130851889821927501
2017.02.07 19:02:39.106 chartlist EURUSD,H4: 7EURJPY ID =131271782861990001
2017.02.07 19:02:39.108 chartlist EURUSD,H4: 8USDCAD ID =131271782861990002
2017.02.07 19:02:39.108 chartlist EURUSD,H4: 9EURUSD ID =131271782861990003
2017.02.07 19:02:41.834 chartlist EURUSD,H4: ChartFirst = EURUSD ID = 130296731464218784
2017.02.07 19:02:41.845 chartlist EURUSD,H4: 0GBPUSD ID =130296731464218785
2017.02.07 19:02:41.856 chartlist EURUSD,H4: 1USDCHF ID =130296731464218786
2017.02.07 19:02:41.863 chartlist EURUSD,H4: 2USDCAD ID =130850896497812502
2017.02.07 19:02:41.866 chartlist EURUSD,H4: 3USDJPY ID =130851889821927502
2017.02.07 19:02:41.877 chartlist EURUSD,H4: 4AUDUSD ID =130850896497812503
2017.02.07 19:02:41.885 chartlist EURUSD,H4: 5NZDUSD ID =130850896497812504
2017.02.07 19:02:41.899 chartlist EURUSD,H4: 6EURGBP ID =130851889821927501
2017.02.07 19:02:41.906 chartlist EURUSD,H4: 7EURJPY ID =131271782861990001
2017.02.07 19:02:41.913 chartlist EURUSD,H4: 8USDCAD ID =131271782861990002
2017.02.07 19:02:41.913 chartlist EURUSD,H4: 9EURUSD ID =131271782861990003
2017.02.07 19:02:46.275 chartlist EURUSD,H4: ChartFirst = EURUSD ID = 130296731464218784
2017.02.07 19:02:46.286 chartlist EURUSD,H4: 0GBPUSD ID =130296731464218785
2017.02.07 19:02:46.293 chartlist EURUSD,H4: 1USDCHF ID =130296731464218786
2017.02.07 19:02:46.298 chartlist EURUSD,H4: 2USDCAD ID =130850896497812502
2017.02.07 19:02:46.305 chartlist EURUSD,H4: 3USDJPY ID =130851889821927502
2017.02.07 19:02:46.309 chartlist EURUSD,H4: 4AUDUSD ID =130850896497812503
2017.02.07 19:02:46.323 chartlist EURUSD,H4: 5NZDUSD ID =130850896497812504
2017.02.07 19:02:46.328 chartlist EURUSD,H4: 6EURGBP ID =130851889821927501
2017.02.07 19:02:46.331 chartlist EURUSD,H4: 7EURJPY ID =131271782861990001
2017.02.07 19:02:46.335 chartlist EURUSD,H4: 8USDCAD ID =131271782861990002
2017.02.07 19:02:46.335 chartlist EURUSD,H4: 9EURUSD ID =131271782861990003
2017.02.07 19:03:20.602 chartlist EURUSD,H4: uninit reason 1
2017.02.07 19:03:20.607 Expert chartlist EURUSD,H4: removed


 

 
ANG3110:
Да не при чем тут эксперт. Скриптом это делается. Нету там никаких инициализаций. Сразу start или OnStart. Вы делаете отсебячину и обходите задержки. И пытаетесь кого-то убедить. Вот сейчас идет нервная торговля, и теперь садись и пиши упрощенный вариант для проверки. Хотя коню понятно, что нельзя ChartSaveTemplate ставить в очередь. А после обновления, вообще звездец. Если Вы это не решаете, скажите Станиславу или Ренату на худой конец.

Скрипт для Вас нужно готовить, и это не просто так - вот я прикладываю вам сам рабочий скрипт, который не работает, но там прицепов куча и DLL-ки и экзешники, и еще куча всего, плюс кое-где жестко прописанные пути только для моего компа. Не могу я сейчас бросить торговлю и писать для Вас упрощенную версию для проверки. В функции void af_TTi() - там все дело (перенесена из библиотеки, чтобы вам хоть как-то понятно было).
Отлично.
В атаче рабочий скрипт. Работает и при отсутствии подключения к счету.
Файлы:
 
Vitalie Postolache:

А взять рабочий код из справки кто мешает?

выше я выложил свой вариант, это взятый из справки, чуть чуть подрихтовал косметически под свои нужды - ошибка появляется стабильно при перезапуске советника.
Причина обращения: