# Sloped Lines

#### Ghostwar19

##### Member

Does anyone know how to slope lines in TOS based on a factor? Been trying to figure this out for days, what I'm doing here is aggregating these lines on a quarterly basis, and at the moment they're horizontal but am trying to aggregate them on an angle with a certain factor like .5 is anyone able to help with this, thank you.

<
input aggregation = AggregationPeriod.quaRTER;

def high = high(period = aggregation);
def close = close(period = aggregation);

plot line = (close* .5) + high;
plot line1 = (close * .618) + high;

def paintingStrategy = PaintingStrategy.HORIZONTAL ;
line.SetPaintingStrategy(paintingStrategy);
line1.SetPaintingStrategy(paintingStrategy);

Does anyone know how to slope lines in TOS based on a factor? Been trying to figure this out for days, what I'm doing here is aggregating these lines on a quarterly basis, and at the moment they're horizontal but am trying to aggregate them on an angle with a certain factor like .5 is anyone able to help with this, thank you.

Take a look at the Inertia() function or InertiaAll(). You can see an example of the latter's use in TOS's `StandardDevChannel` study.

Take a look at the Inertia() function or InertiaAll(). You can see an example of the latter's use in TOS's `StandardDevChannel` study.
I would but from what I've read is that it uses the chart's entire bar count, rather what I'm looking for is the bar count in a certain aggregated period like the quarterly.

I would but from what I've read is that it uses the chart's entire bar count, rather what I'm looking for is the bar count in a certain aggregated period like the quarterly.
If you RTFM at the link I sent you'll see `Inertia()` takes a `length`. `InertiaAll()` uses the entire chart. Hence the `all`.

If you RTFM at the link I sent you'll see `Inertia()` takes a `length`. `InertiaAll()` uses the entire chart. Hence the `all`.
Yeah just saw it 5mins ago spoke too soon, how would I define length by the length of bars in the aggregation period then

Yeah just saw it 5mins ago spoke too soon, how would I define length by the length of bars in the aggregation period then

On average there's 21 trading days per month. Assuming you're using this on a daily chart, if you want a quarter use a length of 63 days. For an intraday chart you can use

Ruby:
``def whatever = Inertia(close(period = AggregationPeriod.DAY), 63);``

• Ghostwar19
See if any of these help.

LinearRegressionSlope(length = length)

Inertia(close, length)

StandardError(length = length)

• Ghostwar19
See if any of these help.

LinearRegressionSlope(length = length)

Inertia(close, length)

StandardError(length = length)
Is there a way to measure the number of bars between the high and the low of the aggregation period, I think that's what it need when inputting length.

Is there a way to measure the number of bars between the high and the low of the aggregation period, I think that's what it need when inputting length.

I haven't ever used it but you could try GetValue() and for the first parameter use BarNumber(). In theory, you should be able to get the bar numbers of the high and low bars and subtract to find the range. That would be your length. Assuming the current bar is after those, you would also need to put an index on the data being passed to Inertia() such as Inertia(close[Max(highBar, lowBar)], length) so you're calculating for a range of x bars that ended y bars ago.

• Ghostwar19
please add to your first post and explain what do you want to see on the chart.
from which point(s) on a chart, do you want to see sloped line(s) drawn from ( and to).
you mention specifying a slope factor, so i assume you want to draw a diagonal line from some point , for every quarter?
you mention aggregate, which means to combine. what do you want to combine?
do you want to draw 2 diagonal lines and combine them into a 3rd line?

...if you want a sloped line, you need a slope.
...to calculate a slope, you need a difference in price (Y) and a difference in time (X)
slope = (y2-y)/(x2-x)
...to plot a diagonal line, add the slope to the previous point on the line
diag = previous diag + slope
Code:
``````def slope1= 0.2;
plot diag1 = diag1 + slope1;``````
this will start drawing a diagonal line from the first bar. need to identify the starting point on the graph and add that to the calculations.

you mentioned using a factor to alter the slope. you could use trigonometry and tangent and multiply a factor by an angle, to come up with a change in height (price).
or just enter a price amount, to add to the previous value, to create a diagonal line.

• scott69 and Ghostwar19
I haven't ever used it but you could try GetValue() and for the first parameter use BarNumber(). In theory, you should be able to get the bar numbers of the high and low bars and subtract to find the range. That would be your length. Assuming the current bar is after those, you would also need to put an index on the data being passed to Inertia() such as Inertia(close[Max(highBar, lowBar)], length) so you're calculating for a range of x bars that ended y bars ago.
please add to your first post and explain what do you want to see on the chart.
from which point(s) on a chart, do you want to see sloped line(s) drawn from ( and to).
you mention specifying a slope factor, so i assume you want to draw a diagonal line from some point , for every quarter?
you mention aggregate, which means to combine. what do you want to combine?
do you want to draw 2 diagonal lines and combine them into a 3rd line?

