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

 

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

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

 

double WindowPriceMax( int index=0)

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

double WindowPriceMin( int index=0)

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

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

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

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


 
forte928 >>:

double WindowPriceMax(int index=0)

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

double WindowPriceMin(int index=0)

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

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

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

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


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

 

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

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

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

 
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;
}
//+------------------------------------------------------------------+
 
laanaa0708 >>:

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

FALSE

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

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

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

 
Talex писал(а) >>

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

Молодец..

 
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 этого не сделать.

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

 
laanaa0708 >>:

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

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

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

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

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

 
Urain >>:

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

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

Причина обращения: