Как я могу свернуть список графиков со scrypt для mql5? - PullRequest
0 голосов
/ 18 декабря 2018

В терминале открыто несколько графиков, например: AUDCAD, DKKSEK, AUDJPY, EURZAR, USDCZK, USDCHF.

И существует множество целевых графиков: DKKSEK, EURZAR, USDCHF.

Как свернуть все окна графиков, кроме окон графиков целевых графиков?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Минимизация графиков больше не работает в MQL5.Лучше всего перебирать графики и закрывать те, которые вам не нужны, в то время как вывести нужные вам диаграммы наверх.Вот пример.

#define forEachInArray(TYPE, VAR, ARRAY) TYPE VAR;int SIZE##VAR=ArraySize(ARRAY);\
   for(int I##VAR=0;(I##VAR<SIZE##VAR)&&(((VAR=ARRAY[I##VAR])==NULL)||true);I##VAR++)
#define forEachChartId(VAR) \
   for(long VAR=ChartFirst();VAR>=0;VAR=ChartNext(VAR))


#include <charts/chart.mqh>
void OnStart()
{
   string targets[] = {"EURUSD", "GBPJPY", "EURCAD"};
   forEachChartId(id) {
      if(id == ChartID())
         continue;
      chart_manage(id, targets);
   }
   chart_manage(ChartID(), targets);
}

void chart_manage(long id, string &targets[])
{
   CChart chart;
   chart.Attach(id);
   forEachInArray(string, target, targets) {
      if(chart.Symbol() == target) {
         chart.BringToTop();
         chart.Detach();
         break;
      }
   }
}

Не забудьте всегда закрывать график, на котором запущен скрипт last !

0 голосов
/ 18 декабря 2018
void loopOverCharts()//loop over all the charts
  {
   long currChart,prevChart=ChartFirst(); 
   int i=0,limit=100; 
   processChart(prevChart);
   while(i<limit)
     { 
      currChart=ChartNext(prevChart);
      if(currChart<0) break;
      processChart(currChart);
      prevChart=currChart;
      i++;
     }
  }
void processChart(const long chartId)// process each chart
  {
   const string arrayOfSymbols[]={DKKSEK, EURZAR, USDCHF);
   //going over array of symbols to figure out whether need to minimize of not
   bool symbolToMinimize=true;
   for(int i=ArraySize(arrayOfSymbols)-1;i>=0;i--)
     {
      if(ChartSymbol(chartId)==arrayOfSymbols[i])
        {
         symbolToMinimize=false;
         break;
        }
     }
   //if do not have chart symbol in the list - minimize it
   if(symbolToMinimize)
       ChartSetInteger(chartId,CHART_IS_MINIMIZED,true);
  }
...