Psychological levels are round levels that are likely to have more reaction around them than other levels. Traders mostly recognize levels that are easier to remember, and thus are more likely to place their stops and entry levels around them, thus increasing the market impact. This article discusses the creation of a psychological scanner in TradingView.
The Intuition of Psychological Levels
Psychological levels form an important part in any analysis. The reason for this is because mentally, they are given more attention than other levels. For instance, which price would you retain more in your mind if you come across it? 1.1500 on the EURUSD or 1.3279 on the GBPUSD? By psychological Levels, we are talking about either round numbers (such as 1.2000 on the EURUSD) or simply par numbers (such as 1.000 USDCHF or $100 on Apple stock).
Clearly, round numbers are the first part of a psychological price. The other part is simply significance. For example, the par-value or par-level such as 1.000 on the USDCHF or 100.00 on the USDJPY is considered a par-level. The basic idea is that around these levels, market participants may choose to place their orders, hence, a form of reaction may happen.
Creating the Strategy
Let’s code a strategy that scans FX pairs (that have four decimal points like EURUSD and USDCHF) and outputs signals based on a few conditions. The trading rules are as follows (later explained in the code):
Using the modulo technique, if the remainder is zero, then a psychological level has been detected. Furthermore, if the 14-period RSI is less than 50 and the current close price is bearish, then a bullish signal is generated.
Using the modulo technique, if the remainder is zero, then a psychological level has been detected. Furthermore, if the 14-period RSI is greater than 50 and the current close price is bullish, then a bullish signal is generated.
Use the following code in PineScript to implement the idea:
//@version=5
indicator("Psychological Levels", overlay = true)
price = math.round(close, 4)
is_round_price = (price * 1000) % 10 == 0
plotshape(is_round_price and ta.rsi(close, 14) < 50 and close < open, style = shape.triangleup, color = color.green, location = location.belowbar, size = size.small)
plotshape(is_round_price and ta.rsi(close, 14) > 50 and close > open, style = shape.triangledown, color = color.red, location = location.abovebar, size = size.small)
Generally, different brokers and providers may have differences in quotations. This is the biggest flaw in the strategy.
You must not use this strategy as the protagonist of your trading system due to the flaw but it is always interesting to understand the market reaction around such psychological levels.
You can also check out my newsletter The Weekly Market Sentiment Report that sends weekly directional views every weekend to highlight the important trading opportunities using a mix between sentiment analysis (COT report, put-call ratio, etc.) and rules-based technical analysis.
The Weekly Market Sentiment Report | Sofien Kaabar, CFA | Substack
A Weekly Report Covering Global Market Positioning Using Complex Models. Click to read The Weekly Market Sentiment…coalescence.substack.com
If you liked this article, do not hesitate to like and comment, to further the discussion!