Calculez la distance entre deux lignes parallèles, y compris ! - page 4

 
Itum:


C'est vrai... Et j'ai besoin de la longueur de la ligne rouge... Imaginez que ces deux lignes parallèles soient verticales, que montrerait la ligne bleue ?

C'est vraiment nul.

J'ai montré le principe de l'automatisation de ce genre de calcul, le reste dépend de vous, car vous êtes tous doués de cervelle.

Et là, on touche quelque chose...

https://www.mql5.com/ru/forum/233174

Значения трендовых линий при оптимизации ?
Значения трендовых линий при оптимизации ?
  • 2018.03.25
  • www.mql5.com
Известна первая точка по фракталам Известна вторая точка по вершинам high-low На графике рисуются трендовые линии по точкам Как получить цены тренд...
 
Itum:


C'est vrai... Et j'ai besoin de la longueur de la ligne rouge... Imaginez que ces deux lignes parallèles soient verticales, que montrerait la ligne bleue ?

Il est possible que cette ligne rouge ne soit pas perpendiculaire, car elle ne peut être tracée que par le prix et l'heure de la barre.

Comme option, je vois la séquence suivante : on détermine la pente de la ligne de tendance ou on trace la ligne de tendance par un angle et on obtient l'angle perpendiculaire par lequel on calcule la distance à la deuxième ligne.

Mais ce n'est qu'une théorie. Il faut le vérifier.

 
Alexey Viktorov:

Il est possible que cette ligne rouge ne soit pas perpendiculaire car elle ne peut être tracée que sur la base du prix et du temps de la barre.

Comme option, je vois la séquence suivante : on détermine la pente de la ligne de tendance ou on trace la ligne de tendance par l'angle et on obtient l'angle perpendiculaire sur la base duquel on calcule la distance à la deuxième ligne.

Mais ce n'est qu'une théorie. Elle doit être testée.

C'est dommage. Il est temps d'appliquer les transformées de Fourier.

 
Renat Akhtyamov:

C'est vraiment nul.

Je vous ai montré le principe de l'automatisation de ce genre de calcul, le reste dépend de vous, car vous êtes bien dans votre tête.

Eh bien, nous avons trouvé quelque chose ici, aussi.

https://www.mql5.com/ru/forum/233174

un peu, pas la même chose... mais il existe quelque chose de similaire)

Quel puzzle...

 
Itum:

un peu, pas la même chose ... mais il y a quelque chose de similaire).

Quel puzzle...

Il n'y a pas de puzzle.

Trouvez l'angle, trouvez le cathetus en utilisant la formule.

Voici le sujet :

https://www.mql5.com/ru/forum/163710
Расчёт угла наклона трендовой линии.
Расчёт угла наклона трендовой линии.
  • 2016.12.17
  • www.mql5.com
Добрый день. Нужно расcчитать угол наклона трендовой линии на графике в градусах программно (MQL5...
 
Itum:

Très bien... Et j'ai besoin de la longueur. la ligne rouge. Imaginez que les deux lignes parallèles soient verticales, que montrerait la ligne bleue ? (à des angles différents, la longueur sera différente)

Si vous tracez deux lignes parallèles distantes de 10 cm sur une feuille blanche(Fig.7), vous pouvez tordre la feuille à n'importe quel angle et elle aura toujours les mêmes 10 cm(Fig.6).


Je suis confus quant à vos objectifs...

Dites-moi ce que vous avez initialement, s'il vous plaît. Je ne vois pas très bien comment on peut poser la question de la distance si on n'a pas de lignes parallèles, et si on en a, comment construire la deuxième ligne sans ces données ?

Plus haut, vous avez cité le code de deux lignes, mais, voyons, il n'y a pas du tout de parallélisme.

Ou la tâche consiste-t-elle simplement à construire des lignes parallèles ? Ou pour vérifier si les lignes sont parallèles ? Ou simplement trouver la différence entre deux lignes quelconques à tout moment ?

L'exemple de la feuille est très simple, mais le graphique peut montrer une image différente à cause des trous dans l'histoire, à titre d'exemple - coupez la feuille en trois parties et enlevez la partie centrale, reliez les deux parties restantes et vous verrez que les lignes sont devenues courbes, mais que la distance entre elles est préservée. Par conséquent, nous pouvons mesurer la distance en tout point où la ligne n'a pas encore été coupée, et pour cela nous avons besoin des coordonnées de deux points sans trous pour chaque ligne, ou avec des trous restaurés.
 

Afin de résoudre le problème, vous devez :

1. dessiner une perpendiculaire aux lignes parallèles données

2. déterminer les points d'intersection de la perpendiculaire avec les lignes données

3. calculer la distance entre les points d'intersection


Clairement dans les photos :

(lignes et distances différentes entre elles)



.............................................................................


.............................................................................


.............................................................................


.............................................................................


 

Quoi qu'il en soit, j'ai créé cette option - vous pouvez définir le delta et vous pouvez trouver à partir de la position prix/temps, à condition que les lignes soient vraiment parallèles.

#property strict
#property script_show_inputs



input int X_1=100;   //X1 в барах
input double Y_1=10;  //Y1 в Пунктах от цены открытия бара
input int X_2=10;   //X2 в барах
input double Y_2=15;  //Y2 в Пунктах от цены открытия бара
input double Point_delta=30; //Зададим дельту в пунктах

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()

  {


//--- удаление всех созданных объектов 
   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 - можно задать/рассчитать, если в этом смысл, а если не известна, то ищем по координатам второй линии - Delta
double 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,     //X
            10,      //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);
  }

Dans le code, l'axe des x voit des barres, donc si vous avez besoin de plus de précision pour la prédiction, vous devez convertir en secondes et vérifier les trous.

Vous pouvez seulement prédire le prix des barres dans le futur - cela doit être calculé séparément, compte tenu des trous prévus ! Le plus drôle, c'est que parfois, il faut les créer à l'opposé...

 
Et si vous prévoyez de construire un canal, il est préférable d'intégrer un indicateur utilisant des tampons graphiques ou de faire un redessin cyclique, afin de ne pas avoir d'objets qui traversent l'écran.
 
Aleksey Vyazmikin:

Quoi qu'il en soit, j'ai créé cette option - vous pouvez définir le delta et vous pouvez trouver à partir de la position prix/temps, à condition que les lignes soient vraiment parallèles.

Dans le code, l'axe des x voit des barres, donc si vous avez besoin de plus de précision pour la prédiction, vous devez convertir en secondes et vérifier les trous.

Vous pouvez seulement prédire le prix des barres dans le futur - cela doit être calculé séparément, compte tenu des trous prévus ! Le plus drôle, c'est que parfois, il faut les créer à l'opposé...


Est-ce que je comprends bien que le delta est la ligne bleue ... La taille de la rouge n'est-elle pas ici ?

https://c.mql5.com/3/181/lineee__2.jpg

Raison: