5 changed files with 68 additions and 0 deletions
@ -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 @@ |
|||||||
|
|
||||||
|
|
||||||
|
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