Skip to content

Commit

Permalink
Improved test strategy base classes.
Browse files Browse the repository at this point in the history
  • Loading branch information
gbeced committed Oct 20, 2017
1 parent cda1072 commit a407ac5
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 5 deletions.
2 changes: 1 addition & 1 deletion testcases/bitstamp_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ def testNonceGenerator(self):
prevNonce = nonce


class TestStrategy(test_strategy.BaseTestStrategy):
class TestStrategy(test_strategy.BaseStrategy):
def __init__(self, feed, brk):
super(TestStrategy, self).__init__(feed, brk)
self.bid = None
Expand Down
30 changes: 26 additions & 4 deletions testcases/test_strategy.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,22 @@
from pyalgotrade import strategy


class BaseTestStrategy(strategy.BaseStrategy):
def __init__(self, barFeed, broker, maxMinutes=5):
super(BaseTestStrategy, self).__init__(barFeed, broker)
class TestStrategyMixin(object):
def __init__(self, *args, **kwargs):
super(TestStrategyMixin, self).__init__(*args, **kwargs)
self.posExecutionInfo = []
self.ordersUpdated = []
self.orderExecutionInfo = []
self.begin = datetime.datetime.now()
self.deadline = self.begin + datetime.timedelta(minutes=maxMinutes)
self.deadline = None
self._scheduled = {}
self.setStopAfter(5)

def setStopAfter(self, minutes):
self.deadline = datetime.datetime.now() + datetime.timedelta(minutes=minutes)

def scheduleCall(self, dateTime, callable):
self._scheduled.setdefault(dateTime, []).append(callable)

def onOrderUpdated(self, order):
self.ordersUpdated.append(order)
Expand All @@ -51,3 +59,17 @@ def onExitCanceled(self, position):
def onIdle(self):
if datetime.datetime.now() >= self.deadline:
self.stop()

def onBars(self, bars):
for callable in self._scheduled.get(bars.getDateTime(), []):
callable()


class BaseStrategy(TestStrategyMixin, strategy.BaseStrategy):
def __init__(self, barFeed, broker):
super(BaseStrategy, self).__init__(barFeed, broker)


class BacktestingStrategy(TestStrategyMixin, strategy.BacktestingStrategy):
def __init__(self, barFeed, cash_or_brk=1000000):
super(BacktestingStrategy, self).__init__(barFeed, cash_or_brk)

0 comments on commit a407ac5

Please sign in to comment.