построение трендовой линии по координатам, заданному углу

 

Вопрос по данной теме:

1. Задана вертикальная линия, по дате и времени (VLINE);

2. Задана горизонтальная линия, по котировке (HLINE);

3. Как вписать код программы отображения линии проходящей через точку пересечения этих линий и под углом ( например 45 градусов) во 2-й и 4-й четвертях окружности (геометрия) или юго-восток, или на 16-30, кто как поймет?

 
if(ObjectCreate("OBJ_TRENDBYANGLE", OBJ_TRENDBYANGLE, 0, time1, price1))
 {
 ObjectSet("OBJ_TRENDBYANGLE", OBJPROP_ANGLE, ugol);

}
 
rlx:

Благодарю. Прекрасное решение кода!
 
markos:
Благодарю. Прекрасное решение кода!

Если можно, ещё вопрос в продолжение этой темы.

На графике есть горизонталь (котировка) и эта наклонная линия.

Необходимо: через точку пересечения этих линий построить вертикальную линию (скажем так, справа от существующей левой, паралельную), или решение через построение угла, это не принципиально. В конечном итоге мне нужен КВАДРАТ на графике, с присвоением имени каждой линии, что-бы в дальнейшем их можно было находить через FIND.

Заранее бладарю за решение.

 
if(ObjectCreate("OBJ_TRENDBYANGLE", OBJ_TRENDBYANGLE, 0, time1, price1))
{
ObjectSet("OBJ_TRENDBYANGLE", OBJPROP_ANGLE, ugol);

}

Если можно, ещё вопрос в продолжение этой темы.

На графике есть горизонталь (котировка) и эта наклонная линия.

Необходимо: через точку пересечения этих линий построить вертикальную линию (скажем так, справа от существующей левой, паралельную), или решение через построение угла, это не принципиально. В конечном итоге мне нужен КВАДРАТ на графике, с присвоением имени каждой линии, что-бы в дальнейшем их можно было находить через FIND.

Заранее бладарю за решение.
 
Что значит "квадрат" в Вашем случае? "Один бар на один пункт"?
 
if(ObjectCreate("наклонная1", OBJ_TRENDBYANGLE, 0, time1, price1))
 {
 ObjectSet("наклонная1", OBJPROP_ANGLE, ugol);

}
if(ObjectCreate("наклонная2", OBJ_TRENDBYANGLE, 0, time1, price1))
 {
 ObjectSet("наклонная2", OBJPROP_ANGLE, -ugol);

}
int t1 = ObjectGetShiftByValue("наклонная1", ценановойгорризонтали);
int t2 = ObjectGetShiftByValue("наклонная2", ценановойгорризонтали);
t1 = MathMax(t1, t2);
ObjectCreate("леваясторона", OBJ_VLINE, 0, Time[t1], NULL);
 
ObjectCreate("праваясторона", OBJ_VLINE, 0, price1+price1-Time[t1], NULL);
 
markos:

Если можно, ещё вопрос в продолжение этой темы.

На графике есть горизонталь (котировка) и эта наклонная линия.

Необходимо: через точку пересечения этих линий построить вертикальную линию (скажем так, справа от существующей левой, паралельную), или решение через построение угла, это не принципиально. В конечном итоге мне нужен КВАДРАТ на графике, с присвоением имени каждой линии, что-бы в дальнейшем их можно было находить через FIND.

Заранее бладарю за решение.


y=ax+b: наклонная

y=c: горизонтальная

x=d: вертикальная

=> ad+b=c - находите все, что угодно (Алгебра и элементарные функции, 6-7 класс, раньше Кочетков был автором, сейчас - не знаю)

Если нужен квадрат - определяетесь с тем, что есть квадрат; ну, а построить вертикаль в точке d, уверен - проблем не вызовет.

 
rlx:


ObjectCreate("праваясторона", OBJ_VLINE, 0, price1+price1-Time[t1], NULL);


Поправьте пожалуста. Этот оператор не срабатывает.

Прилагаю код. Не работает часть отрисовки правой части.

extern double H_1 = 1.4800; // уровень верхней линии
extern double L_1 = 1.3000; // уровень нижней линии
datetime HL = D'2011.04.01 00:00'; // левая сторона квадрата

