# Get Values of Channel's Second Line - page 2

17591

enivid:
We cannot use time as x in f(x) = kx + b calculation because charts are non-linear in respect to time. For example, daily charts have weekends and holidays omitted, so the neighboring bars could be 1 day apart or 3 days apart.
I think if you consider time as linear to the right of bar 0 and use bar number to the left of bar 0 you can calculate what you need. Anything drawn to the right of bar 0 may well change position when the weekend arrives if they have been drawn at a time that occurs when the markets are closed . . .
1065

Hmmm... Calculating negative bar shift for Time3 could be possible if time is linear in negative shift area. Thanks for the idea!
1065

Works miracles :-). If someone needs, here's the code, which calculates vertical difference between main and auxiliary lines of the OBJ_CHANNEL:

```string BorderChannel = "MyChannel";

datetime T1 = ObjectGet(BorderChannel, OBJPROP_TIME1);
datetime T2 = ObjectGet(BorderChannel, OBJPROP_TIME2);
datetime T3 = ObjectGet(BorderChannel, OBJPROP_TIME3);

double P1 = ObjectGet(BorderChannel, OBJPROP_PRICE1);
double P2 = ObjectGet(BorderChannel, OBJPROP_PRICE2);
double P3 = ObjectGet(BorderChannel, OBJPROP_PRICE3);

double Diff = 0;

// Simple cases
if (T3 == T1) // Auxiliary point with the same time as the first point of the main line
{
Diff = P1 - P3;
}
else if (T3 == T2)  // Auxiliary point with the same time as the second point of the main line
{
Diff = P2 - P3;
}
// Difficult case
else
{
// Use linear function to calculate auxiliary price at T1

// Find bar numbers of T1 and T2
// double because will be used in division
double B1 = ObjectGetShiftByValue(BorderChannel, P1);
double B2 = ObjectGetShiftByValue(BorderChannel, P2);

// Normalize T3 by removing excess time values. For example, hours and minutes on D1 timeframe.
T3 = T3 - T3 % (Period() * 60);

if (T3 > Time[0]) // If T3 is placed in the future, need to calculate its negative shift
{
double B3 = (Time[0] - T3) / (Period() * 60);
}
else // Otherwise shift can be found by scrolling through bars
{
for (int i = 0; i < Bars; i++)
if (Time[i] == T3)
{
B3 = i;
break;
}
}

// Slope
double k = (P2 - P1) / (B2 - B1);

// Y-intercept is calculated for auxiliary line (it has the same Slope)
double b = P3 - k * B3;

// Find auxiliary line's price at point T1
double AuxP = k * B1 + b;

Diff = P1 - AuxP;
}```
235

Nicely done - a calculation I had on my to-do list!

13

Thanks for sharing the code!

Helped me a lot!

Thanks!

137

Hi,

You're broked your neck with this code.  Just use the "ObjectGetValueByTime" command.

Ex:

//For the first line

//For the second line