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

 
forex2030:

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

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

ChartGetDouble(0,CHART_PRICE_MAX,0);

ChartGetDouble(0,CHART_PRICE_MIN,0);
 
forex2030:

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


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

 

transcendreamer:

ChartGetDouble(0,CHART_PRICE_MAX,0);
ChartGetDouble(0,CHART_PRICE_MIN,0);

Спасибо, буду маневрировать с крайними ценами))

 

forex2030:

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

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

перебор не нужен, и ничего нет сложного
Если линя направлена вниз, то формула примерно такая:

Количество баров до низа = (Цена второй точки линии - Минимальная цена чарта) / ((Цена первой точки линии - Цена второй точки линии) / Количество баров между точками)

 

Чем можно заменить ??

ChartGetDouble(0,CHART_PRICE_MAX,0);
ChartGetDouble(0,CHART_PRICE_MIN,0);

Если тестирование без визуализации или оптимизация,
то чем можно заменить крайние точки графика?

 
forex2030:

Чем можно заменить ??

Если тестирование без визуализации или оптимизация,
то чем можно заменить крайние точки графика?

Изначально задача была такая: отобразить метку на графике в точке окончания линии. Как Вы собираетесь это сделать, если графика нет? Рассчитать то все равно можно, но уже в другой системе координат (цена-время), а про пикселы говорить в этом случае невозможно.

 
Ihor Herasko:

Изначально задача была такая: отобразить метку на графике в точке окончания линии. Как Вы собираетесь это сделать, если графика нет?

Тут уже другая ситуация, рассчитываю угол трендовой линии
И эти значения приходят =0.0, графика то нет

Можно ли их заменить?

Вот функция которая рассчитывает угол линии

//+------------------------------------------------------------------+
//|  Значение угла трендовой линии в градусах                        |
//+------------------------------------------------------------------+
double LineAngle(datetime x1,double y1,datetime x2,double y2){

   double PriceMAX=ChartGetDouble(0,CHART_PRICE_MAX,0);
   double PriceMIN=ChartGetDouble(0,CHART_PRICE_MIN,0);
   double Price1proc=((PriceMAX-PriceMIN)/_Point)/100;

   x1=iBarShift(NULL,0,(datetime)x1);
   x2=iBarShift(NULL,0,(datetime)x2);

   double x1x2=0.0,y1y2=0.0,x1x2_proc=0.0,y1y2_proc=0.0,ugol=0.0;

   x1x2=double(MathAbs(x1-x2)*_Period*60);
   y1y2=MathAbs(y1-y2)/_Point;

   double Bar1proc=(double)(ChartGetInteger(0,CHART_WIDTH_IN_BARS,0)*_Period*60)/100;
   if(Bar1proc!=0.0) x1x2_proc=x1x2/Bar1proc;
   if(Price1proc!=0.0) y1y2_proc=y1y2/Price1proc;
   ugol=MathArctan(y1y2_proc/x1x2_proc)*(180/3.1415926535);

   if(y1!=y2) ugol=NormalizeDouble(ugol*(-1),1); else ugol=0.0;
return(ugol);}

Но при тестировании или оптимизации графика нет и в итоге приходят значения угла =0.0

 
forex2030:

Тут уже другая ситуация, рассчитываю угол трендовой линии
И эти значения приходят =0.0, графика то нет

Можно ли их заменить?

Если чарта нет, то никак не заменить. А для расчета угла вовсе не нужны максимум и минимум чарта. Используйте уравнение прямой вида:

y = kx + b

где:

y - цена,

x - индекс бара,

b - точка пересечения с осью ординат (цены)

k - угловой коэффициент. Это как раз то, что ищете (тангенс угла наклона к оси абсцисс, в радианах)

Чтобы рассчитать k и b, нужно взять две любые точки, лежащие на линии, т. е. будут известны по два значения x и y. Это позволяет составить систему из двух уравнений. Имея два уравнения и два неизвестных, легко находятся эти два неизвестных.
 
Ihor Herasko:

Если чарта нет, то никак не заменить. А для расчета угла вовсе не нужны максимум и минимум чарта.

Можно поправить эту функцию, чтобы не зависеть от окна графика?

//+------------------------------------------------------------------+
//|  Значение угла трендовой линии в градусах                        |
//+------------------------------------------------------------------+
double xAngle(datetime x1,double y1,datetime x2,double y2)
{
   if(x1==0||x2==0||y1==y2) return(0);
   int xx1,yy1,xx2,yy2;

   ChartTimePriceToXY(0,0,x1,y1,xx1,yy1);
   ChartTimePriceToXY(0,0,x2,y2,xx2,yy2);

   double ugol=MathArctan((double)MathAbs(yy1-yy2)/(double)MathAbs(xx1-xx2))*(180/3.1415926535);
   if(y1!=y2) ugol=NormalizeDouble(ugol*(-1),1); else ugol=0.0;
return(ugol);}
 
forex2030:

Можно поправить эту функцию, чтобы не зависеть от окна графика?

Каждый чарт имеет масштаб, если чарта нет - устанавливать свой масштаб.

Но чтобы данные были постоянными (одинаковыми для всех), то и масштаб должен быть фиксированным.

1

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