Skip to content

Commit

Permalink
Merge fb98c9a into 5e52d29
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrew Liang committed Sep 14, 2016
2 parents 5e52d29 + fb98c9a commit bc57ce9
Show file tree
Hide file tree
Showing 18 changed files with 543 additions and 113 deletions.
69 changes: 47 additions & 22 deletions tests/finance/test_slippage.py
Expand Up @@ -29,7 +29,7 @@

from zipline.protocol import DATASOURCE_TYPE
from zipline.finance.blotter import Order

from zipline.rl_manager import RestrictionsController
from zipline.data.data_portal import DataPortal
from zipline.protocol import BarData
from zipline.testing import tmp_bcolz_equity_minute_bar_reader
Expand Down Expand Up @@ -74,6 +74,10 @@ def init_class_fixtures(cls):
super(SlippageTestCase, cls).init_class_fixtures()
cls.ASSET133 = cls.env.asset_finder.retrieve_asset(133)

def init_instance_fixtures(self):
super(SlippageTestCase, self).init_instance_fixtures()
self.restrictions_controller = RestrictionsController()

def test_volume_share_slippage(self):
assets = (
(133, pd.DataFrame(
Expand Down Expand Up @@ -113,7 +117,8 @@ def test_volume_share_slippage(self):
bar_data = BarData(data_portal,
lambda: self.minutes[0],
'minute',
self.trading_calendar)
self.trading_calendar,
self.restrictions_controller)

orders_txns = list(slippage_model.simulate(
bar_data,
Expand Down Expand Up @@ -155,7 +160,8 @@ def test_volume_share_slippage(self):
bar_data = BarData(data_portal,
lambda: self.minutes[1],
'minute',
self.trading_calendar)
self.trading_calendar,
self.restrictions_controller)

orders_txns = list(slippage_model.simulate(
bar_data,
Expand All @@ -182,7 +188,8 @@ def test_orders_limit(self):
bar_data = BarData(self.data_portal,
lambda: self.minutes[3],
self.sim_params.data_frequency,
self.trading_calendar)
self.trading_calendar,
self.restrictions_controller)

orders_txns = list(slippage_model.simulate(
bar_data,
Expand All @@ -205,7 +212,8 @@ def test_orders_limit(self):
bar_data = BarData(self.data_portal,
lambda: self.minutes[3],
self.sim_params.data_frequency,
self.trading_calendar)
self.trading_calendar,
self.restrictions_controller)

orders_txns = list(slippage_model.simulate(
bar_data,
Expand All @@ -228,7 +236,8 @@ def test_orders_limit(self):
bar_data = BarData(self.data_portal,
lambda: self.minutes[3],
self.sim_params.data_frequency,
self.trading_calendar)
self.trading_calendar,
self.restrictions_controller)

orders_txns = list(slippage_model.simulate(
bar_data,
Expand Down Expand Up @@ -268,7 +277,8 @@ def test_orders_limit(self):
bar_data = BarData(self.data_portal,
lambda: self.minutes[0],
self.sim_params.data_frequency,
self.trading_calendar)
self.trading_calendar,
self.restrictions_controller)

orders_txns = list(slippage_model.simulate(
bar_data,
Expand All @@ -291,7 +301,8 @@ def test_orders_limit(self):
bar_data = BarData(self.data_portal,
lambda: self.minutes[0],
self.sim_params.data_frequency,
self.trading_calendar)
self.trading_calendar,
self.restrictions_controller)

orders_txns = list(slippage_model.simulate(
bar_data,
Expand All @@ -314,7 +325,8 @@ def test_orders_limit(self):
bar_data = BarData(self.data_portal,
lambda: self.minutes[1],
self.sim_params.data_frequency,
self.trading_calendar)
self.trading_calendar,
self.restrictions_controller)

orders_txns = list(slippage_model.simulate(
bar_data,
Expand Down Expand Up @@ -504,7 +516,8 @@ def test_orders_stop(self, name, order_data, event_data, expected):
bar_data = BarData(data_portal,
lambda: dt,
'minute',
self.trading_calendar)
self.trading_calendar,
self.restrictions_controller)
_, txn = next(slippage_model.simulate(
bar_data,
self.ASSET133,
Expand Down Expand Up @@ -539,7 +552,8 @@ def test_orders_stop_limit(self):
bar_data = BarData(self.data_portal,
lambda: self.minutes[2],
self.sim_params.data_frequency,
self.trading_calendar)
self.trading_calendar,
self.restrictions_controller)

orders_txns = list(slippage_model.simulate(
bar_data,
Expand All @@ -552,7 +566,8 @@ def test_orders_stop_limit(self):
bar_data = BarData(self.data_portal,
lambda: self.minutes[3],
self.sim_params.data_frequency,
self.trading_calendar)
self.trading_calendar,
self.restrictions_controller)

orders_txns = list(slippage_model.simulate(
bar_data,
Expand All @@ -576,7 +591,8 @@ def test_orders_stop_limit(self):
bar_data = BarData(self.data_portal,
lambda: self.minutes[2],
self.sim_params.data_frequency,
self.trading_calendar)
self.trading_calendar,
self.restrictions_controller)

orders_txns = list(slippage_model.simulate(
bar_data,
Expand All @@ -589,7 +605,8 @@ def test_orders_stop_limit(self):
bar_data = BarData(self.data_portal,
lambda: self.minutes[3],
self.sim_params.data_frequency,
self.trading_calendar)
self.trading_calendar,
self.restrictions_controller)

orders_txns = list(slippage_model.simulate(
bar_data,
Expand All @@ -613,7 +630,8 @@ def test_orders_stop_limit(self):
bar_data = BarData(self.data_portal,
lambda: self.minutes[2],
self.sim_params.data_frequency,
self.trading_calendar)
self.trading_calendar,
self.restrictions_controller)

orders_txns = list(slippage_model.simulate(
bar_data,
Expand All @@ -626,7 +644,8 @@ def test_orders_stop_limit(self):
bar_data = BarData(self.data_portal,
lambda: self.minutes[3],
self.sim_params.data_frequency,
self.trading_calendar)
self.trading_calendar,
self.restrictions_controller)

orders_txns = list(slippage_model.simulate(
bar_data,
Expand Down Expand Up @@ -663,7 +682,8 @@ def test_orders_stop_limit(self):
bar_data = BarData(self.data_portal,
lambda: self.minutes[0],
self.sim_params.data_frequency,
self.trading_calendar)
self.trading_calendar,
self.restrictions_controller)

orders_txns = list(slippage_model.simulate(
bar_data,
Expand All @@ -676,7 +696,8 @@ def test_orders_stop_limit(self):
bar_data = BarData(self.data_portal,
lambda: self.minutes[1],
self.sim_params.data_frequency,
self.trading_calendar)
self.trading_calendar,
self.restrictions_controller)

orders_txns = list(slippage_model.simulate(
bar_data,
Expand All @@ -700,7 +721,8 @@ def test_orders_stop_limit(self):
bar_data = BarData(self.data_portal,
lambda: self.minutes[0],
self.sim_params.data_frequency,
self.trading_calendar)
self.trading_calendar,
self.restrictions_controller)

orders_txns = list(slippage_model.simulate(
bar_data,
Expand All @@ -713,7 +735,8 @@ def test_orders_stop_limit(self):
bar_data = BarData(self.data_portal,
lambda: self.minutes[1],
self.sim_params.data_frequency,
self.trading_calendar)
self.trading_calendar,
self.restrictions_controller)

orders_txns = list(slippage_model.simulate(
bar_data,
Expand All @@ -737,7 +760,8 @@ def test_orders_stop_limit(self):
bar_data = BarData(self.data_portal,
lambda: self.minutes[0],
self.sim_params.data_frequency,
self.trading_calendar)
self.trading_calendar,
self.restrictions_controller)

orders_txns = list(slippage_model.simulate(
bar_data,
Expand All @@ -750,7 +774,8 @@ def test_orders_stop_limit(self):
bar_data = BarData(self.data_portal,
lambda: self.minutes[1],
self.sim_params.data_frequency,
self.trading_calendar)
self.trading_calendar,
self.restrictions_controller)

orders_txns = list(slippage_model.simulate(
bar_data,
Expand Down
67 changes: 55 additions & 12 deletions tests/test_algorithm.py
Expand Up @@ -77,6 +77,7 @@
from zipline.finance.execution import LimitOrder
from zipline.finance.order import ORDER_STATUS
from zipline.finance.trading import SimulationParameters
from zipline.rl_manager import InMemoryRLManager, Restriction
from zipline.testing import (
FakeDataPortal,
create_daily_df_for_asset,
Expand Down Expand Up @@ -2892,33 +2893,75 @@ def handle_data(algo, data):
self.check_algo_fails(algo, handle_data, 0)

def test_set_do_not_order_list(self):
# set the restricted list to be the sid, and fail.
algo = SetDoNotOrderListAlgorithm(
sid=self.sid,
restricted_list=[self.sid],
sim_params=self.sim_params,
env=self.env,
)

def handle_data(algo, data):
algo.could_trade = data.can_trade(algo.sid(self.sid))
algo.order(algo.sid(self.sid), 100)
algo.order_count += 1

# set the restricted list to be one sid for the entire simulation,
# and fail.
rlm = InMemoryRLManager([
Restriction(
self.sid,
self.sim_params.start_session,
self.trading_calendar.next_session_label(
self.sim_params.end_session),
'freeze')
])
algo = SetDoNotOrderListAlgorithm(
sid=self.sid,
restricted_list=rlm,
sim_params=self.sim_params,
env=self.env,
)
self.check_algo_fails(algo, handle_data, 0)
self.assertFalse(algo.could_trade)

# set the restricted list to exclude the sid, and succeed
# if the restricted list is a static list, then use a shim.
rlm = [self.sid]
algo = SetDoNotOrderListAlgorithm(
sid=self.sid,
restricted_list=[134, 135, 136],
restricted_list=rlm,
sim_params=self.sim_params,
env=self.env,
)
self.check_algo_fails(algo, handle_data, 0)
self.assertFalse(algo.could_trade)

def handle_data(algo, data):
algo.order(algo.sid(self.sid), 100)
algo.order_count += 1
# just log an error on the violation if we choose not to fail.
algo = SetDoNotOrderListAlgorithm(
sid=self.sid,
restricted_list=rlm,
sim_params=self.sim_params,
env=self.env,
fail_on_violation=False
)
with make_test_handler(self) as log_catcher:
self.check_algo_succeeds(algo, handle_data)
logs = [r.message for r in log_catcher.records]
self.assertIn("Order for 100 shares of Equity(133 [A]) at "
"2006-01-03 21:00:00+00:00 violates trading constraint "
"RestrictedListOrder({})", logs)
self.assertFalse(algo.could_trade)

# set the restricted list to exclude the sid, and succeed
rlm = InMemoryRLManager([
Restriction(
sid,
self.sim_params.start_session,
self.trading_calendar.next_session_label(
self.sim_params.end_session),
'freeze') for sid in [134, 135, 136]
])
algo = SetDoNotOrderListAlgorithm(
sid=self.sid,
restricted_list=rlm,
sim_params=self.sim_params,
env=self.env,
)
self.check_algo_succeeds(algo, handle_data)
self.assertTrue(algo.could_trade)

def test_set_max_order_size(self):

Expand Down
4 changes: 3 additions & 1 deletion tests/test_api_shim.py
Expand Up @@ -6,6 +6,7 @@
from pandas.io.common import PerformanceWarning

from zipline import TradingAlgorithm
from zipline.rl_manager import RestrictionsController
from zipline.finance.trading import SimulationParameters
from zipline.protocol import BarData
from zipline.testing import (
Expand Down Expand Up @@ -190,7 +191,8 @@ def test_old_new_data_api_paths(self):
self.data_portal,
lambda: test_end_minute,
"minute",
self.trading_calendar
self.trading_calendar,
RestrictionsController()
)
ohlcvp_fields = [
"open",
Expand Down

0 comments on commit bc57ce9

Please sign in to comment.