Группа "Стол заказов MQL"

Рейтинг 2146



РЕКОМЕНДУЮ



Скрипт "Zoom In Zoom Out на всех графиках" MT4

Андрей, приветствую!
Стандартные функции MT4 (MT5) позволяют клавишами "+" и "-" масштабировать только активное окно графика.

Прошу написать скрипт позволяющий масштабировать все графики открытые в терминале нажатием на горячие клавиши.
Возможно это буду 2 скрипта:
скрипт № 1 — масштабирование в "+", по нажатии например клавиш «Ctrl»+"+".
скрипт № 2 — масштабирование в "-", по нажатии например клавиш «Ctrl»+"-".

Переключение между профилями недопустимо, в них другие пары, которые так же требуют одновременного масштабирования.
Применение одного шаблона ко всем графикам не допустимо, тк на них руками нанесены графические объекты.
Пользуюсь обоими терминалами, поэтому нужны скрипты для mt4 и mt5. Для mt5 оставим для следующего топика.
Благодарю Вас.

Пример изображений.
Было:

Стало:
  • 0
  • Просмотров: 1803
  • 15 марта 2021, 13:02
  • USDPump
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Вопрос по написанному советнику.
Следующая запись в группе  
Советник по времени
15 марта 2021
16 марта 2021

Брокер для ваших роботов, 15 лет на рынке

Комментарии (15)

+
0
не ко мне
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 15 марта 2021, 20:35
+
0
Коллеги, если кому-то встречался подобный скрипт на просторах интернета, будьте добры — дайте ссылку.
avatar

  9  USDPump Автор Сообщений: 62

  • 15 марта 2021, 22:13
+
0
набросал скрипт который уменьшает увеличивает масштаб.


//+------------------------------------------------------------------+
//|                                                      Mashtab.mq4 |
//|                                              Copyright 2021, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

#include <WinUser32.mqh>
int hwnd;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   hwnd = WindowHandle(Symbol(),Period());
   //PostMessageA(hwnd, WM_KEYDOWN, 0x6B, 0); // увеличение масштаба
   PostMessageA(hwnd, WM_KEYDOWN, 0x6D, 0); // уменьшение масштаба
  }
//+------------------------------------------------------------------+



можно подобным образом пробежаться по всем окнам. например бросаешь скрипт в одно окно и во всех изменяется масштаб.

на 22-е могу поставить такой вариант.
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 15 марта 2021, 22:57
+
0
Отличный вариант. Ждем.
avatar

  9  USDPump Автор Сообщений: 62

  • 16 марта 2021, 09:07
+
0
я пробежался по всем окнам, но размер меняет только в текущем, как я ни старался:


//+------------------------------------------------------------------+
//|                                                      Mashtab.mq4 |
//|                                              Copyright 2021, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

#include <WinUser32.mqh>

int hwnd=0;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- переменные для идентификаторов графиков
   int i=0;
   long currChart,prevChart=ChartFirst();
   Print("ChartFirst = ",ChartSymbol(prevChart)," ID = ",prevChart);
   while(i<100)// у нас наверняка не больше 100 открытых графиков
     {
      currChart=ChartNext(prevChart); // на основании предыдущего получим новый график
      if(currChart<0)
         break;          // достигли конца списка графиков
      Print(i,ChartSymbol(currChart)," ID =",currChart);
      hwnd = WindowHandle(ChartSymbol(currChart),ChartPeriod());
      PostMessageA(hwnd, WM_KEYDOWN, 0x6D, 0); // уменьшение масштаба
      prevChart=currChart;// запомним идентификатор текущего графика для ChartNext()
      i++;// не забудем увеличить счетчик
     }
  }
//+------------------------------------------------------------------+

avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 16 марта 2021, 21:20
+
0
Мне встретился скрипт P4L ChangeTF-All charts.mq4. Исходник есть в открытом доступе в интернете. Может быть он подскажет направление.

Если не допустимо размещать чужой код, дайте знать, я удалю данное сообщение.
*/

#property copyright "Copyright © 2017 v2 mods by pips4life. Original: 2010, zznbrm"
#property show_inputs

#import "user32.dll"
   int      PostMessageA(int hWnd,int Msg,int wParam,int lParam);
   int      GetWindow(int hWnd,int uCmd);
   int      GetParent(int hWnd);
#import

#define GW_HWNDFIRST 0
#define GW_HWNDNEXT  2
#define WM_COMMAND   0x0111

extern string INFO__TF_choice = "Current=All_match_this_chart, or: 1 5 15 30 H1 H4 Daily Weekly Monthly"; // Ex: 60 M60 or H1 all work the same.
extern string newTF           = "Current"; //Current, or 0, is change all charts to match current-chart TF.
                   
