Introduction to Moving Averages
What is a moving average? A moving average is a statistical calculation used in data analysis and technical trading, which calculates the average value of a dataset over a specific number of periods, smoothing out short-term fluctuations and highlighting underlying trends. They serve as an often reliable means to understand and predict market trends, providing traders with valuable insights into price movements. This post aims to shed light on the concept of moving averages, their types, and the application of moving averages for day trading.
The concept of moving averages is not just limited to the investment world. From weather forecasting to economics, moving averages find their application in various fields due to their ability to smooth out short-term volatility and underline longer-term trends or cycles. In the context of trading, they are particularly useful for identifying the direction of a trend and are often used in conjunction with other technical indicators to generate robust trading signals.
This post will focus on different types of moving averages, including Simple, Smoothed, Centered, Weighted, Exponential, Median, Trix, and Exponential Hull. Each type has its unique calculation method and application, and understanding these differences is crucial for their effective use in trading.
We will also explore how to implement moving averages in Python, a popular programming language among traders due to its simplicity and the vast array of financial libraries available. Whether you’re looking to implement weighted moving averages or use moving averages for forecasting, Python offers a flexible and efficient way to do so.
Moreover, we will delve into the use of moving averages in day trading. If you’re wondering about the best moving averages for day trading, this post will provide you with practical insights and tips. From identifying potential buy and sell signals to understanding how to interpret moving averages signals, we will cover all the essentials you need to know to use moving averages effectively in your trading strategy.
So, whether you’re a seasoned trader looking to refine your strategy with moving averages or a beginner eager to understand how moving averages can aid in your trading decisions, I trust this post will serve as a helpful guide. Let’s embark on this journey to unravel the potential of moving averages in trading.
The Genesis of Moving Averages
The concept of moving averages, while prevalent in today’s financial world, has a rich history that dates back centuries. The idea of averaging values over a period to smooth out fluctuations and highlight trends is not new and has been used in various fields, from astronomy to economics.
The use of moving averages in the financial markets, however, started to gain prominence in the late 19th and early 20th centuries. The exact origin is hard to pinpoint, as the concept of averaging prices over a period was likely used by many traders independently. However, it was Charles Dow, co-founder of Dow Jones & Company, who is often credited with popularizing work on averages in the late 1800s as part of what is known as Dow Theory, which has six basic tenets:
Tenet | Description |
---|---|
Market Movements | The market has three types of movements: 1) Primary trend (major trend that can last for years), 2) Secondary reaction (pullbacks that last for weeks or months), and 3) Minor trend (short-term fluctuations). |
Market Phases | Market trends have three phases: 1) Accumulation phase (knowledgeable investors start to buy), 2) Public participation phase (most traders start to buy), and 3) Distribution phase (knowledgeable investors start to sell). |
Market Discounts All News | The stock market’s price action reflects all available information. |
Averages Must Confirm Each Other | For a primary trend to be valid, both the Dow Jones Industrial Average (DJIA) and the Dow Jones Transportation Average (DJTA) must be in agreement. |
Volume Confirmation | Volume should increase when the price moves in the direction of the primary trend and decrease when it moves against it. This serves to confirm the trend. |
Trends Exist Until Signals Prove They’ve Ended | A trend is assumed to be in effect until it gives clear signals that it has reversed. This often means waiting for significant confirmation. |
The rationale behind the development of moving averages was to create a tool that could help traders and investors identify the direction of market trends by smoothing out the ‘noise’ of price fluctuations. By averaging prices over a specific period, traders could more clearly see the overall direction in which the market was moving, helping them make more informed trading decisions.
Over time, as markets evolved and computational power increased, different types of moving averages were developed to better suit the needs of traders. Simple Moving Averages (SMA) were among the first to be used, followed by Exponential Moving Averages (EMA) and Weighted Moving Averages (WMA), which give more weight to recent prices in an attempt to react faster to market changes.
Other types of moving averages, such as Smoothed, Centered, Median, Trix, and Exponential Hull, were developed later, each with its unique calculation method and purpose. These advancements were driven by the continuous pursuit of better tools for market analysis and the increasing complexity of financial markets.
Today, moving averages remain a fundamental tool in technical analysis, used by traders worldwide for forecasting market trends and making trading decisions. Whether you’re using Python to calculate moving averages or applying them for day trading, the evolution of moving averages continues to offer new ways to understand and navigate the financial markets.
Mathematical Construction of Moving Averages
Understanding the mathematical construction of moving averages is crucial for their effective application in trading. In this section, we will break down the formulas of types of eight moving averages: Simple, Smoothed, Centered, Weighted, Exponential, Median, Trix and Exponential Hull.
Simple Moving Average (SMA)
The Simple Moving Average, often referred to as SMA, is the most straightforward type of moving average. It calculates the average price over a specific number of periods.
The formula for a Simple Moving Average is:
SMA = (P1 + P2 + P3 + … + Pn) / n
Where:
- P1, P2, P3, …, Pn are the prices for each period in the range
- n is the number of periods
For example, a 5-period SMA would add up the closing prices for the past 5 periods and then divide by 5. This process is repeated as each new period ends, with the newest price included in the calculation and the oldest price dropped.
Smoothed Moving Average (SMMA)
The Smoothed Moving Average, or SMMA, is a type of moving average that gives equal weight to all data points. It is similar to the SMA but includes all available data in its calculation, making it ‘smoother’ and less reactive to recent price changes.
The formula for a Smoothed Moving Average is:
SMMA = (Previous SMMA * (n – 1) + Current Price) / n
Where:
- Previous SMMA is the Smoothed Moving Average of the previous period
- n is the number of periods
- Current Price is the price of the current period
The first value of the SMMA is calculated as a simple moving average. Subsequent values are calculated according to the formula above.
Centered Moving Average (CMA)
The Centered Moving Average, or CMA, is a type of moving average that is centered on the middle of the data range rather than the end. It is often used in trend-cycle decomposition processes to estimate the trend component of a time series.
The formula for a Centered Moving Average is:
CMA = (P(n/2) + P(n/2 + 1) + P(n/2 + 2) + … + P(n/2 + n)) / n
Where:
- P(n/2), P(n/2 + 1), …, P(n/2 + n) are the prices for each period in the range
- n is the number of periods
For example, a 5-period CMA would add up the prices for the middle 5 periods and then divide by 5. This process is repeated as each new period ends, with the newest price included in the calculation and the oldest price dropped.
Weighted Moving Average (WMA)
The Weighted Moving Average, or WMA, is a type of moving average that gives more weight to recent data points. This makes it more responsive to new price changes compared to the SMA, because of the added sensitivity it may be one of the better moving averages for day trading.
The formula for a Weighted Moving Average is:
WMA = (Pn * n + Pn-1 * (n-1) + … + P1 * 1) / (n + (n-1) + … + 1)
Where:
- Pn, Pn-1, …, P1 are the prices for each period in the range
- n is the number of periods
For example, a 3-period WMA would multiply the most recent price by 3, the second most recent price by 2, and the oldest price by 1. The sum of these products is then divided by the sum of the weights (in this case, 6).
Exponential Moving Average (EMA)
The Exponential Moving Average, or EMA, is another type of moving average that gives more weight to recent data points. However, unlike the WMA, the EMA includes all data in its calculation, with the weights decreasing exponentially for older prices, this too could be more sensitive for day trading and scalping.
The formula for an Exponential Moving Average is:
EMA = (Current Price * Smoothing Factor) + (Previous EMA * (1 – Smoothing Factor))
Where:
- Current Price is the price of the current period
- Previous EMA is the Exponential Moving Average of the previous period
- Smoothing Factor is 2 / (n + 1), where n is the number of periods
The first value of the EMA is typically calculated as a simple moving average. Subsequent values are calculated according to the formula above.
Median Moving Average (MMA)
The Median Moving Average, or MMA, is a type of moving average that calculates the median of the prices over a specific number of periods rather than the mean. This makes it less sensitive to outlier prices.
The formula for a Median Moving Average is:
MMA = Median(P1, P2, P3, …, Pn)
Where:
- P1, P2, P3, …, Pn are the prices for each period in the range
- n is the number of periods
For example, a 5-period MMA would find the median of the closing prices for the past 5 periods. This process is repeated as each new period ends, with the newest price included in the calculation and the oldest price dropped.
Trix Moving Average (TRIX)
The Trix Moving Average, or TRIX, is a momentum oscillator derived from the rate-of-change of a triple exponentially smoothed moving average. It filters out market noise and tends to be a leading indicator, often used to identify potential reversals in price.
The calculation of TRIX involves several steps:
- Calculate the 14-period Exponential Moving Average (EMA) of the closing price.
- Calculate the 14-period EMA of the EMA from step 1.
- Calculate the 14-period EMA of the EMA from step 2.
- Subtract yesterday’s triple EMA from today’s triple EMA.
- Divide the result by yesterday’s triple EMA.
- Multiply the result by 100 to get the TRIX value.
The TRIX oscillates around a zero line. Its value is a percentage change in a triple-smoothed EMA, which tends to lead price changes.
Exponential Hull Moving Average (EHMA)
The Exponential Hull Moving Average, or EHMA, is a type of moving average that combines the smoothed moving average’s sensitivity with the linear weighted moving average’s lag reduction. It is designed to reduce lag to the greatest extent possible, making it extremely responsive to price changes. Because of this it might be considered one of the best moving averages for day trading.
The calculation of EHMA involves several steps:
- Calculate the Weighted Moving Average (WMA) with period n/2 and multiply it by 2.
- Calculate the WMA for period n and subtract it from the result of step 1.
- Calculate the square root of n.
- Apply EMA with period equal to the result of step 3 to the result of step 2.
The EHMA is a complex moving average that requires more computation than the other types, but its responsiveness to price changes makes it a valuable tool for traders who need to react quickly to market movements.
With this, we have covered the mathematical construction of the main types of moving averages used in trading. Understanding these formulas and their components is crucial for their effective application in market analysis and trading strategy development.
Purpose and Design of Moving Averages
Moving averages serve a critical role in market analysis and trading. They measure the average price of an asset over a set number of periods, providing a smoothed line that helps traders visualize the overall trend direction. By eliminating the ‘noise’ of price fluctuations, moving averages make it easier to identify the underlying trend, whether it’s upward, downward, or sideways.
One of the primary purposes of moving averages is to assist in predicting market trends. They do this by smoothing out price data, allowing traders to see the broader trend beyond the daily price movements. When the price is above the moving average, it indicates a potential upward trend, and when it’s below, it suggests a possible downward trend. Some traders also look for crossovers, discussed in the next section.
Moving averages also have unique aspects that set them apart from other indicators. For one, they are trend-following or lagging indicators, meaning they are based on past prices and tend to confirm a trend rather than predict new ones. This characteristic can make them more reliable, as they are less likely to produce false signals compared to leading indicators.
Moreover, the different types of moving averages each have their unique characteristics. For instance, a Simple Moving Average (SMA) gives equal weight to all data points, while an Exponential Moving Average (EMA) and a Weighted Moving Average (WMA) give more weight to recent data points, making them more responsive to new price changes. Other types, like the Median Moving Average (MMA), use the median instead of the mean, making them less sensitive to outlier prices.
Interpreting Moving Averages Signals
Interpreting signals from moving averages is a key aspect of technical analysis. The simplest way to read the output of a moving average is to look at the direction of the line. If the moving average line is rising, the trend is upward, and if it’s falling, the trend is downward.
Buy and sell signals are often identified through crossovers. A bullish crossover occurs when a shorter-period moving average crosses above a longer-period moving average, which could be a signal to buy. Meanwhile, a bearish crossover occurs when a shorter-period moving average crosses below a longer-period moving average, potentially signalling a sell.
For example, a trader might use a 50-day and a 200-day SMA in their strategy. When the 50-day SMA crosses above the 200-day SMA, it could be seen as a bullish signal, and the trader might consider buying. Conversely, if the 50-day SMA crosses below the 200-day SMA, it could be a bearish signal, and the trader might consider selling.
Pros and Cons of Using Moving Averages
Moving averages come with a host of advantages. They are simple to use and understand, making them suitable for both novice and experienced traders. They provide a clear visual representation of the trend and can be easily added to any price chart. Furthermore, they can be used in any time frame, from intraday to daily, weekly, or monthly charts.
However, moving averages are not without their limitations. As lagging indicators, they are based on past data and may not predict future price movements accurately. They are best used in trending markets and may produce false signals in range-bound or sideways markets.
Also, different types of moving averages may produce different signals. For instance, an EMA might give a buy signal while an SMA of the same period is still indicating a hold. This discrepancy can lead to confusion and potentially conflicting trading decisions.
Compared to other indicators, moving averages are less subjective as they are purely based on price data. However, they should not be used in isolation. Combining moving averages with other technical indicators like volume, momentum oscillators, or trend lines can provide more robust trading signals.
Implementing Moving Averages in Python with VSCode
Python is a powerful tool for financial analysis and trading, thanks to its simplicity and the vast array of financial libraries available. In this section, we’ll provide a step-by-step guide on how to code the Simple, Smoothed, Centered, Weighted, Exponential, Median, TRIX and Exponential Hull Moving Averages in Python using VSCode – which is free software you can download from Microsoft, then follow the step by step instructions within it for setting up Python
Before we start, make sure you have the necessary libraries installed. You can install them using pip by typing in the Terminal at the base of the workspace:
pip install pandas numpy
If you go on to plot the chart shown lower down this post, then install those additional libraries too.
Simple Moving Average (SMA)
Here’s how you can calculate a Simple Moving Average in Python:
import pandas as pd
def calculate_sma(data, window):
return data.rolling(window=window).mean()
# Assuming 'data' is a pandas DataFrame and 'Close' is the column with closing prices
data['SMA'] = calculate_sma(data['Close'], window=14)
In this code, we define a function calculate_sma
that takes a pandas DataFrame and a window size as input and returns the Simple Moving Average for the given window size. The rolling
function is a built-in function in pandas that provides rolling window calculations. The mean
function calculates the average.
Smoothed Moving Average (SMMA)
Calculating a Smoothed Moving Average is a bit more complex:
import pandas as pd
import numpy as np
def calculate_smma(data, window):
smma = data.rolling(window=window, min_periods=window).mean()[:window]
for i in range(window, len(data)):
smma = np.append(smma, (smma[i - window] * (window - 1) + data[i]) / window)
return smma
# Assuming 'data' is a pandas DataFrame and 'Close' is the column with closing prices
data['SMMA'] = calculate_smma(data['Close'], window=14)
In this code, we first calculate the SMA for the initial window size. Then, for each subsequent data point, we calculate the SMMA based on the previous SMMA and the current data point.
Centered Moving Average (CMA)
Here’s how you can calculate a Centered Moving Average in Python:
import pandas as pd
def calculate_cma(data, window):
offset = window // 2
return data.rolling(window=window).mean().shift(-offset)
# Assuming 'data' is a pandas DataFrame and 'Close' is the column with closing prices
data['CMA'] = calculate_cma(data['Close'], window=14)
In this code, we calculate the SMA for the given window size, then shift the results backward by half the window size to center the moving average.
Weighted Moving Average (WMA)
Calculating a Weighted Moving Average in Python involves assigning weights to the data points and then calculating the average:
import pandas as pd
import numpy as np
def calculate_wma(data, window):
weights = np.arange(1, window + 1)
return data.rolling(window=window).apply(lambda x: np.dot(x, weights) / weights.sum(), raw=True)
# Assuming 'data' is a pandas DataFrame and 'Close' is the column with closing prices
data['WMA'] = calculate_wma(data['Close'], window=14)
In this code, we first create an array of weights using numpy’s arange
function. Then, we use the apply
function to apply a lambda function to each window of data. The lambda function calculates the dot product of the data and the weights and then divides by the sum of the weights.
Exponential Moving Average (EMA)
Calculating an Exponential Moving Average in Python can be done directly using pandas’ ewm
function:
import pandas as pd
def calculate_ema(data, window):
return data.ewm(span=window, adjust=False).mean()
# Assuming 'data' is a pandas DataFrame and 'Close' is the column with closing prices
data['EMA'] = calculate_ema(data['Close'], window=14)
In this code, the ewm
function provides exponential weighted functions. The mean
function calculates the EMA. The adjust=False
argument is used to use a recursive formula to calculate the EMA that gives more weight to recent data points.
Median Moving Average (MMA)
Calculating a Median Moving Average in Python involves finding the median of the data points in the moving window:
import pandas as pd
def calculate_mma(data, window):
return data.rolling(window=window).median()
# Assuming 'data' is a pandas DataFrame and 'Close' is the column with closing prices
data['MMA'] = calculate_mma(data['Close'], window=14)
In this code, we use the rolling
function to create a rolling window of data, and then the median
function to calculate the median of each window.
Trix Moving Average (TRIX)
Calculating the Trix Moving Average in Python involves several steps, including calculating an Exponential Moving Average (EMA) three times and then calculating the rate of change:
import pandas as pd
def calculate_trix(data, window):
ema1 = data.ewm(span=window, adjust=False).mean()
ema2 = ema1.ewm(span=window, adjust=False).mean()
ema3 = ema2.ewm(span=window, adjust=False).mean()
trix = (ema3.pct_change() + 1).apply(np.log) * 100
return trix
# Assuming 'data' is a pandas DataFrame and 'Close' is the column with closing prices
data['TRIX'] = calculate_trix(data['Close'], window=14)
In this code, we first calculate the EMA three times. Then, we calculate the percentage change of the third EMA, add 1, apply the natural logarithm, and multiply by 100 to get the TRIX.
Exponential Hull Moving Average (EHMA)
Calculating the Exponential Hull Moving Average in Python involves several steps, including calculating Weighted Moving Averages (WMA) and square roots:
import pandas as pd
import numpy as np
def calculate_ehma(data, window):
wma_half_length = np.round(window / 2).astype(int)
sqrt_window = np.round(np.sqrt(window)).astype(int)
wma1 = data.rolling(window=window).apply(lambda x: np.dot(x, np.arange(1, window + 1)) / np.arange(1, window + 1).sum(), raw=True)
wma2 = data.rolling(window=wma_half_length).apply(lambda x: np.dot(x, np.arange(1, wma_half_length + 1)) / np.arange(1, wma_half_length + 1).sum(), raw=True)
hull_moving_average = ((wma2 * 2) - wma1).ewm(span=sqrt_window, adjust=False).mean()
return hull_moving_average
# Assuming 'data' is a pandas DataFrame and 'Close' is the column with closing prices
data['EHMA'] = calculate_ehma(data['Close'], window=14)
In this code, we first calculate the half-length and square root of the window size. Then, we calculate two WMAs: one for the full window size and one for the half window size. We then calculate the Hull Moving Average by subtracting the full window size WMA from twice the half window size WMA, and then applying an EMA with a span equal to the square root of the window size.
With this, we have covered the implementation of all the main types of moving averages in Python. Understanding these implementations and how to adjust them to your needs is crucial for their effective application in market analysis and trading strategy development.
How to plot any one of these on a chart
To plot a candlestick chart with the Exponential Hull Moving Average (EHMA), we’ll need to use the yfinance
library to download the stock data and the mplfinance
library to create the chart. We are also using the matplotlib
library to help make a legend.
In this case we’ll retrieve Nike stock data for a year back from May 2023. Save the code in a file ending .py
# ********* Start of imports *********
import pandas as pd
import numpy as np
import yfinance as yf
import mplfinance as mpf
import matplotlib.pyplot as plt
import matplotlib.lines as mlines
# ********* End of imports *********
# ********* Start of data download *********
# Download historical data for Nike from May 26, 2022 to May 26, 2023
data = yf.download('NKE', start='2022-05-26', end='2023-05-26')
# ********* End of data download *********
# ********* Start of moving average calculation *********
def calculate_ehma(data, window):
wma_half_length = np.round(window / 2).astype(int)
sqrt_window = np.round(np.sqrt(window)).astype(int)
wma1 = data.rolling(window=window).apply(lambda x: np.dot(x, np.arange(1, window + 1)) / np.arange(1, window + 1).sum(), raw=True)
wma2 = data.rolling(window=wma_half_length).apply(lambda x: np.dot(x, np.arange(1, wma_half_length + 1)) / np.arange(1, wma_half_length + 1).sum(), raw=True)
hull_moving_average = ((wma2 * 2) - wma1).ewm(span=sqrt_window, adjust=False).mean()
return hull_moving_average
# Calculate the EHMA for the closing prices with a window size of 14
data['EHMA'] = calculate_ehma(data['Close'], window=14)
# ********* End of moving average calculation *********
# ********* Start of plot creation *********
ap = [mpf.make_addplot(data['EHMA'], panel=0, color='b', ylabel='EHMA')]
fig, axes = mpf.plot(data, type='candle', addplot=ap, style='yahoo', title='Nike Stock Prices with Exponential Hull Moving Average', returnfig=True)
# Create a dummy line to add to the legend
ehma_line = mlines.Line2D([], [], color='blue', label='EHMA')
axes[0].legend(handles=[ehma_line], loc='upper left')
plt.show()
# ********* End of plot creation *********
In this code, the section between the “Start of moving average calculation” and “End of moving average calculation” comments is where the moving average is calculated. You can replace the calculate_ehma
function call with a function call for a different type of moving average to see a differently calculated moving average lines plotted on the chart using the other code samples for them provided in this post.
Python Chart Output
You ought to get a chart output similar to mine when below when executing the .py file.
Practical Tips for Utilizing Moving Averages for Day Trading
Moving averages can be a helpful tool for day trader’s, but they must be used correctly to maximize their effectiveness. Here are some practical tips for using moving averages in day trading:
- Use Multiple Moving Averages: Using multiple moving averages of different lengths can help you identify both short-term and long-term trends. For instance, a short-term moving average (like a 10-day SMA) can help identify immediate trends, while a longer-term moving average (like a 50-day SMA or 200) can help identify the overall trend. Don’t worry that these seem ages away from intraday trading timeframes, you can scalp around them if they are approached for quick small profits.
- Look for Crossovers: As mentioned earlier, crossovers between two moving averages can signal potential buy or sell opportunities. A common strategy is to look for a short-term moving average crossing above a long-term moving average as a buy signal, and crossing below as a sell signal.
- Consider the Market Context: Moving averages work best in trending markets. In range-bound or sideways markets, they may produce many false signals. Always consider the overall market context when interpreting moving average signals.
- Use as Support and Resistance Levels: Moving averages can also act as dynamic support and resistance levels. Prices often bounce off these levels, so they can be used to set stop-loss and take-profit levels.
While deciding what the best moving averages for day trading are for you, you might prefer a moving average that is more responsive to recent price changes, like the EMA, WMA, or EHMA. These can potentially help you spot trends and reversals more quickly. However is the press and longer term investors are concentrating on more standardised moving averages then you may find multiple short term opportunities scalping around that level, so sticking a label on one or two types as the best moving averages for day trading might because of how it’s calculated may not mean it makes you the most profit to trade around.
Common errors to avoid when using moving averages include relying solely on moving averages for trading decisions, ignoring the overall market context, and using too many moving averages at once, which can lead to confusion and conflicting signals.
When integrating moving averages with other analysis tools, it’s important to choose tools that complement moving averages. For instance, momentum oscillators like the Relative Strength Index (RSI) or the Moving Average Convergence Divergence (MACD) can be used to confirm signals from moving averages. Volume indicators can also be useful to confirm the strength of a trend.
Remember, while moving averages can be a helpful tool in your trading strategy, they should not be used in isolation. Always use them in conjunction with other tools and techniques, and always consider the overall market context.
Conclusion
Moving averages are a cornerstone in technical analysis, providing valuable insights into market trends and potential reversal points. They offer a simplified view of price data, smoothing out short-term fluctuations and highlighting longer-term trends and patterns.
The different types of moving averages – Simple, Smoothed, Centered, Weighted, Exponential, Median, Trix, and Exponential Hull – each have their unique characteristics and uses. Understanding these differences is crucial for choosing the right moving average for your trading strategy.
In Python, implementing these moving averages is straightforward, and with tools like VSCode, you can easily plot them on your price charts. This hands-on approach not only enhances your understanding of moving averages but also equips you with practical skills for your trading.
However, like any technical indicator, moving averages are not foolproof. They are best used in conjunction with other technical analysis tools and should be part of a comprehensive, well-thought-out trading strategy. Avoid common pitfalls like relying solely on moving averages for trading decisions or ignoring the overall market context.
In the world of trading, continuous learning and adaptation are key. So, keep exploring, keep learning, and keep refining your trading strategy.
Finally, never take anyone else’s word for what might be the best tool for your style of trading, practice and observe and see what suits you, where you recognise patterns and where you pick up a repeatable edge. When I first began trading professionally in 2002 I shared a chart screen with other guys on the trading floor and wasn’t certain what particular indicators they had placed on it, but I made up my own rules for how that mystery line moved with price over time and what it meant. Just because the creator of an indicator says it’s supposed to imply ‘x’, maybe it’s better at showing you ‘y’ which they never intended.
References and Further Reading
- Murphy, John J. Technical Analysis of the Financial Markets. New York Institute of Finance, 1999.
- Achelis, Steven B. Technical Analysis from A to Z. McGraw Hill, 2001.
- Kirkpatrick, Charles D., and Dahlquist, Julie R. Technical Analysis: The Complete Resource for Financial Market Technicians. FT Press, 2010.
- Pring, Martin J. Technical Analysis Explained. McGraw Hill, 2014.
Leave a Reply