Как получить дату и время трендовой линии - страница 2

 
я не понимаю....

вот есть код:
//+------------------------------------------------------------------+
//|    Координата прайс1                                             |
//+------------------------------------------------------------------+
long IntGetPr1(const string name)
  {
   return ObjectGetInteger(0,prefix+name,OBJPROP_TIME);
   return ObjectGetDouble(0,prefix+name,OBJPROP_PRICE);   
  }
//+------------------------------------------------------------------+
//|   Координата прайс2                                              |
//+------------------------------------------------------------------+
long IntGetPr1(const string name)
  {
   return ObjectGetInteger(1,prefix+name,OBJPROP_TIME);
   return ObjectGetDouble(1,prefix+name,OBJPROP_PRICE);   
  }

тут уже строится ЛИНИЯ

   double WPMax=WindowPriceMax();
   double WPMin=WindowPriceMin();
   double PriceMax = WPMax-(WPMax-WPMin)/5;
   double PriceMin = WPMin+(WPMax-WPMin)/5;
   
   PutTrendLine(prefix+"line",Time[0],PriceMax,Time[10],PriceMin,DodgerBlue);

Как мне с помощью 1 кода взять данные с PutTrendLine   ???

 
vebster005:
я не понимаю....

вот есть код:

тут уже строится ЛИНИЯ

Как мне с помощью 1 кода взять данные с PutTrendLine   ???

поюзайте

https://docs.mql4.com/ru/objects/objectgettimebyvalue

https://docs.mql4.com/ru/objects/objectgetvaluebytime

https://docs.mql4.com/ru/objects/objectgetvaluebyshift

https://docs.mql4.com/ru/objects/objectgetshiftbyvalue

ObjectGetTimeByValue - Графические объекты - Справочник MQL4
ObjectGetTimeByValue - Графические объекты - Справочник MQL4
  • docs.mql4.com
При использовании функции на собственном графике осуществляется прямой доступ к графику, в то время как для получения свойств объекта с чужого графика всегда используется синхронный вызов. Синхронный вызов означает, что функция дожидается выполнения всех команд, которые были помещены в очередь графика перед её вызовом, и поэтому...
 
vebster005:

вот так:

Нет. Не так. Модификатор - четвертый аргумент. А первый аргумент - это идентификатор графика:

datetime dtTime1 = ObjectGetInteger(0,prefix+name,OBJPROP_TIME, 0);  // Координата по времени первой точки линии
datetime dtTime2 = ObjectGetInteger(0,prefix+name,OBJPROP_TIME, 1);  // Координата по времени второй точки линии
double fPrice1 = ObjectGetDouble(0,prefix+name,OBJPROP_PRICE, 0);    // Координата по цене первой точки линии
double fPrice2 = ObjectGetDouble(0,prefix+name,OBJPROP_PRICE, 1);    // Координата по цене второй точки линии
 
Ihor Herasko:

Нет. Не так. Модификатор - четвертый аргумент. А первый аргумент - это идентификатор графика:

Спасибо
как

long Pr1t1Pr2t2(const string name)
  {
   datetime dtTime1 = ObjectGetInteger(0,prefix+name,OBJPROP_TIME, 0);  // Координата по времени первой точки линии
   datetime dtTime2 = ObjectGetInteger(0,prefix+name,OBJPROP_TIME, 1);  // Координата по времени второй точки линии
   double fPrice1 = ObjectGetDouble(0,prefix+name,OBJPROP_PRICE, 0);    // Координата по цене первой точки линии
   double fPrice2 = ObjectGetDouble(0,prefix+name,OBJPROP_PRICE, 1);    // Координата по цене второй точки линии
   return false;
  }

связать с:

   PutTrendLine(prefix+"line",Time[0],PriceMax,Time[10],PriceMin,Black);

а данные перекинуть сюда:

   ARROW("название",время,прайс,black,5);  (5 это код стрелки)
 
vebster005:

как

связать с:

