5 changed files with 68 additions and 0 deletions
@ -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 |
||||
@ -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…
Reference in new issue