MAINT: Update tests to conform to new reader/writer structure

This commit is contained in:
Stewart Douglas
2015-09-10 11:53:26 -04:00
committed by jfkirk
parent 8ccdae9870
commit 1ef2274d11
15 changed files with 280 additions and 176 deletions
+22 -12
View File
@@ -39,6 +39,7 @@ from zipline.data.ffc.loaders.us_equity_pricing import (
BcolzDailyBarReader,
USEquityPricingLoader,
)
from zipline.finance import trading
from zipline.finance.trading import TradingEnvironment
from zipline.modelling.engine import SimpleFFCEngine
from zipline.modelling.factor import TestingFactor
@@ -93,7 +94,9 @@ class ConstantInputTestCase(TestCase):
start_date=self.dates[0],
end_date=self.dates[-1],
)
self.asset_finder = AssetFinder(self.asset_info)
trading.environment = trading.TradingEnvironment()
trading.environment.write_data(equities_df=self.asset_info)
self.asset_finder = AssetFinder(trading.environment.engine)
def test_bad_dates(self):
loader = self.loader
@@ -222,12 +225,13 @@ class ConstantInputTestCase(TestCase):
class FrameInputTestCase(TestCase):
def setUp(self):
env = TradingEnvironment.instance()
day = env.trading_day
@classmethod
def setUpClass(cls):
cls.env = trading.TradingEnvironment()
day = cls.env.trading_day
self.assets = Int64Index([1, 2, 3])
self.dates = date_range(
cls.assets = Int64Index([1, 2, 3])
cls.dates = date_range(
'2015-01-01',
'2015-01-31',
freq=day,
@@ -235,11 +239,16 @@ class FrameInputTestCase(TestCase):
)
asset_info = make_simple_asset_info(
self.assets,
start_date=self.dates[0],
end_date=self.dates[-1],
cls.assets,
start_date=cls.dates[0],
end_date=cls.dates[-1],
)
self.asset_finder = AssetFinder(asset_info)
cls.env.write_data(equities_df=asset_info)
def setUp(self):
self.asset_finder = AssetFinder(FrameInputTestCase.env.engine)
self.dates = FrameInputTestCase.dates
self.assets = FrameInputTestCase.assets
@lazyval
def base_mask(self):
@@ -329,7 +338,7 @@ class SyntheticBcolzTestCase(TestCase):
@classmethod
def setUpClass(cls):
cls.first_asset_start = Timestamp('2015-04-01', tz='UTC')
cls.env = TradingEnvironment.instance()
cls.env = trading.TradingEnvironment()
cls.trading_day = cls.env.trading_day
cls.asset_info = make_rotating_asset_info(
num_assets=6,
@@ -345,7 +354,8 @@ class SyntheticBcolzTestCase(TestCase):
freq=cls.trading_day,
)
cls.finder = AssetFinder(cls.asset_info)
cls.env.write_data(equities_df=cls.asset_info)
cls.finder = AssetFinder(cls.env.engine)
cls.temp_dir = TempDirectory()
cls.temp_dir.create()
+9 -1
View File
@@ -42,6 +42,7 @@ from zipline.data.ffc.loaders.us_equity_pricing import (
USEquityPricingLoader,
)
# from zipline.modelling.factor import CustomFactor
from zipline.finance import trading
from zipline.modelling.factor.technical import VWAP
from zipline.utils.test_utils import (
make_simple_asset_info,
@@ -84,7 +85,9 @@ class FFCAlgorithmTestCase(TestCase):
Timestamp('2015'),
['AAPL', 'MSFT', 'BRK_A'],
)
cls.asset_finder = AssetFinder(asset_info)
cls.env = trading.TradingEnvironment()
cls.env.write_data(equities_df=asset_info)
cls.asset_finder = AssetFinder(cls.env.engine)
cls.tempdir = tempdir = TempDirectory()
tempdir.create()
try:
@@ -200,6 +203,11 @@ class FFCAlgorithmTestCase(TestCase):
# Do the same checks in before_trading_start
before_trading_start = handle_data
# Create fresh trading environment as the algo.run()
# method will attempt to write data to disk, and could
# violate SQL constraints.
trading.environment = trading.TradingEnvironment()
algo = TradingAlgorithm(
initialize=initialize,
handle_data=handle_data,
-1
View File
@@ -627,7 +627,6 @@ class TestTransformAlgorithm(TestCase):
def test_order_instant(self):
algo = TestOrderInstantAlgorithm(sim_params=self.sim_params,
instant_fill=True)
algo.run(self.df)
def test_minute_data(self):
+22 -4
View File
@@ -85,6 +85,12 @@ class TestAlgo(TradingAlgorithm):
class AlgorithmGeneratorTestCase(TestCase):
@classmethod
def setUpClass(cls):
cls.env = trading.TradingEnvironment()
cls.env.write_data(equities_identifiers=[8229])
def setUp(self):
setup_logger(self)
@@ -106,6 +112,8 @@ class AlgorithmGeneratorTestCase(TestCase):
end=datetime(2012, 6, 30, tzinfo=pytz.utc)
)
algo = TestAlgo(self, identifiers=[8229], sim_params=sim_params)
# This call appears inconsistent with
# the signature of create_daily_trade_source
trade_source = factory.create_daily_trade_source(
[8229],
200,
@@ -127,11 +135,15 @@ class AlgorithmGeneratorTestCase(TestCase):
Ensure the pipeline of generators are in sync, at least as far as
their current dates.
"""
# Ensure we are pointing to the TradingEnvironment for this class
trading.environment = AlgorithmGeneratorTestCase.env
sim_params = factory.create_simulation_parameters(
start=datetime(2011, 7, 30, tzinfo=pytz.utc),
end=datetime(2012, 7, 30, tzinfo=pytz.utc)
)
algo = TestAlgo(self, identifiers=[8229], sim_params=sim_params)
algo = TestAlgo(self, sim_params=sim_params,
env=AlgorithmGeneratorTestCase.env)
trade_source = factory.create_daily_trade_source(
[8229],
sim_params
@@ -158,7 +170,8 @@ class AlgorithmGeneratorTestCase(TestCase):
period_end=datetime(2012, 7, 30, tzinfo=pytz.utc),
data_frequency='minute'
)
algo = TestAlgo(self, identifiers=[8229], sim_params=sim_params)
algo = TestAlgo(self, sim_params=sim_params,
env=AlgorithmGeneratorTestCase.env)
midnight_custom_source = [Event({
'custom_field': 42.0,
@@ -196,11 +209,15 @@ class AlgorithmGeneratorTestCase(TestCase):
Ensure the pipeline of generators are in sync, at least as far as
their current dates.
"""
# Ensure we are pointing to the TradingEnvironment for this class
trading.environment = AlgorithmGeneratorTestCase.env
sim_params = factory.create_simulation_parameters(
start=datetime(2008, 1, 1, tzinfo=pytz.utc),
end=datetime(2008, 1, 5, tzinfo=pytz.utc)
)
algo = TestAlgo(self, sim_params=sim_params)
algo = TestAlgo(self, sim_params=sim_params,
env=AlgorithmGeneratorTestCase.env)
trade_source = factory.create_daily_trade_source(
[8229],
sim_params
@@ -222,6 +239,7 @@ class AlgorithmGeneratorTestCase(TestCase):
"""
sim_params = create_simulation_parameters(num_days=1,
data_frequency='minute')
algo = TestAlgo(self, sim_params=sim_params, identifiers=[8229])
algo = TestAlgo(self, sim_params=sim_params,
env=AlgorithmGeneratorTestCase.env)
algo.run(source=[], overwrite_sim_params=False)
self.assertEqual(algo.datetime, sim_params.last_close)
+107 -102
View File
@@ -24,7 +24,6 @@ from datetime import datetime, timedelta
import pickle
import uuid
import warnings
import sqlite3
import pandas as pd
from pandas.tseries.tools import normalize_date
@@ -35,13 +34,13 @@ from numpy import full
from zipline.assets import Asset, Equity, Future, AssetFinder
from zipline.assets.futures import FutureChain
from zipline.assets.asset_writer import AssetDBWriterFromDataFrame
from zipline.errors import (
SymbolNotFound,
MultipleSymbolsFound,
SidAssignmentError,
RootSymbolNotFound,
)
from zipline.finance import trading
from zipline.finance.trading import with_environment
from zipline.utils.test_utils import (
all_subindices,
@@ -67,32 +66,30 @@ def build_lookup_generic_cases():
[
{
'sid': 0,
'asset_name': 'duplicated_0',
'symbol': 'duplicated_0',
'start_date': dupe_0_start.value,
'end_date': dupe_0_end.value,
'exchange': '',
},
{
'sid': 1,
'asset_name': 'duplicated_1',
'symbol': 'duplicated_1',
'start_date': dupe_1_start.value,
'end_date': dupe_1_end.value,
'exchange': '',
},
{
'sid': 2,
'asset_name': 'unique',
'symbol': 'unique',
'start_date': unique_start.value,
'end_date': unique_end.value,
'exchange': '',
},
],
index='sid')
db_path = '~/temp.db'
conn = sqlite3.connect(db_path)
asset_writer = AssetDBWriterFromDataFrame(equities=frame)
asset_writer.write_all(conn)
finder = AssetFinder(conn)
trading.environment = trading.TradingEnvironment()
trading.environment.write_data(equities_df=frame)
finder = AssetFinder(trading.environment.engine)
dupe_0, dupe_1, unique = assets = [
finder.retrieve_asset(i)
for i in range(3)
@@ -113,8 +110,8 @@ def build_lookup_generic_cases():
(finder, 1, None, assets[1]),
(finder, 2, None, assets[2]),
# Duplicated symbol with resolution date
(finder, 'duplicated', dupe_0_start, dupe_0),
(finder, 'duplicated', dupe_1_start, dupe_1),
(finder, 'duplicated_0', dupe_0_start, dupe_0),
(finder, 'duplicated_1', dupe_1_start, dupe_1),
# Unique symbol, with or without resolution date.
(finder, 'unique', unique_start, unique),
(finder, 'unique', None, unique),
@@ -129,11 +126,11 @@ def build_lookup_generic_cases():
(finder, (0, 1), None, assets[:-1]),
(finder, iter((0, 1)), None, assets[:-1]),
# Iterables of symbols.
(finder, ('duplicated', 'unique'), dupe_0_start, [dupe_0, unique]),
(finder, ('duplicated', 'unique'), dupe_1_start, [dupe_1, unique]),
(finder, ('duplicated_0', 'unique'), dupe_0_start, [dupe_0, unique]),
(finder, ('duplicated_1', 'unique'), dupe_1_start, [dupe_1, unique]),
# Mixed types
(finder,
('duplicated', 2, 'unique', 1, dupe_1),
('duplicated_0', 2, 'unique', 1, dupe_1),
dupe_0_start,
[dupe_0, assets[2], unique, assets[1], dupe_1]),
]
@@ -283,22 +280,27 @@ class TestFuture(TestCase):
class AssetFinderTestCase(TestCase):
def setUp(self):
trading.environment = trading.TradingEnvironment()
def test_lookup_symbol_fuzzy(self):
as_of = pd.Timestamp('2013-01-01', tz='UTC')
frame = pd.DataFrame.from_records(
[
{
'sid': i,
'file_name': 'TEST@%d' % i,
'symbol': 'TEST@%d' % i,
'company_name': "company%d" % i,
'start_date_nano': as_of.value,
'end_date_nano': as_of.value,
'start_date_': as_of.value,
'end_date': as_of.value,
'exchange': uuid.uuid4().hex,
'fuzzy': 'TEST%d' % i
}
for i in range(3)
]
)
finder = AssetFinder(frame, fuzzy_char='@')
trading.environment.write_data(equities_df=frame)
finder = AssetFinder(trading.environment.engine, fuzzy_char='@')
asset_0, asset_1, asset_2 = (
finder.retrieve_asset(i) for i in range(3)
)
@@ -334,17 +336,16 @@ class AssetFinderTestCase(TestCase):
[
{
'sid': i,
'file_name': 'existing',
'company_name': 'existing',
'start_date_nano': date.value,
'end_date_nano': (date + timedelta(days=1)).value,
'symbol': 'existing',
'start_date': date.value,
'end_date': (date + timedelta(days=1)).value,
'exchange': 'NYSE',
}
for i, date in enumerate(dates)
]
)
finder = AssetFinder(df)
trading.environment.write_data(equities_df=df)
finder = AssetFinder(trading.environment.engine)
for _ in range(2): # Run checks twice to test for caching bugs.
with self.assertRaises(SymbolNotFound):
finder.lookup_symbol_resolve_multiple('non_existing', dates[0])
@@ -378,43 +379,40 @@ class AssetFinderTestCase(TestCase):
[
{
'sid': 0,
'file_name': 'real',
'company_name': 'real',
'start_date_nano': pd.Timestamp('2013-1-1', tz='UTC'),
'end_date_nano': pd.Timestamp('2014-1-1', tz='UTC'),
'symbol': 'real',
'start_date': pd.Timestamp('2013-1-1', tz='UTC'),
'end_date': pd.Timestamp('2014-1-1', tz='UTC'),
'exchange': '',
},
{
'sid': 1,
'file_name': 'also_real',
'company_name': 'also_real',
'start_date_nano': pd.Timestamp('2013-1-1', tz='UTC'),
'end_date_nano': pd.Timestamp('2014-1-1', tz='UTC'),
'symbol': 'also_real',
'start_date': pd.Timestamp('2013-1-1', tz='UTC'),
'end_date': pd.Timestamp('2014-1-1', tz='UTC'),
'exchange': '',
},
# Sid whose end date is before our query date. We should
# still correctly find it.
{
'sid': 2,
'file_name': 'real_but_old',
'company_name': 'real_but_old',
'start_date_nano': pd.Timestamp('2002-1-1', tz='UTC'),
'end_date_nano': pd.Timestamp('2003-1-1', tz='UTC'),
'symbol': 'real_but_old',
'start_date': pd.Timestamp('2002-1-1', tz='UTC'),
'end_date': pd.Timestamp('2003-1-1', tz='UTC'),
'exchange': '',
},
# Sid whose start_date is **after** our query date. We should
# **not** find it.
{
'sid': 3,
'file_name': 'real_but_in_the_future',
'company_name': 'real_but_in_the_future',
'start_date_nano': pd.Timestamp('2014-1-1', tz='UTC'),
'end_date_nano': pd.Timestamp('2020-1-1', tz='UTC'),
'symbol': 'real_but_in_the_future',
'start_date': pd.Timestamp('2014-1-1', tz='UTC'),
'end_date': pd.Timestamp('2020-1-1', tz='UTC'),
'exchange': 'THE FUTURE',
},
]
)
finder = AssetFinder(data)
trading.environment.write_data(equities_df=data)
finder = AssetFinder(trading.environment.engine)
results, missing = finder.lookup_generic(
['real', 1, 'fake', 'real_but_old', 'real_but_in_the_future'],
pd.Timestamp('2013-02-01', tz='UTC'),
@@ -433,14 +431,13 @@ class AssetFinderTestCase(TestCase):
self.assertEqual(missing[1], 'real_but_in_the_future')
def test_insert_metadata(self):
finder = AssetFinder()
finder.insert_metadata(0,
asset_type='equity',
start_date='2014-01-01',
end_date='2015-01-01',
symbol="PLAY",
foo_data="FOO",)
data = {0: {'asset_type': 'equity',
'start_date': '2014-01-01',
'end_date': '2015-01-01',
'symbol': "PLAY",
'foo_data': "FOO"}}
trading.environment.write_data(equities_data=data)
finder = AssetFinder(trading.environment.engine)
# Test proper insertion
equity = finder.retrieve_asset(0)
self.assertIsInstance(equity, Equity)
@@ -455,24 +452,24 @@ class AssetFinderTestCase(TestCase):
def test_consume_metadata(self):
# Test dict consumption
finder = AssetFinder()
dict_to_consume = {0: {'symbol': 'PLAY'},
1: {'symbol': 'MSFT'}}
finder.consume_metadata(dict_to_consume)
trading.environment.write_data(equities_data=dict_to_consume)
finder = AssetFinder(trading.environment.engine)
equity = finder.retrieve_asset(0)
self.assertIsInstance(equity, Equity)
self.assertEqual('PLAY', equity.symbol)
finder = AssetFinder()
# Test dataframe consumption
df = pd.DataFrame(columns=['asset_name', 'exchange'], index=[0, 1])
df['asset_name'][0] = "Dave'N'Busters"
df['exchange'][0] = "NASDAQ"
df['asset_name'][1] = "Microsoft"
df['exchange'][1] = "NYSE"
finder.consume_metadata(df)
trading.environment = trading.TradingEnvironment()
trading.environment.write_data(equities_df=df)
finder = AssetFinder(trading.environment.engine)
self.assertEqual('NASDAQ', finder.retrieve_asset(0).exchange)
self.assertEqual('Microsoft', finder.retrieve_asset(1).asset_name)
@@ -486,8 +483,9 @@ class AssetFinderTestCase(TestCase):
future_asset = Future(200, symbol="TESTFUT", end_date=fut_end)
# Consume the Assets
finder = AssetFinder()
finder.consume_identifiers([equity_asset, future_asset])
trading.environment.write_data(equities_identifiers=[equity_asset],
futures_identifiers=[future_asset])
finder = AssetFinder(trading.environment.engine)
# Test equality with newly built Assets
self.assertEqual(equity_asset, finder.retrieve_asset(1))
@@ -498,16 +496,16 @@ class AssetFinderTestCase(TestCase):
def test_sid_assignment(self):
# This metadata does not contain SIDs
metadata = {'PLAY': {'symbol': 'PLAY'},
'MSFT': {'symbol': 'MSFT'}}
metadata = ['PLAY', 'MSFT']
today = normalize_date(pd.Timestamp('2015-07-09', tz='UTC'))
# Build a finder that is allowed to assign sids
finder = AssetFinder(metadata=metadata,
allow_sid_assignment=True)
# Write data with sid assignment
trading.environment.write_data(equities_identifiers=metadata,
allow_sid_assignment=True)
# Verify that Assets were built and different sids were assigned
finder = AssetFinder(trading.environment.engine)
play = finder.lookup_symbol('PLAY', today)
msft = finder.lookup_symbol('MSFT', today)
self.assertEqual('PLAY', play.symbol)
@@ -517,12 +515,12 @@ class AssetFinderTestCase(TestCase):
def test_sid_assignment_failure(self):
# This metadata does not contain SIDs
metadata = {'PLAY': {'symbol': 'PLAY'},
'MSFT': {'symbol': 'MSFT'}}
metadata = ['PLAY', 'MSFT']
# Build a finder that is not allowed to assign sids, asserting failure
# Write data without sid assignment, asserting failure
with self.assertRaises(SidAssignmentError):
AssetFinder(metadata=metadata, allow_sid_assignment=False)
trading.environment.write_data(equities_identifiers=metadata,
allow_sid_assignment=False)
def test_security_dates_warning(self):
@@ -579,8 +577,8 @@ class AssetFinderTestCase(TestCase):
},
}
finder = AssetFinder(metadata=metadata)
trading.environment.write_data(futures_data=metadata)
finder = AssetFinder(trading.environment.engine)
dt = pd.Timestamp('2015-05-14', tz='UTC')
last_year = pd.Timestamp('2014-01-01', tz='UTC')
first_day = pd.Timestamp('2015-01-01', tz='UTC')
@@ -611,7 +609,7 @@ class AssetFinderTestCase(TestCase):
def test_map_identifier_index_to_sids(self):
# Build an empty finder and some Assets
dt = pd.Timestamp('2014-01-01', tz='UTC')
finder = AssetFinder()
finder = AssetFinder(trading.environment.engine)
asset1 = Equity(1, symbol="AAPL")
asset2 = Equity(2, symbol="GOOG")
asset200 = Future(200, symbol="CLK15")
@@ -642,7 +640,9 @@ class AssetFinderTestCase(TestCase):
periods_between_starts=3,
asset_lifetime=5
)
finder = AssetFinder(frame)
trading.environment.write_data(equities_df=frame)
finder = AssetFinder(trading.environment.engine)
all_dates = pd.date_range(
start=first_start,
@@ -667,45 +667,50 @@ class AssetFinderTestCase(TestCase):
expected_result = pd.DataFrame(
data=expected_mask,
index=dates,
columns=frame.sid.values,
columns=frame.index.values,
)
actual_result = finder.lifetimes(dates)
assert_frame_equal(actual_result, expected_result)
class TestFutureChain(TestCase):
metadata = {
0: {
'symbol': 'CLG06',
'root_symbol': 'CL',
'asset_type': 'future',
'start_date': pd.Timestamp('2005-12-01', tz='UTC'),
'notice_date': pd.Timestamp('2005-12-20', tz='UTC'),
'expiration_date': pd.Timestamp('2006-01-20', tz='UTC')},
1: {
'root_symbol': 'CL',
'symbol': 'CLK06',
'asset_type': 'future',
'start_date': pd.Timestamp('2005-12-01', tz='UTC'),
'notice_date': pd.Timestamp('2006-03-20', tz='UTC'),
'expiration_date': pd.Timestamp('2006-04-20', tz='UTC')},
2: {
'symbol': 'CLQ06',
'root_symbol': 'CL',
'asset_type': 'future',
'start_date': pd.Timestamp('2005-12-01', tz='UTC'),
'notice_date': pd.Timestamp('2006-06-20', tz='UTC'),
'expiration_date': pd.Timestamp('2006-07-20', tz='UTC')},
3: {
'symbol': 'CLX06',
'root_symbol': 'CL',
'asset_type': 'future',
'start_date': pd.Timestamp('2006-02-01', tz='UTC'),
'notice_date': pd.Timestamp('2006-09-20', tz='UTC'),
'expiration_date': pd.Timestamp('2006-10-20', tz='UTC')}
}
asset_finder = AssetFinder(metadata=metadata)
def setUp(self):
metadata = {
0: {
'symbol': 'CLG06',
'root_symbol': 'CL',
'asset_type': 'future',
'start_date': pd.Timestamp('2005-12-01', tz='UTC'),
'notice_date': pd.Timestamp('2005-12-20', tz='UTC'),
'expiration_date': pd.Timestamp('2006-01-20', tz='UTC')},
1: {
'root_symbol': 'CL',
'symbol': 'CLK06',
'asset_type': 'future',
'start_date': pd.Timestamp('2005-12-01', tz='UTC'),
'notice_date': pd.Timestamp('2006-03-20', tz='UTC'),
'expiration_date': pd.Timestamp('2006-04-20', tz='UTC')},
2: {
'symbol': 'CLQ06',
'root_symbol': 'CL',
'asset_type': 'future',
'start_date': pd.Timestamp('2005-12-01', tz='UTC'),
'notice_date': pd.Timestamp('2006-06-20', tz='UTC'),
'expiration_date': pd.Timestamp('2006-07-20', tz='UTC')},
3: {
'symbol': 'CLX06',
'root_symbol': 'CL',
'asset_type': 'future',
'start_date': pd.Timestamp('2006-02-01', tz='UTC'),
'notice_date': pd.Timestamp('2006-09-20', tz='UTC'),
'expiration_date': pd.Timestamp('2006-10-20', tz='UTC')}
}
trading.environment = trading.TradingEnvironment()
trading.environment.write_data(futures_data=metadata)
self.asset_finder = AssetFinder(trading.environment.engine)
def test_len(self):
""" Test the __len__ method of FutureChain.
+12 -1
View File
@@ -33,6 +33,7 @@ from zipline.test_algorithms import (BatchTransformAlgorithm,
BatchTransformAlgorithmMinute,
ReturnPriceBatchTransform)
from zipline.finance import trading
from zipline.algorithm import TradingAlgorithm
from zipline.utils.tradingcalendar import trading_days
from copy import deepcopy
@@ -106,6 +107,8 @@ class DifferentSidSource(DataSource):
class TestChangeOfSids(TestCase):
def setUp(self):
self.sids = range(90)
trading.environment = trading.TradingEnvironment()
trading.environment.write_data(equities_identifiers=self.sids)
self.sim_params = factory.create_simulation_parameters(
start=datetime(1990, 1, 1, tzinfo=pytz.utc),
end=datetime(1990, 1, 8, tzinfo=pytz.utc)
@@ -114,7 +117,6 @@ class TestChangeOfSids(TestCase):
def test_all_sids_passed(self):
algo = BatchTransformAlgorithmSetSid(
sim_params=self.sim_params,
identifiers=[i for i in range(0, 90)]
)
source = DifferentSidSource()
algo.run(source)
@@ -137,6 +139,8 @@ class TestBatchTransformMinutely(TestCase):
start=start,
end=end,
)
trading.environment = trading.TradingEnvironment()
trading.environment.write_data(equities_identifiers=[0])
self.sim_params.emission_rate = 'daily'
self.sim_params.data_frequency = 'minute'
self.source, self.df = \
@@ -164,12 +168,19 @@ class TestBatchTransformMinutely(TestCase):
class TestBatchTransform(TestCase):
@classmethod
def setUpClass(cls):
cls.env = trading.TradingEnvironment()
cls.env.write_data(equities_identifiers=[0])
def setUp(self):
setup_logger(self)
self.sim_params = factory.create_simulation_parameters(
start=datetime(1990, 1, 1, tzinfo=pytz.utc),
end=datetime(1990, 1, 8, tzinfo=pytz.utc)
)
trading.environment = TestBatchTransform.env
self.source, self.df = \
factory.create_test_df_source(self.sim_params)
+6 -2
View File
@@ -17,6 +17,7 @@ import datetime
from nose_parameterized import parameterized
from unittest import TestCase
from zipline.finance import trading
from zipline.finance.blotter import Blotter, ORDER_STATUS
from zipline.finance.trading import with_environment
from zipline.finance.execution import (
@@ -35,10 +36,13 @@ from zipline.utils.test_utils import(
class BlotterTestCase(TestCase):
@with_environment()
@classmethod
def setUpClass(cls):
cls.env = trading.TradingEnvironment()
cls.env.write_data(equities_identifiers=[24])
def setUp(self, env=None):
setup_logger(self)
env.write_data(equities_identifiers=[24])
def tearDown(self):
teardown_logger(self)
+3 -1
View File
@@ -45,6 +45,9 @@ class TestEventsThroughRisk(unittest.TestCase):
def test_daily_buy_and_hold(self):
trading.environment = trading.TradingEnvironment()
trading.environment.write_data(equities_identifiers=[1])
start_date = datetime.datetime(
year=2006,
month=1,
@@ -68,7 +71,6 @@ class TestEventsThroughRisk(unittest.TestCase):
)
algo = BuyAndHoldAlgorithm(
identifiers=[1],
sim_params=sim_params)
first_date = datetime.datetime(2006, 1, 3, tzinfo=pytz.utc)
+4
View File
@@ -31,6 +31,8 @@ from zipline.utils import parse_args, run_pipeline
# Otherwise the next line sometimes complains about being run too late.
_multiprocess_can_split_ = False
from zipline.finance import trading
matplotlib.use('Agg')
@@ -45,6 +47,8 @@ class ExamplesTests(TestCase):
@parameterized.expand(((os.path.basename(f).replace('.', '_'), f) for f in
glob.glob(os.path.join(example_dir(), '*.py'))))
def test_example(self, name, example):
# Create a new trading environment for each test.
trading.environment = trading.TradingEnvironment()
imp.load_source('__main__', os.path.basename(example), open(example))
# Test algorithm as if scripts/run_algo.py is being used.
+3
View File
@@ -60,6 +60,8 @@ _multiprocess_can_split_ = False
class FinanceTestCase(TestCase):
def setUp(self):
trading.environment = trading.TradingEnvironment()
trading.environment.write_data(equities_identifiers=[1, 133])
self.zipline_test_config = {
'sid': 133,
}
@@ -92,6 +94,7 @@ class FinanceTestCase(TestCase):
# No transactions can be filled on the first trade, so
# we have one extra trade to ensure all orders are filled.
self.zipline_test_config['trade_count'] = 101
trading.environment = trading.TradingEnvironment()
full_zipline = simfactory.create_test_zipline(
**self.zipline_test_config)
assert_single_position(self, full_zipline)
+34 -14
View File
@@ -28,6 +28,7 @@ from zipline.history.history_container import HistoryContainer
from zipline.protocol import BarData
import zipline.utils.factory as factory
from zipline import TradingAlgorithm
from zipline.finance import trading
from zipline.finance.trading import (
SimulationParameters,
TradingEnvironment,
@@ -404,6 +405,12 @@ class TestHistoryContainer(TestCase):
class TestHistoryAlgo(TestCase):
@classmethod
def setUpClass(cls):
cls.env = trading.TradingEnvironment()
cls.env.write_data(equities_identifiers=[0, 1])
def setUp(self):
np.random.seed(123)
@@ -442,7 +449,8 @@ def handle_data(context, data):
test_algo = TradingAlgorithm(
script=algo_text,
data_frequency='daily',
sim_params=sim_params
sim_params=sim_params,
env=TestHistoryAlgo.env,
)
output = test_algo.run(source)
@@ -475,7 +483,8 @@ def handle_data(context, data):
algo = TradingAlgorithm(
script=algo_text,
data_frequency='daily',
sim_params=sim_params
sim_params=sim_params,
env=TestHistoryAlgo.env,
)
source = RandomWalkSource(start=start, end=end)
algo.run(source)
@@ -510,7 +519,7 @@ def handle_data(context, data):
script=algo_text,
data_frequency='minute',
sim_params=sim_params,
identifiers=[0]
env=TestHistoryAlgo.env,
)
source = RandomWalkSource(start=start,
@@ -560,7 +569,8 @@ def handle_data(context, data):
test_algo = TradingAlgorithm(
script=algo_text,
data_frequency='minute',
sim_params=sim_params
sim_params=sim_params,
env=TestHistoryAlgo.env,
)
source = RandomWalkSource(start=start,
@@ -616,7 +626,8 @@ def handle_data(context, data):
test_algo = TradingAlgorithm(
script=algo_text,
data_frequency='minute',
sim_params=sim_params
sim_params=sim_params,
env=TestHistoryAlgo.env,
)
source = RandomWalkSource(start=start,
@@ -671,7 +682,8 @@ def handle_data(context, data):
test_algo = TradingAlgorithm(
script=algo_text,
data_frequency='minute',
sim_params=sim_params
sim_params=sim_params,
env=TestHistoryAlgo.env,
)
source = RandomWalkSource(start=start,
@@ -716,7 +728,8 @@ def handle_data(context, data):
test_algo = TradingAlgorithm(
script=algo_text,
data_frequency='minute',
sim_params=sim_params
sim_params=sim_params,
env=TestHistoryAlgo.env,
)
source = RandomWalkSource(start=start,
@@ -761,7 +774,8 @@ def handle_data(context, data):
test_algo = TradingAlgorithm(
script=algo_text,
data_frequency='minute',
sim_params=sim_params
sim_params=sim_params,
env=TestHistoryAlgo.env,
)
source = RandomWalkSource(start=start,
@@ -806,7 +820,8 @@ def handle_data(context, data):
test_algo = TradingAlgorithm(
script=algo_text,
data_frequency='minute',
sim_params=sim_params
sim_params=sim_params,
env=TestHistoryAlgo.env,
)
source = RandomWalkSource(start=start,
@@ -856,7 +871,8 @@ def handle_data(context, data):
test_algo = TradingAlgorithm(
script=algo_text,
data_frequency='minute',
sim_params=sim_params
sim_params=sim_params,
env=TestHistoryAlgo.env,
)
source = RandomWalkSource(start=start,
@@ -915,7 +931,8 @@ def handle_data(context, data):
test_algo = TradingAlgorithm(
script=algo_text,
data_frequency='minute',
sim_params=sim_params
sim_params=sim_params,
env=TestHistoryAlgo.env,
)
source = RandomWalkSource(start=start,
@@ -957,7 +974,8 @@ def handle_data(context, data):
test_algo = TradingAlgorithm(
script=algo_text,
data_frequency=data_freq,
sim_params=sim_params
sim_params=sim_params,
env=TestHistoryAlgo.env,
)
source = RandomWalkSource(start=start, end=end, freq=data_freq)
@@ -1027,7 +1045,8 @@ def handle_data(context, data):
test_algo = TradingAlgorithm(
script=algo_text,
data_frequency='minute',
sim_params=sim_params
sim_params=sim_params,
env=TestHistoryAlgo.env,
)
test_algo.test_case = self
@@ -1076,7 +1095,8 @@ def handle_data(context, data):
test_algo = TradingAlgorithm(
script=algo_text,
data_frequency='minute',
sim_params=sim_params
sim_params=sim_params,
env=TestHistoryAlgo.env,
)
test_algo.test_case = self
+28 -19
View File
@@ -41,6 +41,7 @@ from zipline.finance.slippage import Transaction, create_transaction
import zipline.utils.math_utils as zp_math
from zipline.gens.composites import date_sorted_sources
from zipline.finance import trading
from zipline.finance.trading import SimulationParameters
from zipline.finance.blotter import Order
from zipline.finance.commission import PerShare, PerTrade, PerDollar
@@ -261,7 +262,7 @@ class TestSplitPerformance(unittest.TestCase):
def setUp(self):
self.sim_params, self.dt, self.end_dt = \
create_random_simulation_parameters()
trading.environment.write_data(equities_identifiers=[1])
# start with $10,000
self.sim_params.capital_base = 10e3
@@ -362,6 +363,8 @@ class TestCommissionEvents(unittest.TestCase):
self.sim_params, self.dt, self.end_dt = \
create_random_simulation_parameters()
trading.environment.write_data(equities_identifiers=[0, 1, 133])
logger.info("sim_params: %s, dt: %s, end_dt: %s" %
(self.sim_params, self.dt, self.end_dt))
@@ -502,7 +505,7 @@ class TestDividendPerformance(unittest.TestCase):
self.sim_params, self.dt, self.end_dt = \
create_random_simulation_parameters()
trading.environment.write_data(equities_identifiers=[1, 2])
self.sim_params.capital_base = 10e3
self.benchmark_events = benchmark_events_in_range(self.sim_params)
@@ -937,6 +940,7 @@ class TestPositionPerformance(unittest.TestCase):
self.sim_params, self.dt, self.end_dt = \
create_random_simulation_parameters()
trading.environment.write_data(equities_identifiers=[1, 2])
self.benchmark_events = benchmark_events_in_range(self.sim_params)
def test_long_short_positions(self):
@@ -1689,6 +1693,10 @@ shares in position"
class TestPerformanceTracker(unittest.TestCase):
def setUp(self):
trading.environment = trading.TradingEnvironment()
trading.environment.write_data(equities_identifiers=[133, 134])
NumDaysToDelete = collections.namedtuple(
'NumDaysToDelete', ('start', 'middle', 'end'))
@@ -1726,6 +1734,8 @@ class TestPerformanceTracker(unittest.TestCase):
# 12 13 14 15 16 17 18
# 19 20 21 22 23 24 25
# 26 27 28 29 30 31
trading.environment = trading.TradingEnvironment()
trading.environment.write_data(equities_identifiers=[133, 134])
start_dt = datetime(year=2008,
month=10,
day=9,
@@ -2097,8 +2107,9 @@ class TestPosition(unittest.TestCase):
class TestPositionTracker(unittest.TestCase):
def setUp(self):
pass
trading.environment = trading.TradingEnvironment()
def test_empty_positions(self):
"""
@@ -2127,13 +2138,12 @@ class TestPositionTracker(unittest.TestCase):
self.assertEquals(val, 0)
self.assertNotIsInstance(val, (bool, np.bool_))
@with_environment()
def test_update_last_sale(self, env=None):
metadata = {1: {'asset_type': 'equity'},
2: {'asset_type': 'future',
'contract_multiplier': 1000}}
asset_finder = AssetFinder()
env.write_data(equities_data=metadata)
equities_metadata = {1: {'asset_type': 'equity'}}
futures_metadata = {2: {'asset_type': 'future',
'contract_multiplier': 1000}}
trading.environment.write_data(equities_data=equities_metadata,
futures_data=futures_metadata)
pt = perf.PositionTracker()
dt = pd.Timestamp("1984/03/06 3:00PM")
pos1 = perf.Position(1, amount=np.float64(100.0),
@@ -2153,15 +2163,15 @@ class TestPositionTracker(unittest.TestCase):
self.assertEqual(0, pt.update_last_sale(event1))
self.assertEqual(100000, pt.update_last_sale(event2))
@with_environment()
def test_position_values_and_exposures(self, env=None):
metadata = {1: {'asset_type': 'equity'},
2: {'asset_type': 'equity'},
3: {'asset_type': 'future',
'contract_multiplier': 1000},
4: {'asset_type': 'future',
'contract_multiplier': 1000}}
env.write_data(equities_data=metadata)
equities_metadata = {1: {'asset_type': 'equity'},
2: {'asset_type': 'equity'}}
futures_metadata = {3: {'asset_type': 'future',
'contract_multiplier': 1000},
4: {'asset_type': 'future',
'contract_multiplier': 1000}}
trading.environment.write_data(equities_data=equities_metadata,
futures_data=futures_metadata)
pt = perf.PositionTracker()
dt = pd.Timestamp("1984/03/06 3:00PM")
pos1 = perf.Position(1, amount=np.float64(10.0),
@@ -2190,12 +2200,11 @@ class TestPositionTracker(unittest.TestCase):
self.assertEqual(100 + 200 + 300000 + 400000, pt._gross_exposure())
self.assertEqual(100 - 200 + 300000 - 400000, pt._net_exposure())
@with_environment()
def test_serialization(self, env=None):
metadata = {1: {'asset_type': 'equity'},
2: {'asset_type': 'future',
'contract_multiplier': 1000}}
env.write_data(equities_data=metadata)
trading.environment.write_data(equities_data=metadata)
pt = perf.PositionTracker()
dt = pd.Timestamp("1984/03/06 3:00PM")
pos1 = perf.Position(1, amount=np.float64(120.0),
+21 -14
View File
@@ -6,9 +6,10 @@ from unittest import TestCase
from zipline.algorithm import TradingAlgorithm
from zipline.errors import TradingControlViolation
from zipline.sources import SpecificEquityTrades
from zipline.finance import trading
from zipline.finance.trading import with_environment
from zipline.utils.test_utils import (
setup_logger, teardown_logger, security_list_copy, add_security_data)
setup_logger, teardown_logger, security_list_copy, add_security_data,)
from zipline.utils import factory
from zipline.utils.security_list import (
SecurityListSet, load_from_directory)
@@ -59,26 +60,24 @@ class IterateRLAlgo(TradingAlgorithm):
class SecurityListTestCase(TestCase):
@with_environment()
def setUp(self, env=None):
self.extra_knowledge_date = \
datetime(2015, 1, 27, 0, 0, tzinfo=pytz.utc)
self.trading_day_before_first_kd = datetime(
2015, 1, 23, 0, 0, tzinfo=pytz.utc)
env.write_data(
equities_identifiers=["BZQ", "URTY", "JFT", "AAPL", "GOOG"]
)
setup_logger(self)
trading.environment = trading.TradingEnvironment()
def tearDown(self):
teardown_logger(self)
def test_iterate_over_rl(self):
sim_params = factory.create_simulation_parameters(
start=list(LEVERAGED_ETFS.keys())[0], num_days=4)
trading.environment.write_data(equities_identifiers=['BZQ'])
trade_history = factory.create_trade_history(
'BZQ',
[10.0, 10.0, 11.0, 11.0],
@@ -99,6 +98,9 @@ class SecurityListTestCase(TestCase):
def get_datetime():
return list(LEVERAGED_ETFS.keys())[0]
env.write_data(equities_identifiers=['AAPL', 'GOOG', 'BZQ',
'URTY', 'JFT'])
rl = SecurityListSet(get_datetime)
# assert that a sample from the leveraged list are in restricted
should_exist = [
@@ -128,6 +130,8 @@ class SecurityListTestCase(TestCase):
return datetime(2015, 1, 27, tzinfo=pytz.utc)
with security_list_copy():
add_security_data(['AAPL', 'GOOG'], [])
env.write_data(equities_identifiers=['AAPL', 'GOOG',
'BZQ', 'URTY'])
rl = SecurityListSet(get_datetime)
should_exist = [
asset.sid for asset in
@@ -143,7 +147,8 @@ class SecurityListTestCase(TestCase):
with security_list_copy():
def get_datetime():
return datetime(2015, 1, 27, tzinfo=pytz.utc)
add_security_data([], ['BZQ', 'URTY'])
trading.environment.write_data(equities_identifiers=['BZQ',
'URTY'])
rl = SecurityListSet(get_datetime)
self.assertNotIn("BZQ", rl.leveraged_etf_list)
self.assertNotIn("URTY", rl.leveraged_etf_list)
@@ -151,7 +156,7 @@ class SecurityListTestCase(TestCase):
def test_algo_without_rl_violation_via_check(self):
sim_params = factory.create_simulation_parameters(
start=list(LEVERAGED_ETFS.keys())[0], num_days=4)
trading.environment.write_data(equities_identifiers=['BZQ'])
trade_history = factory.create_trade_history(
'BZQ',
[10.0, 10.0, 11.0, 11.0],
@@ -167,7 +172,7 @@ class SecurityListTestCase(TestCase):
def test_algo_without_rl_violation(self):
sim_params = factory.create_simulation_parameters(
start=list(LEVERAGED_ETFS.keys())[0], num_days=4)
trading.environment.write_data(equities_identifiers=['AAPL'])
trade_history = factory.create_trade_history(
'AAPL',
[10.0, 10.0, 11.0, 11.0],
@@ -182,7 +187,7 @@ class SecurityListTestCase(TestCase):
def test_algo_with_rl_violation(self):
sim_params = factory.create_simulation_parameters(
start=list(LEVERAGED_ETFS.keys())[0], num_days=4)
trading.environment.write_data(equities_identifiers=['BZQ', 'JFT'])
trade_history = factory.create_trade_history(
'BZQ',
[10.0, 10.0, 11.0, 11.0],
@@ -199,7 +204,6 @@ class SecurityListTestCase(TestCase):
self.check_algo_exception(algo, ctx, 0)
# repeat with a symbol from a different lookup date
trade_history = factory.create_trade_history(
'JFT',
[10.0, 10.0, 11.0, 11.0],
@@ -219,7 +223,7 @@ class SecurityListTestCase(TestCase):
sim_params = factory.create_simulation_parameters(
start=list(
LEVERAGED_ETFS.keys())[0] + timedelta(days=7), num_days=5)
trading.environment.write_data(equities_identifiers=['BZQ'])
trade_history = factory.create_trade_history(
'BZQ',
[10.0, 10.0, 11.0, 11.0],
@@ -253,6 +257,7 @@ class SecurityListTestCase(TestCase):
timedelta(days=1),
sim_params
)
trading.environment.write_data(equities_identifiers=['BZQ'])
self.source = SpecificEquityTrades(event_list=trade_history)
algo = RestrictedAlgoWithoutCheck(
symbol='BZQ', sim_params=sim_params)
@@ -266,9 +271,10 @@ class SecurityListTestCase(TestCase):
# add a delete statement removing bzq
# write a new delete statement file to disk
add_security_data([], ['BZQ'])
sim_params = factory.create_simulation_parameters(
start=self.extra_knowledge_date, num_days=3)
trading.environment.write_data(equities_identifiers=['BZQ'])
trade_history = factory.create_trade_history(
'BZQ',
[10.0, 10.0, 11.0, 11.0],
@@ -287,6 +293,7 @@ class SecurityListTestCase(TestCase):
add_security_data(['AAPL'], [])
sim_params = factory.create_simulation_parameters(
start=self.trading_day_before_first_kd, num_days=4)
trading.environment.write_data(equities_identifiers=['AAPL'])
trade_history = factory.create_trade_history(
'AAPL',
[10.0, 10.0, 11.0, 11.0],
+6 -3
View File
@@ -12,9 +12,10 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import numpy as np
import pandas as pd
import pytz
import numpy as np
from six import integer_types
@@ -26,6 +27,7 @@ from zipline.sources import (DataFrameSource,
RandomWalkSource)
from zipline.utils import tradingcalendar as calendar_nyse
from zipline.assets import AssetFinder
from zipline.finance import trading
class TestDataFrameSource(TestCase):
@@ -63,15 +65,16 @@ class TestDataFrameSource(TestCase):
self.assertTrue(isinstance(event['arbitrary'], float))
def test_yahoo_bars_to_panel_source(self):
finder = AssetFinder()
trading.environment = trading.TradingEnvironment()
finder = AssetFinder(trading.environment.engine)
stocks = ['AAPL', 'GE']
trading.environment.write_data(equities_identifiers=stocks)
start = pd.datetime(1993, 1, 1, 0, 0, 0, 0, pytz.utc)
end = pd.datetime(2002, 1, 1, 0, 0, 0, 0, pytz.utc)
data = factory.load_bars_from_yahoo(stocks=stocks,
indexes={},
start=start,
end=end)
check_fields = ['sid', 'open', 'high', 'low', 'close',
'volume', 'price']
+3 -2
View File
@@ -25,6 +25,7 @@ from unittest import TestCase
import numpy as np
from numpy.testing import assert_allclose
from zipline.finance.trading import TradingEnvironment
from zipline.algorithm import TradingAlgorithm
import zipline.utils.factory as factory
from zipline.api import add_transform, get_datetime
@@ -102,7 +103,6 @@ def with_algo(f):
initialize=initialize_with(self, tfm_name, days),
handle_data=handle_data_wrapper(f),
sim_params=sim_params,
identifiers=[1, 2, 3]
)
algo.run(source)
@@ -117,7 +117,6 @@ class TransformTestCase(TestCase):
def setUpClass(cls):
random.seed(0)
cls.sids = (1, 2, 3)
minute_sim_ps = factory.create_simulation_parameters(
num_days=3,
data_frequency='minute',
@@ -128,6 +127,8 @@ class TransformTestCase(TestCase):
data_frequency='daily',
emission_rate='daily',
)
cls.env = TradingEnvironment.instance()
cls.env.write_data(equities_identifiers=[1, 2, 3])
cls.sim_and_source = {
'minute': (minute_sim_ps, factory.create_minutely_trade_source(
cls.sids,