int init()
{
//---ЛЕВАЯ ВЕРТИКАЛЬ---------
ObjectCreate("левая вертикаль",OBJ_VLINE,0,HL,0);

//--ВЕРХНЯ ЛИНИЯ --
ObjectCreate("верхняя горизонталь",OBJ_HLINE,0,0,H_1); // создаем объект "верхняя горизонталь"
ObjectSet("верхняя горизонталь",OBJPROP_COLOR,Yellow); // изменяем цвет "верхняя горизонталь" желтый
ObjectSet("верхняя горизонталь",OBJPROP_STYLE,STYLE_DOT); // теперь линия "верхняя горизонталь" будет пунктирной
ObjectSet("верхняя горизонталь",OBJPROP_WIDTH,1); // теперь линия "верхняя горизонталь" толщиной в 1 пикселя
//-НИЖНЯЯ ЛИНИЯ --
ObjectCreate("нижняя линия",OBJ_HLINE,0,0,L_1); // создаем объект "нижняя линия"
ObjectSet("нижняя линия",OBJPROP_COLOR,Yellow); // изменяем цвет "нижняя линия" желтый
ObjectSet("нижняя линия",OBJPROP_STYLE,STYLE_DOT); // теперь линия "нижняя линия" будет пунктирной
ObjectSet("нижняя линия",OBJPROP_WIDTH,1); // теперь линия "нижняя линия" толщиной в 1 пикселя


//-----НАКЛОННАЯ 1
if(ObjectCreate("НАКЛОННАЯ 1", OBJ_TRENDBYANGLE, 0, HL, H_1))
{
ObjectSet("НАКЛОННАЯ 1",OBJPROP_COLOR,Yellow); // изменяем цвет желтый
ObjectSet("НАКЛОННАЯ 1", OBJPROP_ANGLE, 315);
ObjectSet("НАКЛОННАЯ 1",OBJPROP_STYLE,STYLE_DOT); // теперь линия "НАКЛОННАЯ 1" будет пунктирной
ObjectSet("НАКЛОННАЯ 1",OBJPROP_WIDTH,1);
}

//----НАКЛОННАЯ 2
if(ObjectCreate("НАКЛОННАЯ 2", OBJ_TRENDBYANGLE, 0, D'2011.04.01 00:00', L_1))
{
ObjectSet("НАКЛОННАЯ 2",OBJPROP_COLOR,Yellow); // изменяем цвет желтый
ObjectSet("НАКЛОННАЯ 2", OBJPROP_ANGLE, 45);
ObjectSet("НАКЛОННАЯ 2",OBJPROP_STYLE,STYLE_DOT); // теперь линия "НАКЛОННАЯ 2" будет пунктирной
ObjectSet("НАКЛОННАЯ 2",OBJPROP_WIDTH,1);
}

//-----ПРАВАЯ СТОРОНА ------------------------------------- ЭТА ЧАСТЬ НЕ РАБОТАЕТ

int t1 = ObjectGetShiftByValue("НАКЛОННАЯ 1", L_1);
int t2 = ObjectGetShiftByValue("НАКЛОННАЯ 2", H_1);
t1 = MathMax(t1, t2);
ObjectCreate("правая сторона", OBJ_VLINE, 0, H_1+H_1-Time[t1], NULL);
ObjectSet("правая сторона",OBJPROP_COLOR,Yellow); // изменяем цвет желтый
ObjectSet("правая сторона",OBJPROP_STYLE,STYLE_DOT); // теперь линия "LD_1" будет пунктирной
ObjectSet("правая сторона",OBJPROP_WIDTH,1);


return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+

И если можно, дайте пожалуста ссылку на "литературу" по работе с координатами, и их дальнейшее использование с графиками.

Заранее благодарен. Сергей.

 
ObjectCreate("правая сторона", OBJ_VLINE, 0, H_1+H_1-Time[t1], NULL);

1) Н_1 --- это цена

Нужно использовать HL.

2) int t1 = ObjectGetShiftByValue("НАКЛОННАЯ 1", L_1); --- при обращении, объект "НАКЛОННАЯ 1" еще не создан.

Т.к. при инициализации init() ------ "НАКЛОННАЯ 1" еще только создается. И может быть доступна только на следуещем тике.

3) Если вы используете создание объектов в Init(), то искать правую сторону нужно через формулы прямых, короче геометрию школьную вспоминать.

Или же перемещать код в Start()

Вы куда хотите встроить код создания квадрата.: в советник, индикатор, скрипт?

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