def testResampledBarFeed(self): barFeed = yahoofeed.Feed() barFeed.addBarsFromCSV( "spy", common.get_data_file_path("spy-2010-yahoofinance.csv")) barFeed.addBarsFromCSV( "nikkei", common.get_data_file_path("nikkei-2010-yahoofinance.csv")) resampledBarFeed = resampled_bf.ResampledBarFeed( barFeed, bar.Frequency.MONTH) disp = dispatcher.Dispatcher() disp.addSubject(barFeed) disp.addSubject(resampledBarFeed) disp.run() weeklySpyBarDS = resampledBarFeed["spy"] weeklyNikkeiBarDS = resampledBarFeed["nikkei"] # Check first bar self.assertEqual(weeklySpyBarDS[0].getDateTime().date(), datetime.date(2010, 1, 1)) self.assertEqual(weeklyNikkeiBarDS[0].getDateTime().date(), datetime.date(2010, 1, 1)) # Check last bar self.assertEqual(weeklySpyBarDS[-1].getDateTime().date(), datetime.date(2010, 11, 1)) self.assertEqual(weeklyNikkeiBarDS[-1].getDateTime().date(), datetime.date(2010, 11, 1))
def resampleBarFeed(self, frequency, callback): """ Builds a resampled barfeed that groups bars by a certain frequency. :param frequency: The grouping frequency in seconds. Must be > 0. :param callback: A function similar to onBars that will be called when new bars are available. :rtype: :class:`pyalgotrade.barfeed.BaseBarFeed`. """ ret = resampled.ResampledBarFeed(self.getFeed(), frequency) ret.getNewValuesEvent().subscribe(callback) self.getDispatcher().addSubject(ret) self.__resampledBarFeeds.append(ret) return ret