New Members: Be sure to confirm your email address by clicking on the link that was sent to your email inbox. You will not be able to post messages until you click that link.
Compare different days' spreads
Hi, I am trying to scan today's price spread is narrower than yesterday's price spread.
Price spread is defined as absolute value of the high and low's difference.
and [absval(high-low) < absval(yesterday's high - yesterday's low)]
The above scan returned nothing, so something must be wrong. Could anyone help? Thanks!
Price spread is defined as absolute value of the high and low's difference.
and [absval(high-low) < absval(yesterday's high - yesterday's low)]
The above scan returned nothing, so something must be wrong. Could anyone help? Thanks!
0
Comments
-
If I remember correctly, the absval() function cannot evaluate an arithmetic expression, although that's not clearly documented. I think it's intended to compare indicators that resolve to a single value, where that value could be either positive or negative - like MACD Line, for instance. @gord might know, if he sees this question.
In any case, for your scan, you don't need an absolute value because the high will always be greater than the low (in some cases they could be equal, but the high can never be less than the low).
The difference between the high and low can be expressed using either "range" or "ATR(1)". Range looks at just the high and low made during the session. ATR (average true range) looks at the the high, the low AND the prior close. If that close is higher than the session high, it substitutes the prior close as the high. Vice versa for the low - if the prior close is lower than the session low, it substitutes the prior close for the low. The "1" parameter means the divisor for the average is 1, and it looks at only one data pair to average, so it is effectively the difference of one day's high and low.
So, here are two possible scans:
//and [range < 1 day ago range]
//and [ATR(1) < 1 day ago ATR(1)]
You could copy either one, or both, to your scan and remove the "//" from in front of the one you want to use.
0 -
Hi Markd, thanks for your reply!
I mistyped in my original post, I meant spread is defined as the difference between open and close. Since I don't know the relationship between open and close, that's why I tried to use absval.
and [absval(open - close) < 1 day ago absval(open - close)] didn't return anything, I suspect it's as you said absval doesn't work this way.
Help is still needed. Thanks!
0 -
Here's the reply I got some time ago from support re using absval( )
"The issue is with the absolute value function. Currently, it is unable to accept date offsets, like “I day ago,” even when it appears in the rank by command."
If absval( ) could handle it, I think your scan would be:
and [absval(open - close) < absval(1 day ago open - 1 day ago close)]
but that gets no results either.
0 -
I think what you have to do is write an extended "or" condition that considers the possible state combinations of the two sets of opens and closes, and then multiply the negative elements by -1 to get positive numbers, then compare the positive numbers. It's kind of a brute force solution. Maybe someone else can do it more elegantly (like @ekwong )
So the states for "close - open" (or "open - close", whichever you find easier to work with) would be:
day 1 positive [close - open > 0] (an up close, most of the time)
day 2 positive
day 1 negative [close - open < 0] (a down close, most of the time)
day 2 positive
day 1 positive
day 2 negative
day 1 negative
day 2 negative
To compare them, make both positive. So, for instance, for the second state pair, for day 1 negative you would multiply day 1 negative by -1, then compare it to day 2 positive.
The phrase below makes day 1 negative result positive:
[[close - open]* [-1]]
So the second "or" condition would be
// yesterday's close below the open
and [[1 day ago close - 1 day ago open] < 0]
// today's close above the open
and [[close - open] > 0]
// make yesterday's difference positive, compare to today's difference
and [[[1 day ago close - 1 day ago open]*[-1]] > [close - open] ]
The three statements are one condition. The first two lines account for the second combination of states for day 1 and day 2 listed above. The third statement compares day to day 2 after making day 1 positive.
So your complete "or" statement skeleton would be
and
[
[ condition 1 (compares day 1 positive and day 2 positive) ]
or
[ condition 2 (compares day 1 negative and day 2 positive - the 3 lines above) ]
or
[ condition 3 (day 1 positive, day 2 negative) ]
or
[ condition 4 (day 1 negative, day 2 negative) ]
]
I didn't run any of this through "check syntax" so you will have to be careful about keeping track of brackets.0 -
Sorry, day 1 negative should be
[ [1 day ago close - 1 day ago open]* [-1] < 0]
0
Categories
- All Categories
- 2.3K StockCharts
- 395 SharpCharts
- 146 Other Charting Tools
- 69 Saved Charts and ChartLists
- 1.5K Scanning
- 73 Data Issues
- 177 Other StockCharts Questions
- 218 Technical Analysis
- 155 Using Technical Analysis
- 2 InterMarket and International
- 19 Market and Breadth Indicators
- 42 Market Analysis
- 109 Trading
- 109 Trading Strategies
- 163 S.C.A.N the StockCharts Answer Network forum
- 65 Using this StockCharts Answer Network forum
- 98 s.c.a.n. archives
- 5 Off-Topic
- 6 The Cogitation & Rumination Emporium
- Forum Test Area