Все верно ... А мне нужно длину Красной лини... Представьте, а если эти две параллельные линии будут вертикальные, что покажет синяя линия ?
Не исключён вариант, что эта красная линия не будет перпендикулярной в связи с тем, что её можно провести исключительно по цене и времени бара.
Как вариант, вижу такую последовательность: Определяем наклон трендовой или строим трендовую по углу и исходя из этого получаем угол перпендикуляра по которому и считаем расстояние до второй линии.
Не исключён вариант, что эта красная линия не будет перпендикулярной в связи с тем, что её можно провести исключительно по цене и времени бара.
Как вариант, вижу такую последовательность: Определяем наклон трендовой или строим трендовую по углу и исходя из этого получаем угол перпендикуляра по которому и считаем расстояние до второй линии.
Все верно ... А мне нужно длину красной лини. Представьте, а если эти две параллельные линии будут вертикальные, что покажет синяя линия ? (под разным углом, будет разная длина)
Если на белом листе нарисовать две параллельные линии на расстоянии друг от друга 10 см (Рис.7), то это лист можно крутить как угодно под любым углом и будут все те же 10 см (Рис.6).
Я что-то запутался в Ваших целях...
Расскажите, что у Вас есть изначально, пожалуйста. Мне вот не ясно, как можно задавать вопрос о расстоянии, если у нас нет параллельных линий, а если они, есть то как строится вторая линия без этих данных?
Выше Вы привели код двух линий, но, позвольте, там параллельности нет вообще.
Или задача как раз построить параллельные линии? Или проверить, параллельны ли линии? Или просто найти разницу между двумя любыми линиями в любой момент времени?
Пример с листом очень прост, а на графике может быть другая картина из-за дыр в истории, как пример - разрежьте лист на три части и среднюю уберите, соедините две оставшиеся части и Вы увидите, что линии стали кривыми, но расстоянием между ними сохранилось. Соответственно, нам можно замерить расстояние в любой точке, где линия ещё не разрезана, а для этого нам нужны координаты в двух точках без дыр для каждой линии, либо с восстановленными дырами.
В общем, сделал такой вариант - можно задавать дельту, а можно находить из положения цены/времени, при условии что линии действительно параллельны.
#property strict#property script_show_inputsinputint X_1=100; //X1 в барахinputdouble Y_1=10; //Y1 в Пунктах от цены открытия бараinputint X_2=10; //X2 в барахinputdouble Y_2=15; //Y2 в Пунктах от цены открытия бараinputdouble Point_delta=30; //Зададим дельту в пунктах//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnStart()
{
//--- удаление всех созданных объектов bool DelAllObjects=true;
if(DelAllObjects==true)
{
int obj_total=ObjectsTotal();
PrintFormat("Всего%d объектов",obj_total);
for(int i=obj_total-1;i>=0;i--)
{
string name=ObjectName(i);
PrintFormat("Объект%d:%s",i,name);
ObjectDelete(name);
}
}
/*
Start Stop
x Time 10 20
y Price 30 50
Линейная функция y=kx+b
Система уравнений
30y=10k+b
50y=20k+b
//Вычитаем
20y=10k+0
-10k=-20y
k=-20/-10
k=2
*/double k=(Y_2-Y_1)*(-1)/(X_2-X_1)*(-1);
double b=(X_1*k-Y_1)*(-1);
//Point_delta - можно задать/рассчитать, если в этом смысл, а если не известна, то ищем по координатам второй линии - Deltadouble Y_3=X_1*k+b+Point_delta;
double Y_4=X_2*k+b+Point_delta;
double k2=(Y_3-Y_4)*(-1)/(X_2-X_1)*(-1);
double b2=(X_1*k-Y_2)*(-1);
double Delta=(Y_3-Y_1);
ObjectCreate("Line1",OBJ_TRENDBYANGLE,0,Time[X_1],Open[X_1]+Y_1*Point(),Time[X_2],Open[X_2]+Y_2*Point());
ObjectSetInteger(0,"Line1",OBJPROP_STYLE,STYLE_SOLID);
ObjectSetInteger(0,"Line1",OBJPROP_COLOR,Red);
ObjectSetInteger(0,"Line1",OBJPROP_WIDTH,2);
ObjectSetInteger(0,"Line1",OBJPROP_RAY_RIGHT,false);//Луч продолжается вправо ObjectCreate("Line2",OBJ_TRENDBYANGLE,0,Time[X_1],Open[X_1]+Y_3*Point(),Time[X_2],Open[X_2]+Y_4*Point());
ObjectSetInteger(0,"Line2",OBJPROP_STYLE,STYLE_SOLID);
ObjectSetInteger(0,"Line2",OBJPROP_COLOR,Lime);
ObjectSetInteger(0,"Line2",OBJPROP_WIDTH,2);
ObjectSetInteger(0,"Line2",OBJPROP_RAY_RIGHT,false);//Луч продолжается вправо
Label("Delta",//Название0, //Окно30, //X10, //Y"k="+DoubleToString(k,_Digits)+" b="+DoubleToString(b,_Digits)+" Delta="+DoubleToString(Delta,_Digits),
10,//Размер шрифта
Yellow,//Цвет шрифтаCORNER_LEFT_UPPER,//Выбор угла: 3 - нижний правый, 1 - верхний правый. 2 - нижний левый, 4 - верхний левый ANCHOR_LEFT_UPPER
);
return;
}
//+------------------------------------------------------------------+//|Функция вывода информации на экран |//+------------------------------------------------------------------+void Label(string _name,int _window,int _x,int _y,string _text,int _font,color _color,int corner,int anchor)
{
ObjectDelete(0,_name);
ObjectCreate(0,_name,OBJ_LABEL,_window,0,0);
ObjectSetInteger(0,_name,OBJPROP_CORNER,corner);
ObjectSetInteger(0,_name,OBJPROP_XDISTANCE,_x);
ObjectSetInteger(0,_name,OBJPROP_YDISTANCE,_y);
ObjectSetText(_name,_text,_font,"Arial",_color);
ObjectSetInteger(0,_name,OBJPROP_ANCHOR,anchor);
}
В коде ось x види баров, поэтому, если нужна большая точность для прогнозирования, то нужно конвертировать в секунды и проверять дыры.
Прогнозировать цену можно только с учетом баров в будущем - это надо рассчитать отдельно, учитывая плановые дыры! Забавно, что иногда их надо напротив создавать...
А если планируете строить канал, то что б объекты не бегали по экрану, лучше строить в индикаторе использую графические буферы или делать циклическую перерисовку.
В общем, сделал такой вариант - можно задавать дельту, а можно находить из положения цены/времени, при условии что линии действительно параллельны.
В коде ось x види баров, поэтому, если нужна большая точность для прогнозирования, то нужно конвертировать в секунды и проверять дыры.
Прогнозировать цену можно только с учетом баров в будущем - это надо рассчитать отдельно, учитывая плановые дыры! Забавно, что иногда их надо напротив создавать...
Правильно ли я понимаю что дельта это синяя линия ... А размера красной здесь нет ?
Все верно ... А мне нужно длину Красной лини... Представьте, а если эти две параллельные линии будут вертикальные, что покажет синяя линия ?
Действительно - лажа.
Я показал принцип автоматизации такого рода вычисления, остальное самостоятельно, ибо с мозгами у Вас всё в порядке.
Ну и здесь мы кое что задели
https://www.mql5.com/ru/forum/233174
Все верно ... А мне нужно длину Красной лини... Представьте, а если эти две параллельные линии будут вертикальные, что покажет синяя линия ?
Не исключён вариант, что эта красная линия не будет перпендикулярной в связи с тем, что её можно провести исключительно по цене и времени бара.
Как вариант, вижу такую последовательность: Определяем наклон трендовой или строим трендовую по углу и исходя из этого получаем угол перпендикуляра по которому и считаем расстояние до второй линии.
Но это только теория. Её надо проверять.
Не исключён вариант, что эта красная линия не будет перпендикулярной в связи с тем, что её можно провести исключительно по цене и времени бара.
Как вариант, вижу такую последовательность: Определяем наклон трендовой или строим трендовую по углу и исходя из этого получаем угол перпендикуляра по которому и считаем расстояние до второй линии.
Но это только теория. Её надо проверять.
Пипец. Пора применять преобразования Фурье
Действительно - лажа.
Я показал принцип автоматизации такого рода вычисления, остальное самостоятельно, ибо с мозгами у Вас всё в порядке.
Ну и здесь мы кое что задели
https://www.mql5.com/ru/forum/233174
немножко, не то ... но что то похожее есть )
Ну и головоломка же ...
немножко, не то ... но что то похожее есть )
Ну и головоломка же ...
Да нет никакой головоломки
Найдите угол, найдите катет по формуле.
Вот тема:
https://www.mql5.com/ru/forum/163710Все верно ... А мне нужно длину красной лини. Представьте, а если эти две параллельные линии будут вертикальные, что покажет синяя линия ? (под разным углом, будет разная длина)
Если на белом листе нарисовать две параллельные линии на расстоянии друг от друга 10 см (Рис.7), то это лист можно крутить как угодно под любым углом и будут все те же 10 см (Рис.6).
Я что-то запутался в Ваших целях...
Расскажите, что у Вас есть изначально, пожалуйста. Мне вот не ясно, как можно задавать вопрос о расстоянии, если у нас нет параллельных линий, а если они, есть то как строится вторая линия без этих данных?
Выше Вы привели код двух линий, но, позвольте, там параллельности нет вообще.
Или задача как раз построить параллельные линии? Или проверить, параллельны ли линии? Или просто найти разницу между двумя любыми линиями в любой момент времени?
Пример с листом очень прост, а на графике может быть другая картина из-за дыр в истории, как пример - разрежьте лист на три части и среднюю уберите, соедините две оставшиеся части и Вы увидите, что линии стали кривыми, но расстоянием между ними сохранилось. Соответственно, нам можно замерить расстояние в любой точке, где линия ещё не разрезана, а для этого нам нужны координаты в двух точках без дыр для каждой линии, либо с восстановленными дырами.Для решения поставленной задачи надо:
1. построить перпендикуляр к заданным параллельным линиям
2. определить точки пересечения перпендикуляра с заданными линиями
3. вычислить расстояние между точками пересечения
Наглядно в картинках:
(различные линии и расстояния между ними)
.............................................................................
.............................................................................
.............................................................................
.............................................................................
В общем, сделал такой вариант - можно задавать дельту, а можно находить из положения цены/времени, при условии что линии действительно параллельны.
В коде ось x види баров, поэтому, если нужна большая точность для прогнозирования, то нужно конвертировать в секунды и проверять дыры.
Прогнозировать цену можно только с учетом баров в будущем - это надо рассчитать отдельно, учитывая плановые дыры! Забавно, что иногда их надо напротив создавать...
В общем, сделал такой вариант - можно задавать дельту, а можно находить из положения цены/времени, при условии что линии действительно параллельны.
В коде ось x види баров, поэтому, если нужна большая точность для прогнозирования, то нужно конвертировать в секунды и проверять дыры.
Прогнозировать цену можно только с учетом баров в будущем - это надо рассчитать отдельно, учитывая плановые дыры! Забавно, что иногда их надо напротив создавать...
Правильно ли я понимаю что дельта это синяя линия ... А размера красной здесь нет ?
https://c.mql5.com/3/181/lineee__2.jpg