Beispiel #1
0
    def testPriority(self):
        feed4 = RealtimeFeed([], None)
        feed3 = RealtimeFeed([], None)
        feed2 = RealtimeFeed([], 3)
        feed1 = RealtimeFeed([], 0)

        dispatcher = observer.Dispatcher()
        dispatcher.addSubject(feed3)
        dispatcher.addSubject(feed2)
        dispatcher.addSubject(feed1)
        self.assertEqual(dispatcher.getSubjects(), [feed1, feed2, feed3])

        dispatcher = observer.Dispatcher()
        dispatcher.addSubject(feed1)
        dispatcher.addSubject(feed2)
        dispatcher.addSubject(feed3)
        self.assertEqual(dispatcher.getSubjects(), [feed1, feed2, feed3])

        dispatcher = observer.Dispatcher()
        dispatcher.addSubject(feed3)
        dispatcher.addSubject(feed4)
        dispatcher.addSubject(feed2)
        dispatcher.addSubject(feed1)
        self.assertEqual(dispatcher.getSubjects(),
                         [feed1, feed2, feed3, feed4])
Beispiel #2
0
    def run(self, feed, useAdjustedCloseForReturns=True):
        """Runs the analysis using the bars supplied by the feed.

        :param barFeed: The bar feed to use to run the analysis.
        :type barFeed: :class:`pyalgotrade.barfeed.BarFeed`.
        :param useAdjustedCloseForReturns: True if adjusted close values should be used to calculate returns.
        :type useAdjustedCloseForReturns: boolean.
        """

        try:
            self.__feed = feed
            self.__rets = {}
            self.__futureRets = {}
            for instrument in feed.getRegisteredInstruments():
                self.__events.setdefault(instrument, [])
                self.__futureRets[instrument] = []
                if useAdjustedCloseForReturns:
                    ds = feed[instrument].getAdjCloseDataSeries()
                else:
                    ds = feed[instrument].getCloseDataSeries()
                self.__rets[instrument] = roc.RateOfChange(ds, 1)

            feed.getNewBarsEvent().subscribe(self.__onBars)
            dispatcher = observer.Dispatcher()
            dispatcher.addSubject(feed)
            dispatcher.run()
        finally:
            feed.getNewBarsEvent().unsubscribe(self.__onBars)
Beispiel #3
0
    def testFeedWithQuandl(self):
        class RowFilter(csvfeed.RowFilter):
            def includeRow(self, dateTime, values):
                return dateTime.year == 2013

        feed = csvfeed.Feed("Date",
                            "%Y-%m-%d",
                            maxLen=40,
                            timezone=marketsession.USEquities.timezone)
        feed.setRowFilter(RowFilter())
        feed.setTimeDelta(datetime.timedelta(hours=23, minutes=59, seconds=59))
        feed.addValuesFromCSV(common.get_data_file_path("quandl_gold_2.csv"))

        for col in ["USD", "GBP", "EUR"]:
            self.assertEqual(len(feed[col]), 0)

        dispatcher = observer.Dispatcher()
        dispatcher.addSubject(feed)
        dispatcher.run()

        for col in ["USD", "GBP", "EUR"]:
            self.assertEqual(len(feed[col]), 39)

        self.assertEqual(feed["USD"][-1], 1333.0)
        self.assertEqual(feed["GBP"][-1], 831.203)
        self.assertEqual(feed["EUR"][-1], 986.75)
        self.assertFalse(dt.datetime_is_naive(feed["USD"].getDateTimes()[-1]))
        self.assertEqual(
            feed["USD"].getDateTimes()[-1],
            dt.localize(datetime.datetime(2013, 9, 29, 23, 59, 59),
                        marketsession.USEquities.timezone))
Beispiel #4
0
def resample_impl(barFeed, frequency, csvFile):
    sampler = Sampler(barFeed, frequency, csvFile)

    # Process all bars.
    disp = observer.Dispatcher()
    disp.addSubject(barFeed)
    disp.run()

    sampler.finish()
Beispiel #5
0
def tstBaseFeedInterface(testCase, feed):
    # This tests the observer.Subject interface.
    dispatcher = observer.Dispatcher()
    dispatcher.addSubject(feed)
    dispatcher.run()

    # This tests the feed.BaseFeed interface.
    feed.isRealTime()
    feed.createDataSeries("any", 10)
    feed.getNextValues()
