Calcolare la distanza tra due linee parallele tra cui ! - pagina 2

 
Itum:

Potete dirmi come calcolare la distanza tra due linee parallele includendo la scala del grafico (in modo che la scala non sia influenzata)?

Ecco un esempio:

La linea rossa è la distanza tra due linee parallele - come si può calcolare?

Avete una linea perpendicolare rossa che cambierà in multipli di una semplice linea verticale che collega le due linee.

Non preoccuparti, la tua risposta è:

differenza di prezzo allo stesso tempo nei due punti delle linee.

//PS: ha già nuotato...

Tuttavia, potete controllare la mia affermazione.

C'è anche una risposta, ma è in geometria su "Rectangular triangle". Lunghezza del cateto".

 
Itum:

Potete dirmi come calcolare la distanza tra due linee parallele includendo la scala del grafico (in modo che la scala non sia influenzata)?

Ecco un esempio:

La linea rossa è la distanza tra due linee parallele - come può essere calcolata?

Primavera.

Calcola qualcosa includendo la scala, ma in modo che la scala non lo influenzi.

Forse il parallelismo non dovrebbe influire?

 
Itum:

Potete dirmi come calcolare la distanza tra due linee parallele includendo la scala del grafico (in modo che la scala non sia influenzata)?

Ecco un esempio:

La linea rossa è la distanza tra due linee parallele - come si può calcolare?

Metti il MAH sul grafico, imposta i livelli e non hai bisogno di calcolare nulla.

 
Itum:

Come si può calcolare la distanza tra due linee parallele includendo la scala del grafico (in modo che la scala non sia influenzata)?

Dipende da cosa vuoi ottenere? Se volete la distanza in pixel, costruite un triangolo e usate il teorema di Pitagora per calcolare il lato. Ma questo valore sarà influenzato dalla scala. Se volete il movimento del prezzo, proiettate sull'asse OX/OY e sarà il movimento del prezzo. Se volete la distanza in unità, moltiplicate le proiezioni. E così via. Il compito è infatti elementare.

 
   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:

Secondo la formula di cui sopra, la distanza più breve R tra queste due linee parallele:

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

Dove V è il tasso di variazione del prezzo con unità punto/secondo. Anche V = tangente della pendenza della linea in un sistema con una scala di 1 punto = 1 secondo.

Bisogna solo precisare che questa formula funziona se non ci sono buchi temporali tra le barre. Per esempio i fine settimana. Altrimenti, il risultato non sarà corretto. In questo caso, è necessario utilizzare la funzionePeriodSeconds() e calcolare il delta temporale attraverso il numero di barre moltiplicato per il numero di secondi in una barra.

Cioè in questo caso sarà:

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


Inoltre, dovresti capire che @Renat Akhtyamov aveva essenzialmente ragionein questo post. Perchése l'intervallo di tempo è abbastanza grande, il valore del denominatore (sqrt(1+V*V))sarà sempre leggermente maggiore di 1.

E poi questa formula può essere semplificata:

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:

Hai sbagliato tutto....
t1 in questo caso sempre = t2

Tutto quello che hai scritto,

può essere scritto in una sola riga:

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

il risultato sarebbe lo stesso.

 
Nikolai Semko:

Beh, hai sbagliato tutto....
t1 in questo caso sempre = t2

Tutto quello che hai scritto,

può essere scritto in una sola riga:

il risultato sarebbe lo stesso.

Sì, nel suo esempio t1 = t2, e come sono effettivamente costruiti lo sa solo il topicstarter. E se sono costruiti come t1 > t2 , poi ricalcolati e t1 < t2, allora come contare?

 
Nikolai Semko:

può essere scritto in una sola riga:

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


Si conta la distanza tra alto e basso, e ha linee