Browse Source

CSV feed

master
Denis Tereshkin 8 years ago
parent
commit
3a9dc5fab6
  1. 1
      src/naiback/data/bars.py
  2. 10
      src/naiback/data/feed.py
  3. 0
      src/naiback/data/feeds/__init__.py
  4. 29
      src/naiback/data/feeds/genericcsvfeed.py
  5. 28
      tests/test_genericcsvfeed.py

1
src/naiback/data/bars.py

@ -1,6 +1,7 @@ @@ -1,6 +1,7 @@
from ..exceptions import NaibackException
class Bars:
"""
Basic bar series structure

10
src/naiback/data/feed.py

@ -1,4 +1,14 @@ @@ -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

0
src/naiback/data/feeds/__init__.py

29
src/naiback/data/feeds/genericcsvfeed.py

@ -0,0 +1,29 @@ @@ -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

28
tests/test_genericcsvfeed.py

@ -0,0 +1,28 @@ @@ -0,0 +1,28 @@
import pytest
import datetime
import io
from naiback.data.feeds.genericcsvfeed import GenericCSVFeed
@pytest.fixture
def sample():
return '''
<TICKER>,<PER>,<DATE>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL>
MICEX,D,20100111,000000,1411.3700000,1456.7600000,1411.3700000,1444.7800000,51634239250
MICEX,D,20100112,000000,1444.7800000,1445.6400000,1424.8700000,1427.6700000,38343314792
MICEX,D,20100113,000000,1417.8000000,1444.7700000,1412.9300000,1435.0100000,42183285247
MICEX,D,20100114,000000,1439.5500000,1456.2700000,1439.5500000,1455.6500000,44372479120
'''
def test_feed(sample):
feed = GenericCSVFeed(io.StringIO(sample))
bars = feed.items()
assert len(bars) == 4
Loading…
Cancel
Save