Hi,
Was trying to add multiple symbols to the algo,but got an error message '
During the algorithm initialization, the following exception has occurred: Trying to dynamically access a method that does not exist throws a TypeError exception. To prevent the exception, ensure each parameter type matches those required by the EMA method. Please checkout the API documentation. at Initialize in main.py:line 38 TypeError : No method matches given arguments for EMA'Hoping someone could highlight what I did wrong because Im quite new in Python and programming.Thank you,class MovingAverageCrossAlgorithm(QCAlgorithm):
def Initialize(self):
'''Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.'''
self.SetStartDate(2014, 1, 1) #Set Start Date
self.SetEndDate(2016, 1, 1) #Set End Date
self.SetCash(100000) #Set Strategy Cash
# Find more symbols here: http://quantconnect.com/data
# initialize our forex data
ForexSymbols =["EURUSD", "USDJPY", "EURGBP", "EURCHF", "USDCAD", "USDCHF", "AUDUSD","NZDUSD"]
# initialize our forex data
for symbol in ForexSymbols:
forex = self.AddForex(symbol)
# create a 15 day exponential moving average
self.fast = self.EMA((forex), 3, Resolution.Minute)
# create a 30 day exponential moving average
self.slow = self.EMA((forex), 7, Resolution.Minute)
self.rsi = self.RSI((forex), 7,MovingAverageType.Simple, Resolution.Minute)
self.atr = self.ATR((forex), 5, MovingAverageType.Simple, Resolution.Minute)
self.atr2 = self.ATR((forex), 12, MovingAverageType.Simple, Resolution.Minute)
self.SetWarmUp(10, Resolution.Minute)
self.previous = None
def OnData(self, data):
'''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.'''
# a couple things to notice in this method:
# 1. We never need to 'update' our indicators with the data, the engine takes care of this for us
# 2. We can use indicators directly in math expressions
# 3. We can easily plot many indicators at the same time
# wait for our slow ema to fully initialize
if not self.slow.IsReady:
return
# only once per day
if self.previous is not None and self.previous.date() == self.Time.date():
return
# define a small tolerance on our checks to avoid bouncing
tolerance = 0.00015
holdings = self.Portfolio[forex].Quantity
# we only want to go long if we're currently short or flat
if holdings <= 0:
# if the fast is greater than the slow, we'll go long
if self.fast.Current.Value > self.slow.Current.Value *(1 + tolerance) and self.rsi.Current.Value>60 and self.atr.Current.Value>self.atr2.Current.Value:
self.Log("BUY >> {0}".format(self.Securities[forex].Price))
self.SetHoldings((forex), 0.25)
if self.fast.Current.Value < self.slow.Current.Value *(1 - tolerance) and self.rsi.Current.Value<40 and self.atr.Current.Value>self.atr2.Current.Value:
self.Log("SELL >> {0}".format(self.Securities[forex].Price))
self.SetHoldings((forex), 0.25)
# we only want to liquidate if we're currently long
# if the fast is less than the slow we'll liquidate our long
if holdings > 0 and self.fast.Current.Value < self.slow.Current.Value:
self.Log("SELL >> {0}".format(self.Securities[forex].Price))
self.Liquidate((forex))
if holdings < 0 and self.fast.Current.Value > self.slow.Current.Value:
self.Log("BUY >> {0}".format(self.Securities[forex].Price))
self.Liquidate((forex))
Derek Melchin
Hey Munirk,
This error message occurs because of line 14 in the code published above. It should read
forex = self.AddForex(symbol).Symbol
However, this is not the only issue with the code. Specifically, the for-loop in Initialize only sets up the technical indicators for the last symbol in the `ForexSymbols` list. See the attached backtest for a working solution.
Going forward, I recommend checking out our educational resources to get familiar with how our API works. Our documentation, bootcamp lessons, and tutorials are all great places to start.
Best,
Derek Melchin
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 QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect 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. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
Munirk
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 QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect 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. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.
To unlock posting to the community forums please complete at least 30% of Boot Camp.
You can continue your Boot Camp training progress from the terminal. We hope to see you in the community soon!