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

 
Sergey Kolemanov:

Vous comptez la distance entre le haut et le bas, et il a des lignes...

Vous parlez de lignes parallèles. Et dans les lignes parallèles, la distance verticale est toujours la même sur toutes les barres. Dans son exemple, la distance entre les lignes est(High[10]-Low[10]). Vous n'avez pas du tout besoin de calculer le temps pour cela.

Vous pouvez le vérifier et le résultat sera toujours le même.

Vous pouvez trouver une formule plus générale ici

Mais comme le dénominateur est très proche de 1, même sur le graphique en minutes, on peut le simplifier :

double R=(Price2-Price1);

C'est déjà dit par @Renat Akhtyamov dans ce post.

 
Sergey Kolemanov:
Selon l'angle, la distance varie... Quelle est donc la différence entre les deux lignes ? )
 
Itum:
Selon l'angle, la distance varie... Quelle est donc la différence entre les deux lignes ? )
En fonction de l'angle, toutes les distances seront modifiées par des multiples, car vous avez un triangle rectangle. Donc, l'endroit où vous mesurez n'a pas vraiment d'importance. Mesurez ce que vous pensez être la distance la plus simple.
 
Renat Akhtyamov:
En fonction de l'angle, toutes les distances seront modifiées par des multiples, car vous avez un triangle rectangle. L'endroit où vous mesurez n'a donc aucune importance. Mesurez ce que vous pensez être la distance la plus simple.

Veuillez me montrer un exemple.

 ObjectCreate("Line1",OBJ_TRENDBYANGLE,0,Time[0],High[10],Time[10],Low[10]);
   ObjectSetInteger(0,"Line1",OBJPROP_STYLE,STYLE_SOLID);
   ObjectSetInteger(0,"Line1",OBJPROP_COLOR,Red);
   ObjectSetInteger(0,"Line1",OBJPROP_WIDTH,2);
   
   ObjectCreate("Line2",OBJ_TRENDBYANGLE,0,Time[10],High[100],Time[20],Low[10]);
   ObjectSetInteger(0,"Line2",OBJPROP_STYLE,STYLE_SOLID);
   ObjectSetInteger(0,"Line2",OBJPROP_COLOR,Lime);
   ObjectSetInteger(0,"Line2",OBJPROP_WIDTH,2);

   ObjectSetDouble(0,"Line1",OBJPROP_ANGLE,260); // 85 
   ObjectSetDouble(0,"Line2",OBJPROP_ANGLE,260); // 85
/*   
   ObjectCreate("Value",OBJ_TREND,0,Time[0],High[10],Time[10],High[10]);
   ObjectSetInteger(0,"Value",OBJPROP_RAY,false);
   ObjectSetInteger(0,"Value",OBJPROP_COLOR,Gold);
   ObjectSetInteger(0,"Value",OBJPROP_WIDTH,3);
   */

// Предлагали сделать так и не помогает !

   double V = (ObjectGetDouble(0, "Line1", OBJPROP_PRICE, 0)-ObjectGetDouble(0, "Line2", OBJPROP_PRICE, 0))/((datetime)ObjectGetInteger(0, "Line1", OBJPROP_TIME, 0)-(datetime)ObjectGetInteger(0, "Line2", OBJPROP_TIME, 0));
   double R = (ObjectGetDouble(0, "Line1", OBJPROP_PRICE, 0)-ObjectGetDouble(0, "Line2", OBJPROP_PRICE, 0))/sqrt(1+V*V) ; 
   
   
   Comment("Разница: R=",R, " | ");

// Предлагали сделать и так и также не помогает !
   
   datetime t1 = (datetime)ObjectGetInteger(0, "Line1", OBJPROP_TIME, 0);
   datetime t2 = (datetime)ObjectGetInteger(0, "Line2", OBJPROP_TIME, 0);
   double p1 = 0;
   double p2 = 0;
   
   if(t1 > t2)
   {
      p1 = ObjectGetValueByTime(0, "Line1", t2);
      p2 = ObjectGetDouble(0, "Line2", OBJPROP_PRICE, 0);
   }
   if(t1 < t2)
   {
      p1 = ObjectGetDouble(0, "Line1", OBJPROP_PRICE, 0);
      p2 = ObjectGetValueByTime(0, "Line2", t1);;
   }
   if(t1 == t2)
   {
      p1 = ObjectGetDouble(0, "Line1", OBJPROP_PRICE, 0);
      p2 = ObjectGetDouble(0, "Line2", OBJPROP_PRICE, 0);
   }
   
   Comment("Разница: " + DoubleToString(MathAbs(p1 - p2) / _Point, 0));
 
Itum:
En fonction de l'angle, la distance changera... Quelle est la différence entre les lignes ? )

Vous devez trouver la distance entre deux lignes parallèles, et peu importe la taille de la ligne, tant que la valeur ne change pas lorsque vous changez d'échelle ?

Est-ce que je vous ai bien compris ? Si c'est le cas, veuillez me donner le code qui vérifie la valeur et qui ne fonctionne pas chez vous, car chez moi il fonctionne et la valeur ne change pas.

 
Itum:

Veuillez me montrer un exemple.

double Расстояние=ObjectGetValueByShift("Line1",0)-ObjectGetValueByShift("Line2",0);
C'est-à-dire que si la ligne 1 est en haut et la ligne 2 en bas...
 
Renat Akhtyamov:
C'est-à-dire que si la ligne 1 est en haut et la ligne 2 en bas...
oui
 
Itum:
oui

Essayez ma ligne au lieu de celles que vous avez en dessous, si cela vous convient.

// Предлагали сделать так и не помогает !

Ce sera la longueur de la ligne bleue :


 

Renat Akhtyamov:

double Расстояние=ObjectGetValueByShift("Line1",0)-ObjectGetValueByShift("Line2",0);

Hmmm... Tu sais, ça n'aide pas non plus... Vous avez essayé d'exécuter mon code ci-dessus... Ce ne sont pas les résultats que vous voulez.

Peut-être que je ne l'explique pas bien.

 
Renat Akhtyamov:

Essayez ma ligne au lieu de celles que vous avez en dessous, si cela vous convient.

Ce sera la longueur de la ligne bleue :


C'est vrai... J'ai besoin de la longueur. la ligne rouge. Imaginez que ces 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 cette feuille comme vous le souhaitez, sous n'importe quel angle, et il restera toujours les mêmes 10 cm(Fig.6).