Beispiel #6
0
    def test1NrtFeed(self):
        values = []
        now = datetime.datetime.now()
        datetimes = [now + datetime.timedelta(seconds=i) for i in xrange(10)]
        nrtFeed = NonRealtimeFeed(copy.copy(datetimes))
        nrtFeed.getEvent().subscribe(lambda x: values.append(x))

        dispatcher = observer.Dispatcher()
        dispatcher.addSubject(nrtFeed)
        dispatcher.run()

        self.assertEqual(values, datetimes)
Beispiel #7
0
    def testDispatchOrder(self):
        values = []
        now = datetime.datetime.now()
        feed1 = NonRealtimeFeed([now], 0)
        feed2 = RealtimeFeed([now + datetime.timedelta(seconds=1)], None)
        feed1.getEvent().subscribe(lambda x: values.append(x))
        feed2.getEvent().subscribe(lambda x: values.append(x))

        dispatcher = observer.Dispatcher()
        dispatcher.addSubject(feed2)
        dispatcher.addSubject(feed1)
        self.assertEqual(dispatcher.getSubjects(), [feed1, feed2])
        dispatcher.run()
        # Check that although feed2 is realtime, feed1 was dispatched before.
        self.assertTrue(values[0] < values[1])
Beispiel #8
0
	def test2NrtFeeds(self):
		values = []
		now = datetime.datetime.now()
		datetimes1 = [now + datetime.timedelta(seconds=i) for i in xrange(10)]
		datetimes2 = [now + datetime.timedelta(seconds=i+len(datetimes1)) for i in xrange(10)]
		nrtFeed1 = NonRealtimeFeed(copy.copy(datetimes1))
		nrtFeed1.getEvent().subscribe(lambda x: values.append(x))
		nrtFeed2 = NonRealtimeFeed(copy.copy(datetimes2))
		nrtFeed2.getEvent().subscribe(lambda x: values.append(x))

		dispatcher = observer.Dispatcher()
		dispatcher.addSubject(nrtFeed1)
		dispatcher.addSubject(nrtFeed2)
		dispatcher.run()

		self.assertEquals(len(values), len(datetimes1) + len(datetimes2))
		self.assertEquals(values[:len(datetimes1)], datetimes1)
		self.assertEquals(values[len(datetimes1):], datetimes2)
Beispiel #9
0
    def testFeed(self):
        values = [(datetime.datetime.now() + datetime.timedelta(seconds=i), {
            "i": i
        }) for i in xrange(100)]

        feed = memfeed.MemFeed()
        feed.addValues(values)

        # Check that the dataseries are available after adding values.
        self.assertTrue("i" in feed)
        self.assertEqual(len(feed["i"]), 0)
        self.assertFalse("dt" in feed)

        dispatcher = observer.Dispatcher()
        dispatcher.addSubject(feed)
        dispatcher.run()

        self.assertTrue("i" in feed)
        self.assertFalse("dt" in feed)
        self.assertEqual(feed["i"][0], 0)
        self.assertEqual(feed["i"][-1], 99)
Beispiel #10
0
    def testFeedWithBars(self):
        feed = csvfeed.Feed("Date", "%Y-%m-%d")
        feed.addValuesFromCSV(
            common.get_data_file_path("orcl-2000-yahoofinance.csv"))

        self.assertEqual(len(feed.getKeys()), 6)
        for col in ["Open", "High", "Low", "Close", "Volume", "Adj Close"]:
            self.assertEqual(len(feed[col]), 0)

        dispatcher = observer.Dispatcher()
        dispatcher.addSubject(feed)
        dispatcher.run()

        for col in ["Open", "High", "Low", "Close", "Volume", "Adj Close"]:
            self.assertEqual(len(feed[col]), 252)

        self.assertEqual(feed["Open"][-1], 30.87)
        self.assertEqual(feed["High"][-1], 31.31)
        self.assertEqual(feed["Low"][-1], 28.69)
        self.assertEqual(feed["Close"][-1], 29.06)
        self.assertEqual(feed["Volume"][-1], 31655500)
        self.assertEqual(feed["Adj Close"][-1], 28.41)