Calcule a distância entre duas linhas paralelas incluindo ! - página 2

 
Itum:

Você pode me dizer como calcular a distância entre duas linhas paralelas incluindo a escala do gráfico (para que a escala não seja afetada)?

Aqui está um exemplo:

A linha vermelha é a distância entre duas linhas paralelas - como você pode calcular ?

Você tem uma linha perpendicular vermelha que mudará em múltiplos de uma linha vertical simples conectando as duas linhas.

Não se preocupe, sua resposta é:

A diferença de preço ao mesmo tempo, nos dois pontos das linhas.

//PS: Nadar já...

No entanto, você pode verificar minha afirmação.

Há também uma resposta, mas está em geometria no "Triângulo retangular". Comprimento do cateto".

 
Itum:

Você pode me dizer como calcular a distância entre duas linhas paralelas incluindo a escala do gráfico (para que a escala não seja afetada)?

Aqui está um exemplo:

A linha vermelha é a distância entre duas linhas paralelas - como você pode calcular ?

Primavera.

Calcule algo incluindo a escala, mas de forma que a escala não a afete.

Talvez o paralelismo não deva afetá-lo?

 
Itum:

Você pode me dizer como calcular a distância entre duas linhas paralelas incluindo a escala do gráfico (para que a escala não seja afetada)?

Aqui está um exemplo:

A linha vermelha é a distância entre duas linhas paralelas - como você pode calcular ?

Coloque o MAH na tabela, defina os níveis e você não precisa calcular nada.

 
Itum:

Como calcular a distância entre duas linhas paralelas, incluindo a escala do gráfico (para que a escala não seja afetada)?

Depende do que você quer obter? Se você quiser a distância em pixels, você constrói um triângulo e usa o teorema de Pitágoras para calcular o lado. Mas este valor será influenciado pela escala. Se você quiser o movimento de preços, projete no eixo OX/OY e será o movimento de preços. Se você quiser a distância em unidades, multiplique as projeções. E assim por diante. A tarefa é, de fato, elementar.

 
   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:

De acordo com a fórmula acima, a distância mais curta R entre estas duas linhas paralelas:

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

Onde V é a taxa de mudança no preço com ponto/segundo unitário. Também V = tangente da inclinação da linha em um sistema com uma escala de 1 ponto = 1 segundo.

Basta estipular que esta fórmula funciona se não houver buracos de tempo entre as barras. Por exemplo, fins de semana. Caso contrário, o resultado não será correto. Neste caso, é necessário utilizar a funçãoPeriodSeconds() e calcular o delta de tempo através do número de barras multiplicado pelo número de segundos em uma barra.

Isto é, neste caso, será:

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


Além disso, você deve entender que @Renat Akhtyamov estava essencialmente certoneste posto. Porquese o intervalo de tempo for suficientemente grande, o valor do denominador (sqrt(1+V*V))será sempre um pouco maior que 1.

E então esta fórmula pode ser simplificada:

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:

Você entendeu tudo errado....
t1 neste caso sempre = t2

Tudo o que você escreveu,

pode ser escrito em uma linha:

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

o resultado seria o mesmo.

 
Nikolai Semko:

Bem, você entendeu tudo errado....
t1 neste caso sempre = t2

Tudo o que você escreveu,

pode ser escrito em uma linha:

o resultado seria o mesmo.

Sim, em seu exemplo t1 = t2 , e como eles são realmente construídos, só o iniciante do tópico sabe. E se forem construídos como t1 > t2 , então recalculados e t1 < t2, então como contar?

 
Nikolai Semko:

pode ser escrito em uma linha:

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


Você conta a distância entre Alto e Baixo , e ele tem linhas