Скачать MetaTrader 5

Вертикальный масштаб

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
laanaa
288
laanaa  
Кто знает, можно ли програмно изменять вертикальный масштаб графика? И вообще в каких единицах он измеряется?
laanaa
288
laanaa  

Допустим необходимо построить наклонную линиию под определенным углом на определенном масштабе.

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

Evgeniy Gutorov
4719
Evgeniy Gutorov  

double WindowPriceMax( int index=0)

Возвращает максимальное значение вертикальной шкалы указанного подокна текущего графика (0-главное окно графика, подокна индикаторов нумеруются с 1). Если индекс подокна не указан, то возвращается максимальное значение ценовой шкалы главного окна графика.

double WindowPriceMin( int index=0)

Возвращает минимальное значение вертикальной шкалы указанного подокна текущего графика (0-главное окно графика, подокна индикаторов нумеруются с 1). Если индекс подокна не указан, то возвращается минимальное значение ценовой шкалы главного окна графика.

int WindowBarsPerChart( )
Функция возвращает количество баров, помещающихся в окно текущего графика.

Weigth=(WindowPriceMax(0)-WindowPriceMin(0))/WindowBarsPerChart();

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


laanaa
288
laanaa  
forte928 >>:

double WindowPriceMax(int index=0)

Возвращает максимальное значение вертикальной шкалы указанного подокна текущего графика (0-главное окно графика, подокна индикаторов нумеруются с 1). Если индекс подокна не указан, то возвращается максимальное значение ценовой шкалы главного окна графика.

double WindowPriceMin(int index=0)

Возвращает минимальное значение вертикальной шкалы указанного подокна текущего графика (0-главное окно графика, подокна индикаторов нумеруются с 1). Если индекс подокна не указан, то возвращается минимальное значение ценовой шкалы главного окна графика.

int WindowBarsPerChart()
Функция возвращает количество баров, помещающихся в окно текущего графика.

Weigth=(WindowPriceMax(0)-WindowPriceMin(0))/WindowBarsPerChart();

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


Спасибо за ответ, но я хочу сначала программно задать масштаб, потом строить линию.

Evgeniy Gutorov
4719
Evgeniy Gutorov  

если програмно то нужно через API ..

'Как програмно снять/поставить разделитель периодов..' вот пример по поводу снятия/установки разделителя периода..

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

Александр
1082
Александр  
forte928 >>:

если програмно то нужно через API ..

'Как програмно снять/поставить разделитель периодов..' вот пример по поводу снятия/установки разделителя периода..

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

Подправил предыдущий скрипт. Об ограничениях, читать в ветке по ссылке.

#include <WinUser32.mqh>

//+------------------------------------------------------------------+
void start() {
   int hwnd=WindowHandle(Symbol(),Period()),
       htemp,hok,idcheck,max,min;
   string name="12345";
//----
   hwnd=GetAncestor(hwnd,2);                     // нашли главное окно
   if (hwnd!=0) {   
      PostMessageA(hwnd,WM_COMMAND,33157,0);     // открыли окно "Свойства" текущего графика
   }  
   else {
      Print("Error :",GetLastError());
      return;
   }
   hwnd=GetLastActivePopup(hwnd);                // нашли хэндл окна "Свойства" текущего графика
   htemp=GetWindow(hwnd,GW_CHILD);               // нашли 1-ое дочернее окно
   GetWindowTextA(htemp,name,6);                 // вытащили название окна
   if(name!="Общие") {                           // сверили с тем, что нам надо
      hok=GetDlgItem(hwnd,0x1);                  // нашли кнопку "OK"
      SendMessageA(hok,BM_CLICK,0,0);            // нажали кнопку "OK"
   }
   idcheck=IsDlgButtonChecked(htemp,0x4EB);      // получаем информацию о "положении" чекбокса
   if(idcheck==0) CheckDlgButton(htemp,0x4EB,1); // если выключен, то включаем
   max=GetDlgItem(htemp,0x4E7);                  // нашли хэндл поля ввода максимума
   SendMessageA(max,WM_CLEAR,0,0);               // послали сообщение очистить поле
   SetWindowTextA(max,"ВАШ_МАКСИМУМ");           // послали сообщение заполнить поле
   min=GetDlgItem(htemp,0x4E8);                  // нашли хэндл поля ввода максимума
   SendMessageA(min,WM_CLEAR,0,0);               // послали сообщение очистить поле
   SetWindowTextA(min,"ВАШ_МИНИМУМ");            // послали сообщение заполнить поле
   hok=GetDlgItem(hwnd,0x1);                     // нашли кнопку "OK"
   SendMessageA(hok,BM_CLICK,0,0);               // нажали кнопку "OK"
   return;
}
//+------------------------------------------------------------------+
Nikolay Demko
12513
Nikolay Demko  
laanaa0708 >>:

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

FALSE

угол считается : угол = d_Price / d_Bar, где d_Price = Price[0] - Price[n], d_Bar = Bar[0] - Bar[n]

и не меняется при изменении масштаба.

Изменяется лиш его визуализация(но на апсолютные параметры угла масштаб никак не влияет).

Evgeniy Gutorov
4719
Evgeniy Gutorov  
Talex писал(а) >>

Подправил предыдущий скрипт. Об ограничениях, читать в ветке по ссылке.

Молодец..

laanaa
288
laanaa  
Urain >>:

FALSE

угол считается : угол = d_Price / d_Bar, где d_Price = Price[0] - Price[n], d_Bar = Bar[0] - Bar[n]

и не меняется при изменении масштаба.

Изменяется лиш его визуализация(но на апсолютные параметры угла масштаб никак не влияет).

Мне все эти заморочки ни к чему. Я хочу построить линию под определенным углом при определенном масштабировании, на зависимо от

всяких: " угол= d_Price / d_Bar, где d_Price = Price[0] - Price[n], d_Bar = Bar[0] - Bar[n]",и угол этой линии должен меняться пропорционально масштабу.

Как понимаю простыми средствами MQL этого не сделать.

Может разработчики подскажут?

Nikolay Demko
12513
Nikolay Demko  
laanaa0708 >>:

Мне все эти заморочки ни к чему. Я хочу построить линию под определенным углом при определенном масштабировании, на зависимо от

всяких: " угол= d_Price / d_Bar, где d_Price = Price[0] - Price[n], d_Bar = Bar[0] - Bar[n]",и угол этой линии должен меняться пропорционально масштабу.

Как понимаю простыми средствами MQL этого не сделать.

Может разработчики подскажут?

Стройте, без проблем 0,5 это угол 45градусов 0,33 это угол 30 градусов. Какие тут заморочки?

laanaa
288
laanaa  
Urain >>:

Стройте, без проблем 0,5 это угол 45градусов 0,33 это угол 30 градусов. Какие тут заморочки?

Дайте код. Построю. 

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