mirror of
https://github.com/wassname/catalyst.git
synced 2026-07-21 12:30:16 +08:00
MAINT: Update tests to conform to new reader/writer structure
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
@@ -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.
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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],
|
||||
|
||||
@@ -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']
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user