# [Numpy-discussion] How to get the prices of Moving Averages Crosses?

Andre Lopes lopes80andre at gmail.com
Tue Mar 1 13:55:54 EST 2011

```Hi Joe,

I'm not okay with linear interpolation. Can you suggest me some books around
this subject. I will mainly try to build some indicator for the stock
market.

If you can give me a clue I would be appreciated.

Best Regards,

On Tue, Mar 1, 2011 at 5:23 PM, Joe Kington <jkington at wisc.edu> wrote:

> Hi Andre,
>
> Assuming that you want the exact point (date and value) where each crossing
> occurs, you'll need to interpolate where they cross.
>
> There are a number of different ways to do so, but assuming you're okay
> with linear interpolation, and everything's sampled on the same dates, you
> can simply do something like this:
>
> import numpy as np
> import matplotlib.pyplot as plt
>
> def main():
>     x = np.linspace(0, 2*np.pi, 20)
>     y1 = np.sin(2*x)
>     y2 = np.cos(x)
>     crossings = find_crossings(x, y1, y2)
>     cross_x, cross_y = crossings.T
>     plt.plot(x, y1, 'bx-')
>     plt.plot(x, y2, 'gx-')
>     plt.plot(cross_x, cross_y, 'ro')
>     plt.show()
>
> def find_crossings(x, y1, y2):
>     diff = np.diff(np.sign(y1 - y2))
>     indicies, = np.nonzero(diff)
>     crossings = [interpolate_crossing(i, x, y1, y2) for i in indicies]
>     return np.array(crossings)
>
> def interpolate_crossing(i, x, y1, y2):
>     slope = (       (y1[i] - y2[i])
>            / ((y2[i+1] - y2[i]) - (y1[i+1] - y1[i])))
>     x = x[i] + slope * (x[i+1] - x[i])
>     y = y1[i] + slope * (y1[i+1] - y1[i])
>     return x, y
>
> main()
>
> [image: VXsqp.png]
>
> On Tue, Mar 1, 2011 at 10:07 AM, Andre Lopes <lopes80andre at gmail.com>wrote:
>
>> Hi,
>>
>> I'm new to Numpy. I'm doing some tests with some Stock Market Quotes
>>
>> My struggle right now is "how to get the values of the moving averages
>> crosses", I send an image in attach to illustrate what I'm trying to
>> get.
>>
>> I'm using the this computation to get when the moving averages
>> crosses, but when I look at the graph, the values doesn't seem ok.
>>
>> [quote]
>> # Get when the ma20 cross ma50
>> equal = np.round(ma20,2)==np.round(ma50,2)
>> dates_cross  = (dates[equal])
>> prices_cross = (prices[equal])
>> [/quote]
>>
>>
>> The full code is this:
>> [quote]
>> # Modules
>> import datetime
>> import numpy as np
>> import matplotlib.finance as finance
>> import matplotlib.mlab as mlab
>> import matplotlib.pyplot as plot
>>
>> # Define quote
>> startdate = datetime.date(2008,10,1)
>> today = enddate = datetime.date.today()
>> ticker = 'uso'
>>
>> # Catch CSV
>> fh = finance.fetch_historical_yahoo(ticker, startdate, enddate)
>>
>> # From CSV to REACARRAY
>> r = mlab.csv2rec(fh); fh.close()
>> # Order by Desc
>> r.sort()
>>
>>
>> ### Methods Begin
>> def moving_average(x, n, type='simple'):
>>    """
>>    compute an n period moving average.
>>
>>    type is 'simple' | 'exponential'
>>
>>    """
>>    x = np.asarray(x)
>>    if type=='simple':
>>        weights = np.ones(n)
>>    else:
>>        weights = np.exp(np.linspace(-1., 0., n))
>>
>>    weights /= weights.sum()
>>
>>
>>    a =  np.convolve(x, weights, mode='full')[:len(x)]
>>    a[:n] = a[n]
>>    return a
>> ### Methods End
>>
>>
>> dates = r.date
>> ma20 = moving_average(prices, 20, type='simple')
>> ma50 = moving_average(prices, 50, type='simple')
>>
>> # Get when the ma20 cross ma50
>> equal = np.round(ma20,2)==np.round(ma50,2)
>> dates_cross  = (dates[equal])
>> prices_cross = (prices[equal])
>>
>> # Ver se a ma20 > ma50
>> # ma20_greater_than_ma50 = np.round(ma20,2) > np.round(ma50,2)
>> # dates_ma20_greater_than_ma50  = (dates[ma20_greater_than_ma50])
>> # prices_ma20_greater_than_ma50 = (prices[ma20_greater_than_ma50])
>>
>> print dates_cross
>> print prices_cross
>> #print dates_ma20_greater_than_ma50
>> #print prices_ma20_greater_than_ma50
>>
>>
>> plot.plot(prices)
>> plot.plot(ma20)
>> plot.plot(ma50)
>> plot.show()
>> [/quote]
>>
>> Someone can give me some clues?
>>
>> Best Regards,
>>
>> _______________________________________________
>> NumPy-Discussion mailing list
>> NumPy-Discussion at scipy.org
>> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>>
>>
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20110301/9d294ae9/attachment.html>
```