Safari Books Online is a digital library providing on-demand subscription access to thousands of learning resources.
In Chapter 3, Get Into Terms with Commonly Used Functions we learned how to calculate the exponential moving average of stock prices. We will plot the close price of a stock and three of its exponential moving averages. To clarify the plot, we will add a legend. Also, we will indicate crossovers of two of the averages with annotations. Some steps are again omitted to avoid repetition.
Calculate and plot the exponential moving averages: Go back to Chapter 3, Get into Terms with Commonly Used Functions if needed and review the exponential moving average algorithm. Calculate and plot the exponential moving averages of 9, 12 and 15 periods.
emas = [] for i in range(9, 18, 3): weights = numpy.exp(numpy.linspace(-1., 0., i)) weights /= weights.sum() ema = numpy.convolve(weights, close)[i-1:-i+1] idx = (i - 6)/3 ax.plot(dates[i-1:], ema, lw=idx, label="EMA(%s)" % (i)) data = numpy.column_stack((dates[i-1:], ema)) emas.append(numpy.rec.fromrecords( data, names=["dates", "ema"]))
Notice that the plot function call needs a label for the legend. We stored the moving averages in record arrays for the next step.
Annotate the crossover points: Now that we have the crossover points annotate them with arrows. Make sure that the annotation text is slightly away from the crossover points.
for xpoint in xpoints:
ax.annotate('x', xy=xpoint, textcoords='offset points',
xytext=(-50, 30),
arrowprops=dict(arrowstyle="->"))