int start()
{      
   int eintTF = stringToTimeFrame(newTF);
   bool blnContinue = true;   
   int intParent = GetParent( WindowHandle( Symbol(), Period() ) );   
   int intChild = GetWindow( intParent, GW_HWNDFIRST );  
   int intCmd; 
   
   if( eintTF==0) eintTF = Period();
   
   switch( eintTF )
   {
      case PERIOD_M1:   intCmd = 33137;  break;
      case PERIOD_M5:   intCmd = 33138;  break;
      case PERIOD_M15:  intCmd = 33139;  break;
      case PERIOD_M30:  intCmd = 33140;  break;
      case PERIOD_H1:   intCmd = 35400;  break;
      case PERIOD_H4:   intCmd = 33136;  break;
      case PERIOD_D1:   intCmd = 33134;  break;
      case PERIOD_W1:   intCmd = 33141;  break;
      case PERIOD_MN1:  intCmd = 33334;  break;
   }
   
   if ( intChild > 0 )   
   {
      if ( intChild != intParent )   PostMessageA( intChild, WM_COMMAND, intCmd, 0 );
   }
   else      blnContinue = false;   
   
   while( blnContinue )
   {
      intChild = GetWindow( intChild, GW_HWNDNEXT );   
   
      if ( intChild > 0 )   
      { 
         if ( intChild != intParent )   PostMessageA( intChild, WM_COMMAND, intCmd, 0 );
      }
      else   blnContinue = false;   
   }
   
   // Now do the current window
   PostMessageA( intParent, WM_COMMAND, intCmd, 0 );
   return(0);
}



//+------------------------------------------------------------------+
int stringToTimeFrame(string tfs)
{
   int tf=0;
   StringToUpper(tfs); // This changes value of the var.
   tfs = StringTrimLeft(StringTrimRight(tfs)); 
   if      (tfs=="M0" || tfs=="0" || StringFind(tfs,"CUR",0) >= 0)     tf=Period(); // "CUR" *anywhere* in string, e.g. "0-CURRENT" or "CUR" 
   else if (tfs=="M1" || tfs=="1")     tf=PERIOD_M1;
   else if (tfs=="M5" || tfs=="5")     tf=PERIOD_M5;
   else if (tfs=="M15"|| tfs=="15")    tf=PERIOD_M15;
   else if (tfs=="M30"|| tfs=="30")    tf=PERIOD_M30;
   else if (tfs=="H1" || tfs=="60")    tf=PERIOD_H1;
   else if (tfs=="H4" || tfs=="240")   tf=PERIOD_H4;
   else if (tfs=="DAILY" || tfs=="D1"|| tfs=="D" || tfs=="1440")  tf=PERIOD_D1;
   else if (tfs=="WEEKLY" || tfs=="W1" || tfs=="W" || tfs=="10080") tf=PERIOD_W1;
   else if (tfs=="MONTHLY" || tfs=="MN1" || tfs=="MN" || tfs=="43200") tf=PERIOD_MN1;
   else tf=Period();   // Default if no other legal value.
   return(tf);
} // end of stringToTimeFrame
avatar

  9  USDPump Автор Сообщений: 62

  • 17 марта 2021, 01:57
+
0
в выходные посмотрю. сейчас нет возможности долго зависать на одном заказе
Редактирован: 17 марта 2021, 22:48
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 17 марта 2021, 21:58
+
0
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 20 марта 2021, 11:38
+
0
общими усилиями :) 


//+------------------------------------------------------------------+
//|                                                      Mashtab.mq4 |
//|                                              Copyright 2021, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

input int scale=2;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   long res=-1;
   long prev = ChartFirst();
   long curr = 0;

   for(int i=0; i<10; i++)
     {
      curr = ChartNext(prev);
      ChartSetInteger(curr,CHART_SCALE,0,scale);
      ChartGetInteger(curr,CHART_SCALE,0,res);
      ChartRedraw(curr);
      Print("Chart: ",curr," ",ChartSymbol(curr)," Scale: ",res);
      if(curr<0)
         break;
      prev=curr;
     }
  }
//+------------------------------------------------------------------+

avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 20 марта 2021, 17:09
+
0
Андрей!
Это бомба! Благодарствую!
Создал 5 одинаковых скриптов, изменил в строке «input int scale=2;» цифру 2 на цифры от 0 до 5. Масштабируются все графики, кроме первого. Возможно в пн будет нормально, когда пойдут тики.
avatar

  9  USDPump Автор Сообщений: 62

  • 20 марта 2021, 22:43
+
0
а зачем 5 когда можно сделать как в советнике при установке параметры можно задавать?
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 21 марта 2021, 13:16
+
0
Дело в том, что когда у меня создано 5 скриптов (х0… х5), графики масштабируются при двойном клике на нужный скрипт в панели Навигатор. При использовании одного файла Mashtab.mq4 (по ссылке на архив скриптов) открывается окно в котором нужно менять параметр масштаба. В данном случае меняется масштаб всех графиков, кроме первого. Первый меняется после двойного клика по нему. Жду понедельника и тиков.
avatar

  9  USDPump Автор Сообщений: 62

  • 21 марта 2021, 17:13
+
0
Файл «Mashtab.mq4» с с указанием номера масштаба корректно работает на всех графиках.
Пять скриптов (х0… х5) так же двойным кликом по скрипту в панели навигатора переключаются корректно, все кроме первого графика.
avatar

  9  USDPump Автор Сообщений: 62

  • 22 марта 2021, 10:59
+
0
Добавил к скриптам горячие клавиши:
Ctrl+1 — масштаб х1 (scale = 0)
Ctrl+2 — масштаб х2 (scale = 1)

Ctrl+6 — масштаб х6 (scale = 5).
Переключаться стало еще удобнее. Чем двойным кликом.
* Но первый график не переключается. Только руками или файлом из архива.

Андрей, если будет возможность подскажите пожалуйста, что нужно поправить в коде, чтобы в масштабировании (с горячими клавишами) участвовал первый открытый график.
Редактирован: 22 марта 2021, 15:31
avatar

  9  USDPump Автор Сообщений: 62

  • 22 марта 2021, 15:29
+
0
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 21 марта 2021, 14:44

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