So I have created this custom class and relevant code like this - 

Search for "rsiSelectionData.update(sec.EndTime, sec.AdjustedPrice, sec.DollarVolume)".

 

While debugging, the debugger goes to this line, but nest step it goes to next line

"validBuyValues =  filter(lambda x : x.isBuyZone, self.stateData.values())"

Not sure why the debugger does not go into the custom update method?

I get the debt statements though. Any ideas? thank you

 

from Alphas.RsiAlphaModel import RsiAlphaModel
from Execution.ImmediateExecutionModel import ImmediateExecutionModel
from System import *
from System.Collections.Generic import List
from QuantConnect import *
from QuantConnect.Algorithm import QCAlgorithm
from QuantConnect.Data.UniverseSelection import *

'''
Simple testing strategy so that find all stocks for which the RSI is more than 20
Buy. - if RSI of today is more than 25, but yesterday was less than 25
Liquidate - if RSI of open positions goes above 75

SELL - if RSI today is less than 75 but yesterday was more than 75
Liquidate - if RSI of open positions goes below 25
'''
class ResistanceVentralThrustAssembly(QCAlgorithm):

def Initialize(self):
self.SetStartDate(2019, 11, 20) # Set Start Date
self.SetEndDate(2019, 11, 21)
self.SetCash(10000) # Set Strategy Cash

# Strategy is for Daily data
self.UniverseSettings.Resolution = Resolution.Daily

#self.AddUniverse(self.MyCoarseFilterFunction, self.FineSelectionFunction)
self.AddUniverse(self.MyCoarseFilterFunction)
self.SetWarmUp(timedelta(20))

self.AddAlpha(RsiAlphaModel(60, Resolution.Daily))

self.SetExecution(ImmediateExecutionModel())

self.SetPortfolioConstruction(InsightWeightingPortfolioConstructionModel())

self.SetRiskManagement(TrailingStopRiskManagementModel(0.03))

self.__numberOfSymbols = 10
self.stateData = {}

def OnData(self, data):
'''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
Arguments:
data: Slice object keyed by symbol containing the stock data
'''

# if not self.Portfolio.Invested:
# self.SetHoldings("SPY", 1)
pass

def MyCoarseFilterFunction(self, coarse):

# Get all symbols by dollar volume
sortedByDollarVolume = sorted(coarse, key=lambda x: x.DollarVolume, reverse=True)
filtered = [x for x in sortedByDollarVolume
if x.Price > 10 ][:5]

for sec in filtered:

if sec.Symbol not in self.stateData:
self.stateData[sec.Symbol] = SelectionData(self, sec.Symbol, 14)

rsiSelectionData = self.stateData[sec.Symbol]
rsiSelectionData.update(sec.EndTime, sec.AdjustedPrice, sec.DollarVolume)

validBuyValues = filter(lambda x : x.isBuyZone, self.stateData.values())

return [x.Symbol for x in filtered[:1] ]

class SelectionData(object):
def __init__(self, algo, symbol, period):
self.symbol = symbol
self.rsi = ExponentialMovingAverage(period)
self.isBuyZone = False
self.volume = 0
self.algo = algo

def update(self, time, price, volume):
self.algo.Debug('test')
self.volume = volume
self.rsi.Update(time, price)
self.algo.Debug('rsi----')
self.algo.Debug(self.rsi)