Browse Source

Work (yes)

master
Denis Tereshkin 4 years ago
parent
commit
b5aef9fb90
  1. 52
      src/naiback/data/bars.py
  2. 4
      src/naiback/data/feeds/yahoofeed.py
  3. 15
      src/naiback/strategy/strategy.py

52
src/naiback/data/bars.py

@ -144,7 +144,7 @@ class Bars: @@ -144,7 +144,7 @@ class Bars:
def synchronize_to(self, other):
ix1 = 0
ix2 = 0
ix2 = -1
new_open = []
new_high = []
@ -153,39 +153,29 @@ class Bars: @@ -153,39 +153,29 @@ class Bars:
new_volume = []
new_timestamp = []
prev_open = 0
prev_high = 0
prev_low = 0
prev_close = 0
for i in range(0, len(other.open)):
if ix1 < len(self.open) - 1:
if other.timestamp[ix2] < self.timestamp[ix1 + 1]:
new_open.append(self.open[ix1 + 1])
new_high.append(self.high[ix1 + 1])
new_low.append(self.low[ix1 + 1])
new_close.append(self.close[ix1 + 1])
new_volume.append(0)
new_timestamp.append(other.timestamp[ix2])
else:
if ix1 < len(self.open) - 2:
ix1 += 1
new_open.append(self.open[ix1 + 1])
new_high.append(self.high[ix1 + 1])
new_low.append(self.low[ix1 + 1])
new_close.append(self.close[ix1 + 1])
new_volume.append(0)
new_timestamp.append(other.timestamp[ix2])
else:
new_open.append(self.open[ix1])
new_high.append(self.high[ix1])
new_low.append(self.low[ix1])
new_close.append(self.close[ix1])
new_volume.append(0)
new_timestamp.append(other.timestamp[ix2])
if ix2 < len(self.timestamp) - 1 and other.timestamp[i] > self.timestamp[ix2 + 1]:
if ix2 != -1:
prev_open = self.open[ix2]
prev_high = self.high[ix2]
prev_low = self.low[ix2]
prev_close = self.close[ix2]
else:
new_open.append(self.open[ix1])
new_high.append(self.high[ix1])
new_low.append(self.low[ix1])
new_close.append(self.close[ix1])
new_volume.append(0)
new_timestamp.append(other.timestamp[ix2])
prev_open = 0
prev_high = 0
prev_low = 0
prev_close = 0
ix2 += 1
new_open.append(prev_open)
new_high.append(prev_high)
new_low.append(prev_high)
new_close.append(prev_close)
new_timestamp.append(other.timestamp[i])
self.index = range(0, len(new_open))
self.open = new_open

4
src/naiback/data/feeds/yahoofeed.py

@ -13,7 +13,6 @@ class YahooCSVFeed(Feed): @@ -13,7 +13,6 @@ class YahooCSVFeed(Feed):
next(reader)
for row in reader:
try:
self.ticker_ = row[0]
open_ = float(row[1])
high = float(row[2])
low = float(row[3])
@ -25,6 +24,9 @@ class YahooCSVFeed(Feed): @@ -25,6 +24,9 @@ class YahooCSVFeed(Feed):
except IndexError:
pass
def set_ticker(self, ticker):
self.ticker_ = ticker
def type(self):
return 'bars'

15
src/naiback/strategy/strategy.py

@ -8,6 +8,7 @@ from naiback.analyzers.equityanalyzer import EquityAnalyzer @@ -8,6 +8,7 @@ from naiback.analyzers.equityanalyzer import EquityAnalyzer
from naiback.exceptions import NaibackException
import math
import time
class Strategy:
"""
@ -55,9 +56,11 @@ class Strategy: @@ -55,9 +56,11 @@ class Strategy:
self.bars = self._get_bars(ticker)
def _prepare_bars(self, from_time, to_time):
start = time.time()
if len(self.feeds) == 0:
raise NaibackException('No feeds added to strategy')
v1 = time.time()
self.all_bars.clear()
for feed in self.feeds:
if from_time is None or to_time is None:
@ -65,11 +68,15 @@ class Strategy: @@ -65,11 +68,15 @@ class Strategy:
else:
self.all_bars.append(Bars.from_feed_filter(feed, from_time, to_time))
v2 = time.time()
all_dates = list(sorted(self._combine_dates()))
v3 = time.time()
for bars in self.all_bars:
self._synchronize_bars(bars, all_dates)
bars.index = range(0, len(bars.close))
v4 = time.time()
print("prepare bars: {} {} {} {}".format(v1 - start, v2 - v1, v3 - v2, v4 - v3))
def get_bars(self, ticker):
return self._get_bars(ticker)
@ -99,10 +106,10 @@ class Strategy: @@ -99,10 +106,10 @@ class Strategy:
volume = bars.volume[bar_pos]
for dt in all_dates:
if len(bars.timestamp) > bar_pos:
print("new close: {} ({})".format(close, dt))
#print("new close: {} ({})".format(close, dt))
if bars.timestamp[bar_pos] > dt:
print("Inserting at {}: {}".format(dt, close))
#print("Inserting at {}: {}".format(dt, close))
bars.insert_bar(bar_pos, open_, high, low, close, volume, dt)
else:
open_ = bars.open[bar_pos]
@ -112,11 +119,11 @@ class Strategy: @@ -112,11 +119,11 @@ class Strategy:
volume = bars.volume[bar_pos]
if bars.timestamp[bar_pos] > dt:
bars.insert_bar(bar_pos, open_, high, low, close, volume, dt)
print("new close: {} ({})".format(close, dt))
#print("new close: {} ({})".format(close, dt))
else:
bars.insert_bar(bar_pos, open_, high, low, close, volume, dt)
print("Inserting[2] at {}: {}".format(dt, close))
#print("Inserting[2] at {}: {}".format(dt, close))
bar_pos += 1

Loading…
Cancel
Save