...if you want a sloped line, you need a slope.
...to calculate a slope, you need a difference in price (Y) and a difference in time (X)
slope = (y2-y)/(x2-x)
...to plot a diagonal line, add the slope to the previous point on the line
diag = previous diag + slope
Code:
``````def slope1= 0.2;
plot diag1 = diag1 + slope1;``````
this will start drawing a diagonal line from the first bar. need to identify the starting point on the graph and add that to the calculations.

you mentioned using a factor to alter the slope. you could use trigonometry and tangent and multiply a factor by an angle, to come up with a change in height (price).
or just enter a price amount, to add to the previous value, to create a diagonal line.
Alright, so I think I got what you guys are saying down and coded it here, thank you for the input this has been great, but now my problem seems to be with the line compounding on itself as seen here, the more bars I include the more this seems to go higher, where is the problem do you think that is causing the compounding?

<input aggregation = AggregationPeriod.DAY;

def high = ((high(period = aggregation)));
def close = ((close(period = aggregation)));
def low = (low(period = aggregation));

def barhigh = GetValue(BarNumber(), high);
def barlow = GetValue(BarNumber(), low);
def x = AbsValue(barlow - barhigh );
input fib = 0;
def line = high + ((high - close) * fib);

def slope = (line - low) / x;
plot line2 = low + (slope * (barlow - low));>

Last edited:
you didn't answer my questions, so i still don't know what you are trying to do, so it's hard to steer you in the right direction.

my guess is you want to draw a new line for each quarter period, so you need a way to reset the line to some new start price, bar, time,...

here is a study that may help
...identifies the first bar of a time period , yellow arrow
...finds the lowest low during some 2nd agg period ( default is day), red arrow
...draws yellow diagonal lines, each one starting from the lowest low of the period

problems,
...if there are 2+ bars with the same low, may not plot correctly
...by using a price for the slope increment, when looking at stocks priced near \$1, the lines will appear vertical.
for more consistent lines, on many stocks, may want to use a percentage of the stock price, as the slope increment.

there is a bubble line commented out. i use them to display variable values, to help debug scripts.

Ruby:
``````# test2_period

def na = double.nan;
def bn = barnumber();

input agg =  AggregationPeriod.DAY;
def cls = close(period = agg);

# without the check for bn == 1, it errors and is always 1.
#  because on bar 1, it tries to read a previous bar value, and there isn't one.
def periodstart = if bn == 1 then 0 else if ( cls == cls ) then 0 else 1;

#  when the bar is the last bar in a period, it will be different than the next
def periodend = if bn == 1 then 0 else if ( cls == cls[-1] ) then 0 else 1;

plot z = periodstart;
z.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_down);
z.SetDefaultColor(Color.yellow);

#addchartbubble(1,low, cls + "\n" + cls + "\n" + periodstart , color.cyan, no);

# start a line on the lowest price durign an agg period
def lowday = (low(period = agg));

# look for the bar with the low
def lowz =
if periodend then na
else if low == lowday then low
else lowz;

# look for the barnumber of the low
def lowzbn =
if periodend then na
else if low == lowday then bn
else lowzbn;

input slope = 0.5;
plot diag = lowz + (( bn - lowzbn)* slope);
diag.SetDefaultColor(Color.yellow);
diag.SetStyle(Curve.MEDIUM_DASH);

plot w = ( lowzbn == bn );
w.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_up);
w.SetDefaultColor(Color.red);
#
#`````` Last edited:
• scott69 and Ghostwar19
you didn't answer my questions, so i still don't know what you are trying to do, so it's hard to steer you in the right direction.

my guess is you want to draw a new line for each quarter period, so you need a way to reset the line to some new start price, bar, time,...

here is a study that may help
...identifies the first bar of a time period , yellow arrow
...finds the lowest low during some 2nd agg period ( default is day), red arrow
...draws yellow diagonal lines, each one starting from the lowest low of the period

problems,
...if there are 2+ bars with the same low, may not plot correctly
...by using a price for the slope increment, when looking at stocks priced near \$1, the lines will appear vertical.
for more consistent lines, on many stocks, may want to use a percentage of the stock price, as the slope increment.

there is a bubble line commented out. i use them to display variable values, to help debug scripts.

