From 3a9dc5fab66a6a071266078ad964440030445e05 Mon Sep 17 00:00:00 2001 From: Denis Tereshkin Date: Sat, 17 Mar 2018 16:49:52 +0700 Subject: [PATCH] CSV feed --- src/naiback/data/bars.py | 1 + src/naiback/data/feed.py | 10 ++++++++ src/naiback/data/feeds/__init__.py | 0 src/naiback/data/feeds/genericcsvfeed.py | 29 ++++++++++++++++++++++++ tests/test_genericcsvfeed.py | 28 +++++++++++++++++++++++ 5 files changed, 68 insertions(+) create mode 100644 src/naiback/data/feeds/__init__.py create mode 100644 src/naiback/data/feeds/genericcsvfeed.py create mode 100644 tests/test_genericcsvfeed.py diff --git a/src/naiback/data/bars.py b/src/naiback/data/bars.py index 8ccdddf..bdee2aa 100644 --- a/src/naiback/data/bars.py +++ b/src/naiback/data/bars.py @@ -1,6 +1,7 @@ from ..exceptions import NaibackException + class Bars: """ Basic bar series structure diff --git a/src/naiback/data/feed.py b/src/naiback/data/feed.py index ea95a4e..cb19b5b 100644 --- a/src/naiback/data/feed.py +++ b/src/naiback/data/feed.py @@ -1,4 +1,14 @@ +class Bar: + + def __init__(self, open_, high, low, close, volume, timestamp): + self.open = open_ + self.high = high + self.low = low + self.close = close + self.volume = volume + self.timestamp = timestamp + class Feed: """ Interface for data source diff --git a/src/naiback/data/feeds/__init__.py b/src/naiback/data/feeds/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/naiback/data/feeds/genericcsvfeed.py b/src/naiback/data/feeds/genericcsvfeed.py new file mode 100644 index 0000000..5532bb0 --- /dev/null +++ b/src/naiback/data/feeds/genericcsvfeed.py @@ -0,0 +1,29 @@ + +from naiback.data.feed import Feed, Bar +import csv +import datetime +import itertools + +class GenericCSVFeed(Feed): + + def __init__(self, fp): + self.bars = [] + reader = csv.reader(fp, delimiter=',') + next(reader) + next(reader) + for row in reader: + try: + open_ = row[4] + high = row[5] + low = row[6] + close = row[7] + volume = row[8] + date = row[2] + time = row[3] + dt = datetime.datetime.strptime(date + "_" + time, "%Y%m%d_%H%M%S") + self.bars.append(Bar(open_, high, low, close, volume, dt)) + except IndexError: + pass + + def items(self): + return self.bars diff --git a/tests/test_genericcsvfeed.py b/tests/test_genericcsvfeed.py new file mode 100644 index 0000000..7de5cb5 --- /dev/null +++ b/tests/test_genericcsvfeed.py @@ -0,0 +1,28 @@ + + +import pytest +import datetime +import io + +from naiback.data.feeds.genericcsvfeed import GenericCSVFeed + + +@pytest.fixture +def sample(): + return ''' +,,,