Как програмно двигать окна графиков внутри терминала?

 
Здравствуйте, хочу написать скрипт, который бы автоматически изменял размер окон графиков и располагал окна графиков в нужных мне местах внутри терминала, чтобы каждый раз руками не двигать

Не могу найти, какая функция отвечает за сдвиг окна графика в окне терминала. Т.е. например, как расположить график на N пикселей по оси X и N пикселей по оси Y от края рабочей области терминала.

Я нашел, как менять размер графиков: ChartSetInteger(ID, CHART_WIDTH_IN_PIXELS) ;  ChartSetInteger(ID,CHART_HEIGHT_IN_PIXELS)
А вот как сдвинуть окно графика в окне терминала не смог найти. 

Подскажите пожалуйста. Спасибо за ответы
ChartSetInteger - Операции с графиками - Справочник MQL4
ChartSetInteger - Операции с графиками - Справочник MQL4
  • docs.mql4.com
ChartSetInteger - Операции с графиками - Справочник MQL4
 

В MQL5 можно управлять графиками, только если открепить график от терминала. Это конечно не то, но на всякий случай:

CHART_IS_DOCKED

Окно графика закреплено. Если установить значение false, то график можно перетащить  за пределы терминала

bool

CHART_FLOAT_LEFT

Левая координата открепленного графика относительно виртуального экрана

int

CHART_FLOAT_TOP

Верхняя координата открепленного графика относительно виртуального экрана

int

CHART_FLOAT_RIGHT

Правая координата открепленного графика  относительно виртуального экрана

int

CHART_FLOAT_BOTTOM

Нижняя координата открепленного графика  относительно виртуального экрана

int

Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
  • www.mql5.com
Тип bool - Целые типы - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
yar.forex:
Здравствуйте, хочу написать скрипт, который бы автоматически изменял размер окон графиков и располагал окна графиков в нужных мне местах внутри терминала, чтобы каждый раз руками не двигать

Не могу найти, какая функция отвечает за сдвиг окна графика в окне терминала. Т.е. например, как расположить график на N пикселей по оси X и N пикселей по оси Y от края рабочей области терминала.

Я нашел, как менять размер графиков: ChartSetInteger(ID, CHART_WIDTH_IN_PIXELS) ;  ChartSetInteger(ID,CHART_HEIGHT_IN_PIXELS)
А вот как сдвинуть окно графика в окне терминала не смог найти. 

Подскажите пожалуйста. Спасибо за ответы

Здравствуйте!

Возможно, для этого, вам понадобится создать отдельный Профиль.

Профили предназначены для удобной работы с группами графиков. В профилях запоминаются:

  • графики, которые были открыты в момент сохранения профиля
  • расположение и размер этих графиков;
  • шаблоны, которые были применены к этим графикам.
Шаблоны и профили - Дополнительные возможности - Графики котировок, технический и фундаментальный анализ - Справка по MetaTrader 5
Шаблоны и профили - Дополнительные возможности - Графики котировок, технический и фундаментальный анализ - Справка по MetaTrader 5
  • www.metatrader5.com
Шаблоном называется набор настроек окна графика, который можно применить для других графиков. В шаблонах запоминаются: тип и цвет графика; цветовая...
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Графический интерфейс для запуска второго терминала мт5.

Nikolai Semko, 2019.04.10 19:20

Код же есть. Смотрите и разбирайтесь.

Можете открепить любое окно, убрать родной график и рисовать, что душе угодно. В том числе и собственный интерфейс.

#include <Canvas\iCanvas.mqh> //https://www.mql5.com/ru/code/22164

void OnStart()
  {
   ChartSetInteger(0,CHART_IS_DOCKED,false);   // Открепляем окно
   ChartSetInteger(0,CHART_SHOW,false);        // Выключаем график
   //ChartSetInteger(0,CHART_FOREGROUND,true); // Ценовой график на переднем плане
   double d=2.45;
   while(!IsStopped())
     {
      int x1=int((0.5+sin(d*1.25)/2)*1920);
      int x2=int((0.5+sin(d*2.12)/2)*1920);
      int y1=int((0.5+sin(d*1.75)/2)*1080);
      int y2=int((0.5+sin(d*2.65)/2)*1080);
      ChartSetInteger(0,CHART_FLOAT_LEFT,(int)fmin(x1,x2));
      ChartSetInteger(0,CHART_FLOAT_TOP,(int)fmin(y1,y2));
      ChartSetInteger(0,CHART_FLOAT_RIGHT,(int)fmax(x1,x2));
      ChartSetInteger(0,CHART_FLOAT_BOTTOM,(int)fmax(y1,y2));
      ChartChanged();
      Canvas.Erase();
      for (int i=0;i<W.Height;i++) Canvas.LineHorizontal(0,W.Width-1,i,Grad((double)i/W.Height));
      Canvas.Update();
      d+=0.006;
      Sleep(100);
     }
   ChartSetInteger(0,CHART_IS_DOCKED,true);
   ChartSetInteger(0,CHART_SHOW,true);
  }
//+------------------------------------------------------------------+

uint Grad(double p)
  {
   static uint Col[6]={0xFF0000FF,0xFFFF00FF,0xFFFF0000,0xFFFFFF00,0xFF00FF00,0xFF00FFFF};
   if(p>0.9999) return Col[5];
   if(p<0.0001) return Col[0];
   p=p*5;
   int n=(int)p;
   double k=p-n;
   argb c1,c2;
   c1.clr=Col[n];
   c2.clr=Col[n+1];
   return ARGB(255,c1.c[2]+uchar(k*(c2.c[2]-c1.c[2])+0.5),
               c1.c[1]+uchar(k*(c2.c[1]-c1.c[1])+0.5),
               c1.c[0]+uchar(k*(c2.c[0]-c1.c[0])+0.5));
  }

Пожалуй, только через открепление