From a43a12282904a1591e70097cf375082f88fc165c Mon Sep 17 00:00:00 2001 From: Thomas Wiecki Date: Thu, 8 Aug 2013 16:37:31 -0400 Subject: [PATCH] TST: Forgot to add order method test algos. --- zipline/test_algorithms.py | 99 +++++++++++++++++++++++++++++++++++++- 1 file changed, 98 insertions(+), 1 deletion(-) diff --git a/zipline/test_algorithms.py b/zipline/test_algorithms.py index e8b2586b..e55c9ca6 100644 --- a/zipline/test_algorithms.py +++ b/zipline/test_algorithms.py @@ -223,7 +223,6 @@ class TestOrderAlgorithm(TradingAlgorithm): self.sale_price = None def handle_data(self, data): - print data[0] if self.incr == 0: assert 0 not in self.portfolio.positions else: @@ -235,6 +234,104 @@ class TestOrderAlgorithm(TradingAlgorithm): self.order(0, 1) +class TestOrderValueAlgorithm(TradingAlgorithm): + def initialize(self): + self.incr = 0 + self.sale_price = None + + def handle_data(self, data): + if self.incr == 0: + assert 0 not in self.portfolio.positions + else: + assert self.portfolio.positions[0]['amount'] == \ + self.incr, "Orders not filled immediately." + assert self.portfolio.positions[0]['last_sale_price'] == \ + data[0].price, "Orders not filled at current price." + self.incr += 2 + self.order_value(0, data[0].price * 2.) + + +class TestTargetAlgorithm(TradingAlgorithm): + def initialize(self): + self.target_shares = 0 + self.sale_price = None + + def handle_data(self, data): + if self.target_shares == 0: + assert 0 not in self.portfolio.positions + else: + assert self.portfolio.positions[0]['amount'] == \ + self.target_shares, "Orders not filled immediately." + assert self.portfolio.positions[0]['last_sale_price'] == \ + data[0].price, "Orders not filled at current price." + self.target_shares = np.random.randint(1, 30) + self.target(0, self.target_shares) + + +class TestOrderPercentAlgorithm(TradingAlgorithm): + def initialize(self): + self.target_shares = 0 + self.sale_price = None + + def handle_data(self, data): + if self.target_shares == 0: + assert 0 not in self.portfolio.positions + self.order(0, 10) + self.target_shares = 10 + return + else: + assert self.portfolio.positions[0]['amount'] == \ + self.target_shares, "Orders not filled immediately." + assert self.portfolio.positions[0]['last_sale_price'] == \ + data[0].price, "Orders not filled at current price." + + self.order_percent(0, .001) + self.target_shares += np.floor((.001 * + self.portfolio.portfolio_value) + / data[0].price) + + +class TestTargetPercentAlgorithm(TradingAlgorithm): + def initialize(self): + self.target_shares = 0 + self.sale_price = None + + def handle_data(self, data): + if self.target_shares == 0: + assert 0 not in self.portfolio.positions + self.target_shares = 1 + else: + assert np.round(self.portfolio.portfolio_value * 0.002) == \ + self.portfolio.positions[0]['amount'] * self.sale_price, \ + "Orders not filled correctly." + assert self.portfolio.positions[0]['last_sale_price'] == \ + data[0].price, "Orders not filled at current price." + self.sale_price = data[0].price + self.target_percent(0, .002) + + +class TestTargetValueAlgorithm(TradingAlgorithm): + def initialize(self): + self.target_shares = 0 + self.sale_price = None + + def handle_data(self, data): + if self.target_shares == 0: + assert 0 not in self.portfolio.positions + self.order(0, 10) + self.target_shares = 10 + return + else: + print self.portfolio + assert self.portfolio.positions[0]['amount'] == \ + self.target_shares, "Orders not filled immediately." + assert self.portfolio.positions[0]['last_sale_price'] == \ + data[0].price, "Orders not filled at current price." + + self.target_value(0, 20) + self.target_shares = np.round(20 / data[0].price) + + from zipline.algorithm import TradingAlgorithm from zipline.transforms import BatchTransform, batch_transform from zipline.transforms import MovingAverage