о работе функции iCustom или как скопировать буфер индикатора! - страница 2

 
Denis Naumov:


ну понятно, а все значения индикаторов не получается выгрузить в буфер?  

  double val=iCustom(NULL,0,"SampleInd",13,1,0);


В цикле можно. 

for (int i=0;i<=Bars();i++)
{
   double val=iCustom(NULL,0,"SampleInd",13,1,i);
   Print(val);
}
 

в цикле как раз и не получается... он на каждый цикл отдельно создает индикатор


ладно, решил в лоб идти 

как правильно сделать вызов 

функции для определения цвета пикселей в МТ4? 

#import "gdi32.dll"

int    GetPixel(int x1,int x,int y);

#import   

-------- 



   ChartTimePriceToXY(0,0,iTime(Symbol(),0,1),iLow(Symbol(),0,1),low_x,low_y); // находим координаты нижней точки прошлой свечки 

   ChartTimePriceToXY(0,0,iTime(Symbol(),0,1),iHigh(Symbol(),0,1),high_x,high_y); // находим координаты нижней точки прошлой свечки 

дальше пишу int cl=GetPixel(wh,low_x,low_y); и возвращает -1 

может кто подскажет что не так делаю 

 
Denis Naumov:

Добрый день! 

мне нужно вытащить данные из пользовательского индикатора и при этом не нагружать систему перерасчетом индикатора N-количество раз. 

возможно ли в MQL4 вызвать однократно функцию iCustom и скопировать содержимое буфера индикатора ? 

если да то как это сделать? 


вот статья по теме

https://www.mql5.com/ru/articles/19

Передача данных между индикаторами - простое решение наболевшей проблемы
Передача данных между индикаторами - простое решение наболевшей проблемы
  • 2010.01.15
  • Alexey Subbotin
  • www.mql5.com
Мы хотим создать среду, которая предоставляла бы возможность обращения к показаниям индикаторов, присоединенных к тому или иному графику терминала, и обладала бы следующими свойствами: отсутствие копирования данных; минимальное вмешательство в код уже имеющихся инструментов при необходимости их «подключения»; реализация преимущественно средствами MQL (естественно, механизм DLL нам все же потребуется, однако, как мы увидим, его использование будет ограничиваться не более чем десятком строк на С++). В статье объясняется, как можно довольно просто создать в терминале MetaTrader программную среду, обеспечивающую средства для доступа к буферам индикаторов из других MQL-программ.
 
Denis Naumov:

в цикле как раз и не получается... он на каждый цикл отдельно создает индикатор

Значит, среди настроечных параметров индикатора имеются строковые переменные. Уберите их оттуда и все будет хорошо.
 
Denis Naumov:

как правильно сделать вызов 

функции для определения цвета пикселей в МТ4? 


дальше пишу int cl=GetPixel(wh,low_x,low_y); и возвращает -1 

может кто подскажет что не так делаю 


Скорее всего, неправильный дескриптор графика. Нужно проверить, чему равно wh. Скорее всего INVALID_HANDLE.
 
Ihor Herasko:

Скорее всего, неправильный дескриптор графика. Нужно проверить, чему равно wh. Скорее всего INVALID_HANDLE.

дискриптор корректно возвращается скриншот http://SSMaker.ru/17d425ce/
 
Denis Naumov:

дискриптор корректно возвращается скриншот http://SSMaker.ru/17d425ce/

В msdn написано, что первый параметр GetPixel() - не дескриптор окна, а дескриптор устройства (HDC) для рисования. Поэтому и не получается. 
 
Denis Naumov:

дискриптор корректно возвращается скриншот http://SSMaker.ru/17d425ce/


Сначала получаем дескриптор устройства, а потом уже его скармливаем функции GetPixel():

#import "gdi32.dll"
   color    GetPixel(int nHandle, int x, int y);
#import "user32.dll"
   int    GetDC(int nHandle);
#import   

void OnStart()
{
   int nHandle = WindowHandle(Symbol(), Period());
   if (nHandle == INVALID_HANDLE)
   {
      Alert("Invalid chart handle!");
      return;
   }
   
   int hDC = GetDC(nHandle);
   color cClr = GetPixel(hDC, 10, 20);
   
   Alert("Color: ", cClr);
}

Тогда все верно выходит. Но в любом случае это не выход с Вашей задачей.

 
Ihor Herasko:


Сначала получаем дескриптор устройства, а потом уже его скармливаем функции GetPixel():

Тогда все верно выходит. Но в любом случае это не выход с Вашей задачей.


Спасибо!!!  про это забыл GetDC(nHandle); 

с этим функционалом можно писать робота который будет реагировать на стрелочки и прочие вещи! 

 
Denis Naumov:

в цикле как раз и не получается... он на каждый цикл отдельно создает индикатор

...

Значит iCustom() вызывается с неправильными параметрами
Причина обращения: