This shows you the differences between two versions of the page.
scans:troubleshooting:equality_scans [2019/07/01 21:26] |
scans:troubleshooting:equality_scans [2019/07/01 21:26] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Troubleshooting Equality Scans ====== | ||
+ | Equals signs (%%=%%) are often used in scan clauses when you are looking for a specific symbol, country, exchange, etc. The equals sign can also be used to look for a specific numeric value in a scan clause, but you may not always get the results you expect. Let's look at an example: | ||
+ | |||
+ | {{:scans:equalityscans01.png}} | ||
+ | |||
+ | In the above chart, both the top MACD Line (12,26,9) and the bottom MACD Line (20,36,9) for HBI appear to have the same value: 0.800. | ||
+ | |||
+ | ===== Scanning for Equality ===== | ||
+ | |||
+ | Now let's run a scan to look for symbols where those two MACD Line values are equal to each other: | ||
+ | |||
+ | <code> | ||
+ | [type is stock] and [country is US] and [sma(20,volume) > 40000] | ||
+ | and [close > 21] | ||
+ | and [MACD Line(12,26,9) = MACD Line(20,36,9)] | ||
+ | </code> | ||
+ | |||
+ | If we ran this scan on the same date as the chart, the scan would net us only one result: | ||
+ | |||
+ | {{:scans:equalityscans02.png}} | ||
+ | |||
+ | Despite the fact that the HBI chart showed identical values for these two indicators, HBI does not appear in our scan results. | ||
+ | |||
+ | The reason for this discrepancy is that the values displayed on the chart are rounded to a certain number of decimal points (typically 2 or 3) for display purposes. The values used by the Scan Engine are not rounded to this degree - the more precise values used by the Scan Engine are often not exactly equal. If the longer-term MACD Line (20,36,9) is 0.8003 and the shorter-term MACD Line (12,26,9) is 0.8004, the Scan Engine does not consider those two values to be equal. | ||
+ | |||
+ | How can we fix our scan so we get the results we expect? | ||
+ | |||
+ | ===== Scanning for "Close Enough" ===== | ||
+ | |||
+ | When comparing one calculated value to another, it is better to replace the one "equals" clause with two "close enough" clauses, like this: | ||
+ | |||
+ | <code> | ||
+ | and [MACD Line(12,26,9) > [MACD Line(20,36,9) - 0.01]] | ||
+ | and [MACD Line(12,26,9) <= [MACD Line(20,36,9) + 0.01]] | ||
+ | </code> | ||
+ | |||
+ | This tells the Scan Engine to return results where one MACD Line is within one cent above or below the other - not identical values, but extremely close to each other. When we run the updated scan, we see that HBI now appears in the scan results: | ||
+ | |||
+ | {{:scans:equalityscans03.png}} | ||
+ | |||
+ | For even greater precision, you could scan for values within one tenth of a cent of each other: | ||
+ | |||
+ | <code> | ||
+ | and [MACD Line(12,26,9) > [MACD Line(20,36,9) - 0.001]] | ||
+ | and [MACD Line(12,26,9) <= [MACD Line(20,36,9) + 0.001]] | ||
+ | </code> | ||
+ | |||
+ | As long as the values are within that small range defined by the two clauses, they are "close enough" to be considered "equal" by our scan. | ||
+ | |||
+ | ===== Conclusion ===== | ||
+ | |||
+ | The equals sign is great for non-numeric comparisons, but should be used with caution when comparing numeric values. When you do need to compare numbers, it is better to use "close enough" clauses, defining a small range of values so similar that they are essentially equal. |