Quantopian's community platform is shutting down. Please read this post for more information and download your code.
Back to Community
Exponential moving average crossover!! HELP

I am learning the early steps of quantopian and able to learn to replicate a simple moving average crossover . To create my on algorithm i tried to make a Exponential moving average(EMA) crossover instead of SMA by tweaking the above SMA crossover algorithm with the documentation in talib ema.
As I am novice to python programming I am unable to sucessfully execute my EMA crossover algorithm?

Can any one help with my programming

5 responses

So if you print your values for your EMA results you are going to get NaNs, this is because you are only fetching history for 7 days and you are asking it to compute a moving average for 10 days and 50 days. Since it has no data to compute the EMA on TALIB returns NaNs. Change your history function to get greater than the max number of days you wish to compute an EMA over and you should be good. Print statements are great debugging tools, btw.

Disclaimer

The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by Quantopian. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. No information contained herein should be regarded as a suggestion to engage in or refrain from any investment-related course of action as none of Quantopian nor any of its affiliates is undertaking to provide investment advice, act as an adviser to any plan or entity subject to the Employee Retirement Income Security Act of 1974, as amended, individual retirement account or individual retirement annuity, or give advice in a fiduciary capacity with respect to the materials presented herein. If you are an individual retirement or other investor, contact your financial advisor or other fiduciary unrelated to Quantopian about whether any given investment idea, strategy, product or service described herein may be appropriate for your circumstances. All investments involve risk, including loss of principal. Quantopian makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances.

Thanks james for finding the error in my code. is there a way to take the dates automatically from the form. I have found this post but I am not able to understand it.

Is it like this

price_history = history(bar_count= prices.index[n].date(), frequency='1d', field='price')  

its returning this error

Undefined name 'price'  
Undefined name 'n'  
Runtime exception: NameError: global name 'price' is not defined  

Can you elaborate a little more on what you mean by 'form'?

What i meant was days between Start and End Calender?
eg 1/4/2002 to 1/5/2015

I am guessing, simple moving averages are calculated from the start and end time period datas. for calculating SMA there is only a one liner code

data[context.sid].mavg(30)  

I'd also take a look at the documentation for history() I think that will help you solve some of your issues. An important item to note related to the code you posted above is that in the history function the parameter bar_count takes an integer only as a valid value. So the code will fail if like you did above, assuming you did your indexing correctly, give history() a datetime object as bar_count

Also note that history() gets called for every call to handle_data and for performance reasons it is imperative to only call for enough history to perform your calculations. Furthermore, a call to history will only get the history up to the current date in the backtest. (e.g. you can't get the price history from 2002 - 2015 if your algo is only in 2004 in the backtest.