Подскажите пожалуйста:
Как найти координаты окончания линии, чтобы разместить там текст?
ChartTimePriceToXY(..) от двух опорных точек и далее как в школе "уравнение прямой" :-)
только обновлять надо периодически/разумно и помнить что опорных точек может и не быть в граф.окне...мелкий нюанс, но масса кода
а как бар там определить?
Цену линии на окончании я могу определить,
а как бар там определить?
Все также - по уравнению прямой. Индекс бара должен получится отрицательным. По его индексу рассчитываете время, а потом ChartTimePriceToXY().
А можно еще проще поступить: перевести данные по опорным точкам сразу в XY и уже в этой системе координат использовать уравнение прямой.
А можно еще проще поступить: перевести данные по опорным точкам сразу в 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));}}}
А дальше не могу сообразить))
Цену линии на окончании я могу определить,
а как бар там определить?
если просто вывести метку, то там бар ни к чему...
узнали цену - перевели в координату Y
координату X взяли из параметров чарта (чтобы метка была справа, с должным вам отступом)
Так я могу найти опорные точки линии
А дальше не могу сообразить))
ну, время ведь нашли?
Значит и бар можно посчитать. Только если это будущее, то бар может сместиться из-за выходных или отсутствия котировок.
(Найденное время линии - Время нулевого бара) / Длительность бара = Количество баров от нулевого бара
Правый край окна графика я нашёл, пост от 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));}}}
Есть функция поиска цены линии по всей длине
но как определить бар видимости линии в окне графика
очевидно что также как и со временем, только с ценой)
- читаем максимальную и минимальную цены чарта;
- рассчитываем смещение линии на каждом баре (пунктов в баре);
- согласно направлению, считаем расстояние до низа (или верха) чарта в пунктах;
- делим это число на пункто/бар - получаем крайнюю точку (в барах).
очевидно что также как и со временем, только с ценой)
- читаем максимальную и минимальную цены чарта;
- рассчитываем смещение линии на каждом баре (пунктов в баре);
- согласно направлению, считаем расстояние до низа (или верха) чарта в пунктах;
- делим это число на пункто/бар - получаем крайнюю точку (в барах).
Как всё сложно))
А как найти самую крайнюю цену на графике (верх-низ) ?
Таким образом я смогу перебором найти нужный мне бар где цена линии не выходит за границу графика

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Подскажите пожалуйста:
Как найти координаты окончания линии, чтобы разместить там текст?