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