Вычислить расстояние между двумя параллельными линиями включая ! - страница 3

 
Sergey Kolemanov:

Вы считаете расстояние между High и Low , а у него линии 

Речь идет о параллельный линиях. А в параллельных линиях расстояние по вертикали всегда одинаковое на любом баре. В его примере расстояние между линиями равняется (High[10]-Low[10]). Для этого не нужно вычислять время совсем.

Можете проверить - будет все время одинаковый результат.

А более общая формула находится здесь 

Но ввиду того что знаменатель очень близок к 1 даже на минутном графике, ее можно упростить до:

double R=(Price2-Price1);

Это уже справедливо прозвучало у @Renat Akhtyamov    в этом сообщении

 
Sergey Kolemanov:
В зависимости от угла и будет меняться расстояние... То какая  ж это разница между линиями ? )
 
Itum:
В зависимости от угла и будет меняться расстояние... То какая  ж это разница между линиями ? )
В зависимсоти от угла будут кратно меняться все расстояния, т.к. у Вас прямоугольный треугольник. Поэтому вообще не важно где измерять. Измеряйте самое простое на Ваш взгляд расстояние.
 
Renat Akhtyamov:
В зависимсоти от угла будут кратно меняться все расстояния, т.к. у Вас прямоугольный треугольник. Поэтому вообще не важно где измерять. Измеряйте самое простое на Ваш взгляд расстояние.

Покажите пожалуйста пример.

 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:
В зависимости от угла и будет меняться расстояние... То какая  ж это разница между линиями ? )

Вам надо определить расстояние между двумя параллельными линиями , причём неважно в какой величине оно будет выражено , главное чтоб это значение не менялось с изменением масштаба ?

Я Вас правильно понял ? Если да то покажите полностью код которым проверяете и у Вас не работает т.к. у меня все работает и значение не меняется.

 
Itum:

Покажите пожалуйста пример.

double Расстояние=ObjectGetValueByShift("Line1",0)-ObjectGetValueByShift("Line2",0);
То есть если сверху Line1, а снизу Line2
 
Renat Akhtyamov:
То есть если сверху Line1, а снизу Line2
да
 
Itum:
да

Попробуйте мою строчку вместо тех которые у Вас ниже этого, если устроит

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

Это будет длина голубой линии:


 

Renat Akhtyamov:

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

Хммм... Вы знает, это также не помогает ) ... Вы пробовали запускать мой код сверху ... Это не те результаты которые нужно. 

Может я не правильно все объясняю.

 
Renat Akhtyamov:

Попробуйте мою строчку вместо тех которые у Вас ниже этого, если устроит

Это будет длина голубой линии:


Все верно ... А мне нужно длину красной лини. Представьте, а если эти две параллельные линии будут вертикальные, что покажет синяя линия ? (под разным углом, будет разная длина)

Если на белом листе нарисовать две параллельные  линии на расстоянии друг от друга 10 см (Рис.7), то это лист можно крутить как угодно под любым углом и будут все те же 10 см (Рис.6). 


Причина обращения: