Координаты окончания линии на графике

 

Подскажите пожалуйста:
Как найти координаты окончания линии, чтобы разместить там текст?


 
forex2030:

Подскажите пожалуйста:
Как найти координаты окончания линии, чтобы разместить там текст?


ChartTimePriceToXY(..) от двух опорных точек и далее как в школе "уравнение прямой" :-)

только обновлять надо периодически/разумно и помнить что опорных точек может и не быть в граф.окне...мелкий нюанс, но масса кода

 
Цену линии на окончании я могу определить,
а как бар там определить?
 
forex2030:
Цену линии на окончании я могу определить,
а как бар там определить?

Все также - по уравнению прямой. Индекс бара должен получится отрицательным. По его индексу рассчитываете время, а потом ChartTimePriceToXY().

А можно еще проще поступить: перевести данные по опорным точкам сразу в XY и уже в этой системе координат использовать уравнение прямой.

 
Ihor Herasko:

А можно еще проще поступить: перевести данные по опорным точкам сразу в XY и уже в этой системе координат использовать уравнение прямой.

Так я могу найти опорные точки линии

double pLine;
datetime tLine;
//------------------------+
void FindLines(string obj){
   string name;
   for(int cnt=ObjectsTotal()-1;cnt>=0;cnt--){
      name=ObjectName(cnt);
      if (StringFind(name,obj,0)>-1){
         pLine=NormalizeDouble(ObjectGetDouble(0,name,OBJPROP_PRICE,0),Digits);    
         tLine=datetime(ObjectGetInteger(0,name,OBJPROP_TIME,0));}}}

А дальше не могу сообразить))

 
forex2030:
Цену линии на окончании я могу определить,
а как бар там определить?

если просто вывести метку, то там бар ни к чему...

узнали цену - перевели в координату Y

координату X взяли из параметров чарта (чтобы метка была справа, с должным вам отступом)

 
forex2030:

Так я могу найти опорные точки линии

А дальше не могу сообразить))

ну, время ведь нашли?
Значит и бар можно посчитать. Только если это будущее, то бар может сместиться из-за выходных или отсутствия котировок.

(Найденное время линии - Время нулевого бара) / Длительность бара = Количество баров от нулевого бара

 

Правый край окна графика я нашёл, пост от  Ihor Herasko

   int nBars = int(ChartGetInteger(0,CHART_WIDTH_IN_BARS));
   int nFirstBar = int(ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR));
   datetime dtRightBar = (nBars<nFirstBar) ? iTime(NULL,0,nFirstBar-nBars) : iTime(NULL,0,1)+(nBars-nFirstBar)*PeriodSeconds();

а если трендовая линия заканчивается далеко от правого края окна

 


Есть функция поиска цены линии по всей длине
но как определить бар видимости линии в окне графика

void start()
{
   FindLines("Имя линии");
   Print(LinePrc(iBarShift(NULL,0,tLine1),pLine1,iBarShift(NULL,0,tLine2),pLine2,iBarShift(NULL,0,Time[39]))); 
}
//+----------------------------------------------------------------------------+
//|  х1 - бар первой координаты линии                                          |
//|  у1 - цена первой координаты линии                                         |
//|  х2 - бар второй координаты линии                                          |
//|  у2 - цена второй координаты линии                                         |
//|  n  - бар, для которого вернёт цену                                        |
//+----------------------------------------------------------------------------+
double LinePrc(double x1, double y1, double x2, double y2, double n) {
  double pr=0.0;
  if(x1!=NULL && y1!=NULL && x2!=NULL && y2!=NULL)
     pr=NormalizeDouble((x2==x1)?y1:(y2-y1)/(x2-x1)*(n-x1)+y1,Digits);
return(pr);}
//+------------------------------------------------------------------+
//| Координаты точек линии по имени                                  |
//+------------------------------------------------------------------+
double pLine1,pLine2;
datetime tLine1,tLine2;

void FindLines(string obj){
   string name;
   for(int cnt=ObjectsTotal()-1;cnt>=0;cnt--){
      name=ObjectName(cnt);
      if(StringFind(name,obj,0)>-1){
         pLine1=NormalizeDouble(ObjectGetDouble(0,name,OBJPROP_PRICE1),Digits);    
         tLine1=datetime(ObjectGetInteger(0,name,OBJPROP_TIME1));
         pLine2=NormalizeDouble(ObjectGetDouble(0,name,OBJPROP_PRICE2),Digits);    
         tLine2=datetime(ObjectGetInteger(0,name,OBJPROP_TIME2));}}} 
 
forex2030:


Есть функция поиска цены линии по всей длине
но как определить бар видимости линии в окне графика

очевидно что также как и со временем, только с ценой)

- читаем максимальную и минимальную цены чарта;
- рассчитываем смещение линии на каждом баре (пунктов в баре);
- согласно направлению, считаем расстояние до низа (или верха) чарта в пунктах;
- делим это число на пункто/бар - получаем крайнюю точку (в барах).

 
Taras Slobodyanik:

очевидно что также как и со временем, только с ценой)

- читаем максимальную и минимальную цены чарта;
- рассчитываем смещение линии на каждом баре (пунктов в баре);
- согласно направлению, считаем расстояние до низа (или верха) чарта в пунктах;
- делим это число на пункто/бар - получаем крайнюю точку (в барах).

Как всё сложно))

А как найти самую крайнюю цену на графике (верх-низ) ?
Таким образом я смогу перебором найти нужный мне бар где цена линии не выходит за границу графика

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