Что Вы подразумеваете под "связать"? Опишите логику алгоритма в словах.

 
Ihor Herasko:

Что Вы подразумеваете под "связать"? Опишите логику алгоритма в словах.

Я имею ввиду чтобы данные линии, были в ценовых метках, чтобы когда передвигаю линию метки были на хай и лоу линии.
Я не знаю как "сказать" ценовым метках что они связаны с линией
т.е например есть линия, у которой есть свои координаты :

 PutTrendLine(prefix+"line",Time[0],PriceMax,Time[10],PriceMin,Black);

но так же есть ценовая метка:

ARROW("название",время,прайс,black,5);  (5 это код стрелки)

как ей задать координаты? заместо времени и цены что написать?

 
vebster005:

Я имею ввиду чтобы данные линии, были в ценовых метках, чтобы когда передвигаю линию метки были на хай и лоу линии.
Я не знаю как "сказать" ценовым метках что они связаны с линией
т.е например есть линия, у которой есть свои координаты :

но так же есть ценовая метка:

как ей задать координаты? заместо времени и цены что написать?

Если ценовые метки стоят на крайних точках трендовой линии, то все просто:

  1. Получить координаты точки линии.
  2. Передать координаты ценовой метке.

datetime dtTime1 = ObjectGetInteger(0,prefix+name,OBJPROP_TIME, 0);  
double fPrice1 = ObjectGetDouble(0,prefix+name,OBJPROP_PRICE, 0);    
ARROW("метка1", dtTime1, fPrice1, clrBlack, 5);

datetime dtTime2 = ObjectGetInteger(0,prefix+name,OBJPROP_TIME, 1);  
double fPrice2 = ObjectGetDouble(0,prefix+name,OBJPROP_PRICE, 1);    
ARROW("метка2", dtTime2, fPrice2, clrBlack, 5);
Изначально можно еще проще. Ведь при создании линии есть координаты ее точек. Вот их и повторить в ценовых метках. Если же потом линия перемещается пользователем, то нужно отслеживать это действие в OnChartEvent() и сделать так, как указано выше.
 
Ihor Herasko:

Если ценовые метки стоят на крайних точках трендовой линии, то все просто:

  1. Получить координаты точки линии.
  2. Передать координаты ценовой метке.

Изначально можно еще проще. Ведь при создании линии есть координаты ее точек. Вот их и повторить в ценовых метках. Если же потом линия перемещается пользователем, то нужно отслеживать это действие в OnChartEvent() и сделать так, как указано выше.

Спасибо большое всё работает. Не думал что всё так просто, думал этот код нужно задать в отдельную функцию и уже её применять, но не мог понять как. Спасибо большое) всё работает как нужно)))) Спасибо!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 
Еще такой вопросик, как скрыть линию? можно указать время или цену огромную? или есть способ проще? у меня кнопка которая показывает линию, нужно чтобы при повторном нажатии линия скрылась
ObjectGetInteger(0,prefix+name,OBJPROP_TIME, 7000);
просто метки я так скрываю:
      ObjectSetInteger(0,prefix+"Метка_high",OBJPROP_XDISTANCE,7000);
      ObjectSetInteger(0,prefix+"Метка_low",OBJPROP_YDISTANCE,7000);
 
vebster005:

Спасибо большое всё работает. Не думал что всё так просто, думал этот код нужно задать в отдельную функцию и уже её применять, но не мог понять как. Спасибо большое) всё работает как нужно)))) Спасибо!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Можно и функцию. Так по-моему:

ARROW("метка1", getTime(name,0), getPrice(name,0), clrBlack, 5);
   
ARROW("метка2", getTime(name,1), getPrice(name,1), clrBlack, 5);

double getPrice(string objectName, int pointIndex){
   return ObjectGetDouble(0,prefix+objectName,OBJPROP_PRICE, pointIndex);
}
datetime getTime(string objectName, int pointIndex){
   return ObjectGetInteger(0,prefix+objectName,OBJPROP_TIME, pointIndex); 
}
Причина обращения: