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

 
Itum:

Pouvez-vous me dire comment calculer la distance entre deux lignes parallèles en tenant compte de l'échelle du graphique (pour que l'échelle ne soit pas affectée) ?

Voici un exemple :

La ligne rouge est la distance entre deux lignes parallèles - comment pouvez-vous la calculer ?

Vous avez une ligne perpendiculaire rouge qui va changer en multiples d'une simple ligne verticale reliant les deux lignes.

Ne t'en fais pas, ta réponse est :

différence de prix au même moment aux deux points des lignes.

//PS : déjà nagé...

Cependant, vous pouvez vérifier mon affirmation.

Il y a aussi une réponse, mais c'est en géométrie sur "Le triangle rectangle". Longueur du cathetus."

 
Itum:

Pouvez-vous me dire comment calculer la distance entre deux lignes parallèles en tenant compte de l'échelle du graphique (pour que l'échelle ne soit pas affectée) ?

Voici un exemple :

La ligne rouge est la distance entre deux lignes parallèles - comment pouvez-vous la calculer ?

Le printemps.

Calculez quelque chose en incluant l'échelle, mais de manière à ce que l'échelle ne l'affecte pas.

Peut-être que le parallélisme ne devrait pas l'affecter ?

 
Itum:

Pouvez-vous me dire comment calculer la distance entre deux lignes parallèles en tenant compte de l'échelle du graphique (pour que l'échelle ne soit pas affectée) ?

Voici un exemple :

La ligne rouge est la distance entre deux lignes parallèles - comment pouvez-vous la calculer ?

Placez le MAH sur le graphique, définissez les niveaux et vous n'avez pas besoin de calculer quoi que ce soit.

 
Itum:

Comment calculer la distance entre deux lignes parallèles en tenant compte de l'échelle du graphique (de manière à ce que l'échelle ne soit pas affectée) ?

Cela dépend de ce que vous voulez obtenir ? Si vous voulez connaître la distance en pixels, vous construisez un triangle et utilisez le théorème de Pythagore pour calculer le côté. Mais cette valeur sera influencée par l'échelle. Si vous voulez le mouvement du prix, projetez sur l'axe OX/OY et ce sera le mouvement du prix. Si vous voulez la distance en unités, multipliez les projections. Et ainsi de suite. La tâche est en fait élémentaire.

 
   ObjectCreate("Line1",OBJ_TREND,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_TREND,0,Time[10],High[10],Time[20],Low[10]);
   ObjectSetInteger(0,"Line2",OBJPROP_STYLE,STYLE_SOLID);
   ObjectSetInteger(0,"Line2",OBJPROP_COLOR,Lime);
   ObjectSetInteger(0,"Line2",OBJPROP_WIDTH,2);
   
   Comment("Разница: ");
 
Itum:

Selon la formule ci-dessus, la plus courte distance R entre ces deux lignes parallèles :

   double V = (High[10]-Low[10])/(Time[10]-Time[20]);
   double R = (High[10]-Low[10])/sqrt(1+V*V) ; 

Où V est le taux de variation du prix avec l'unité point/seconde. De même, V = tangente de la pente de la ligne dans un système dont l'échelle est de 1 point = 1 seconde.

Il faut juste préciser que cette formule fonctionne s'il n'y a pas de trous de temps entre les barres. Par exemple, les week-ends. Sinon, le résultat ne sera pas correct. Dans ce cas, il est nécessaire d'utiliser la fonctionPeriodSeconds() et de calculer le delta temporel par le nombre de barres multiplié par le nombre de secondes dans une barre.

C'est-à-dire que dans ce cas, ce sera :

   double V = (High[10]-Low[10])/(10*PeriodSeconds());
   double R = (High[10]-Low[10])/sqrt(1+V*V) ;


Vous devez également comprendre que @Renat Akhtyamov avait essentiellement raisondans ce post. Carsi l'intervalle de temps est suffisamment grand, la valeur du dénominateur (sqrt(1+V*V))sera toujours légèrement supérieure à 1.

Et puis cette formule peut être simplifiée :

double R = High[10]-Low[10] ;




 
Itum:
   ObjectCreate("Line1",OBJ_TREND,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_TREND,0,Time[10],High[10],Time[20],Low[10]);
   ObjectSetInteger(0,"Line2",OBJPROP_STYLE,STYLE_SOLID);
   ObjectSetInteger(0,"Line2",OBJPROP_COLOR,Lime);
   ObjectSetInteger(0,"Line2",OBJPROP_WIDTH,2); 
   
   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));
 
Sergey Kolemanov:

Vous avez tout faux. ....
t1 dans ce cas, toujours = t2

Tout ce que tu as écrit,

peut être écrit en une seule ligne :

Comment("Разница: " + DoubleToString((High[10]-Low[10]) / _Point, 0));

le résultat serait le même.

 
Nikolai Semko:

Eh bien, vous avez tout faux. ....
t1 dans ce cas, toujours = t2

Tout ce que tu as écrit,

peut être écrit en une seule ligne :

le résultat serait le même.

Oui, dans son exemple, t1 = t2, et comment ils sont réellement construits, seul celui qui a lancé le sujet le sait. Et si elles sont construites comme t1 > t2, puis recalculées et t1 < t2, alors comment compter ?

 
Nikolai Semko:

peut être écrit en une seule ligne :

Comment("Разница: " + DoubleToString((High[10]-Low[10]) / _Point, 0));


Tu comptes la distance entre le haut et le bas, et il a des lignes.