Ruby:
``````# test2_period

def na = double.nan;
def bn = barnumber();

input agg =  AggregationPeriod.DAY;
def cls = close(period = agg);

# without the check for bn == 1, it errors and is always 1.
#  because on bar 1, it tries to read a previous bar value, and there isn't one.
def periodstart = if bn == 1 then 0 else if ( cls == cls ) then 0 else 1;

#  when the bar is the last bar in a period, it will be different than the next
def periodend = if bn == 1 then 0 else if ( cls == cls[-1] ) then 0 else 1;

plot z = periodstart;
z.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_down);
z.SetDefaultColor(Color.yellow);

#addchartbubble(1,low, cls + "\n" + cls + "\n" + periodstart , color.cyan, no);

# start a line on the lowest price durign an agg period
def lowday = (low(period = agg));

# look for the bar with the low
def lowz =
if periodend then na
else if low == lowday then low
else lowz;

# look for the barnumber of the low
def lowzbn =
if periodend then na
else if low == lowday then bn
else lowzbn;

input slope = 0.5;
plot diag = lowz + (( bn - lowzbn)* slope);
diag.SetDefaultColor(Color.yellow);
diag.SetStyle(Curve.MEDIUM_DASH);

plot w = ( lowzbn == bn );
w.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_up);
w.SetDefaultColor(Color.red);
#
#`````` My apologies I can be clearer, this is extremely close to what is trying to be achieved, the slope is on point, now what I'm trying to do is have that line carry onto the aggregation after it like in the illustration below.
I'm trying to put in  in some parts of the code but the lines just disappear.

It is essentially trying to grab the sloped line from the prior aggreation and plot it over to the current

My apologies I can be clearer, this is extremely close to what is trying to be achieved, the slope is on point, now what I'm trying to do is have that line carry onto the aggregation after it like in the illustration below.
I'm trying to put in  in some parts of the code but the lines just disappear.

It is essentially trying to grab the sloped line from the prior aggreation and plot it over to the current
it's all good. when frustrated or trying to explain something new, the words don't always come easily. just trying to prod you to think about the problem and describe it in short concise sentences.

in my example, 1 variable is used for 1 line , during each period.
if you want the line to span 3 periods, then there will be 3 lines on 1 bar. then you need 3 sets of formulas/variables, to store data for each line. create a counter of the periods. start the lines on periods 1, 2 3. then check for and reset them on 3 period intervals.

it's all good. when frustrated or trying to explain something new, the words don't always come easily. just trying to prod you to think about the problem and describe it in short concise sentences.

in my example, 1 variable is used for 1 line , during each period.
if you want the line to span 3 periods, then there will be 3 lines on 1 bar. then you need 3 sets of formulas/variables, to store data for each line. create a counter of the periods. start the lines on periods 1, 2 3. then check for and reset them on 3 period intervals.
Thank you I appreciate your sincerity. Also, from what I'm understanding is that I will not be able to plot the lines ahead of an aggregation forward?
The idea is almost like the fib fans, but the idea behind this is that the fibs are reset based on aggregation rather than taking the current high and low. You take the high and low of the previous aggregation and plot it ahead into the next one which from what I've seen is respected very strongly.

Thank you I appreciate your sincerity. Also, from what I'm understanding is that I will not be able to plot the lines ahead of an aggregation forward?
The idea is almost like the fib fans, but the idea behind this is that the fibs are reset based on aggregation rather than taking the current high and low. You take the high and low of the previous aggregation and plot it ahead into the next one which from what I've seen is respected very strongly.
you can plot the lines on time periods after the one that the line starts on. you will have to add more variables and formulas , for each additional line.

• Ghostwar19

### Not the exact question you're looking for?

87k+ Posts
185 Online ## The Market Trading Game Changer

Join 2,500+ subscribers inside the useThinkScript VIP Membership Club
• Exclusive indicators
• Proven strategies & setups
• Private Discord community
• Exclusive members-only content
• 1 full year of unlimited support

What is useThinkScript?

useThinkScript is the #1 community of stock market investors using indicators and other tools to power their trading strategies. Traders of all skill levels use our forums to learn about scripting and indicators, help each other, and discover new ways to gain an edge in the markets.

How do I get started?

We get it. Our forum can be intimidating, if not overwhelming. With thousands of topics, tens of thousands of posts, our community has created an incredibly deep knowledge base for stock traders. No one can ever exhaust every resource provided on our site.

If you are new, or just looking for guidance, here are some helpful links to get you started.

What are the benefits of VIP Membership?