|
|
|
@ -69,6 +69,7 @@ class Strategy: |
|
|
|
|
|
|
|
|
|
|
|
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)) |
|
|
|
|
|
|
|
|
|
|
|
def get_bars(self, ticker): |
|
|
|
def get_bars(self, ticker): |
|
|
|
return self._get_bars(ticker) |
|
|
|
return self._get_bars(ticker) |
|
|
|
@ -100,6 +101,7 @@ class Strategy: |
|
|
|
volume = bars.volume[bar_pos] |
|
|
|
volume = bars.volume[bar_pos] |
|
|
|
|
|
|
|
|
|
|
|
bars.insert_bar(bar_pos, open_, high, low, close, volume, dt) |
|
|
|
bars.insert_bar(bar_pos, open_, high, low, close, volume, dt) |
|
|
|
|
|
|
|
bar_pos += 1 |
|
|
|
|
|
|
|
|
|
|
|
def _combine_dates(self): |
|
|
|
def _combine_dates(self): |
|
|
|
dates = set() |
|
|
|
dates = set() |
|
|
|
@ -141,21 +143,27 @@ class Strategy: |
|
|
|
else: |
|
|
|
else: |
|
|
|
return None |
|
|
|
return None |
|
|
|
|
|
|
|
|
|
|
|
def buy_at_close(self, bar, ticker): |
|
|
|
def buy_at_close(self, bar, ticker=None): |
|
|
|
|
|
|
|
if ticker is None: |
|
|
|
|
|
|
|
ticker = 0 |
|
|
|
if isinstance(ticker, int): |
|
|
|
if isinstance(ticker, int): |
|
|
|
ticker = self.all_bars[ticker].ticker |
|
|
|
ticker = self.all_bars[ticker].ticker |
|
|
|
bars = self._get_bars(ticker) |
|
|
|
bars = self._get_bars(ticker) |
|
|
|
self.broker.set_timestamp(bars.timestamp[bar]) |
|
|
|
self.broker.set_timestamp(bars.timestamp[bar]) |
|
|
|
return self.broker.add_position(ticker, bars.close[bar], self.trade_size, bar) |
|
|
|
return self.broker.add_position(ticker, bars.close[bar], self.trade_size, bar) |
|
|
|
|
|
|
|
|
|
|
|
def short_at_open(self, bar, ticker): |
|
|
|
def short_at_open(self, bar, ticker=None): |
|
|
|
|
|
|
|
if ticker is None: |
|
|
|
|
|
|
|
ticker = 0 |
|
|
|
if isinstance(ticker, int): |
|
|
|
if isinstance(ticker, int): |
|
|
|
ticker = self.all_bars[ticker].ticker |
|
|
|
ticker = self.all_bars[ticker].ticker |
|
|
|
bars = self._get_bars(ticker) |
|
|
|
bars = self._get_bars(ticker) |
|
|
|
self.broker.set_timestamp(bars.timestamp[bar]) |
|
|
|
self.broker.set_timestamp(bars.timestamp[bar]) |
|
|
|
return self.broker.add_position(ticker, bars.open[bar], -self.trade_size, bar) |
|
|
|
return self.broker.add_position(ticker, bars.open[bar], -self.trade_size, bar) |
|
|
|
|
|
|
|
|
|
|
|
def short_at_limit(self, bar, price, ticker): |
|
|
|
def short_at_limit(self, bar, price, ticker=0): |
|
|
|
|
|
|
|
if ticker is None: |
|
|
|
|
|
|
|
ticker = 0 |
|
|
|
if isinstance(ticker, int): |
|
|
|
if isinstance(ticker, int): |
|
|
|
ticker = self.all_bars[ticker].ticker |
|
|
|
ticker = self.all_bars[ticker].ticker |
|
|
|
bars = self._get_bars(ticker) |
|
|
|
bars = self._get_bars(ticker) |
|
|
|
@ -168,7 +176,9 @@ class Strategy: |
|
|
|
else: |
|
|
|
else: |
|
|
|
return None |
|
|
|
return None |
|
|
|
|
|
|
|
|
|
|
|
def short_at_stop(self, bar, price, ticker): |
|
|
|
def short_at_stop(self, bar, price, ticker=None): |
|
|
|
|
|
|
|
if ticker is None: |
|
|
|
|
|
|
|
ticker = 0 |
|
|
|
if isinstance(ticker, int): |
|
|
|
if isinstance(ticker, int): |
|
|
|
ticker = self.all_bars[ticker].ticker |
|
|
|
ticker = self.all_bars[ticker].ticker |
|
|
|
bars = self._get_bars(ticker) |
|
|
|
bars = self._get_bars(ticker) |
|
|
|
@ -181,7 +191,9 @@ class Strategy: |
|
|
|
else: |
|
|
|
else: |
|
|
|
return None |
|
|
|
return None |
|
|
|
|
|
|
|
|
|
|
|
def short_at_close(self, bar, ticker): |
|
|
|
def short_at_close(self, bar, ticker=None): |
|
|
|
|
|
|
|
if ticker is None: |
|
|
|
|
|
|
|
ticker = 0 |
|
|
|
if isinstance(ticker, int): |
|
|
|
if isinstance(ticker, int): |
|
|
|
ticker = self.all_bars[ticker].ticker |
|
|
|
ticker = self.all_bars[ticker].ticker |
|
|
|
bars = self._get_bars(ticker) |
|
|
|
bars = self._get_bars(ticker) |
|
|
|
|