From 2db01b3935cb3a6e6f9f57fa357fb3386a61b424 Mon Sep 17 00:00:00 2001 From: fawce Date: Mon, 18 Feb 2013 20:27:33 -0500 Subject: [PATCH] created a new generator-backed trading environment for testing. other details: - also fixed grammatical errors in loader's status messages. - converting the treasury curves to an ordered dict. - moved to using a lambda for clarity as per @ehebert - initializing calendar end dates to be midnight of current date in - US/Eastern. Yahoo data isn't available until midnight eastern. --- zipline/data/loader.py | 4 ++-- zipline/utils/factory.py | 31 ++++++++++++++++++++++++++++ zipline/utils/tradingcalendar.py | 5 +++-- zipline/utils/tradingcalendar_lse.py | 3 +-- 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/zipline/data/loader.py b/zipline/data/loader.py index 21586da2..19702f90 100644 --- a/zipline/data/loader.py +++ b/zipline/data/loader.py @@ -97,7 +97,7 @@ def load_market_data(bm_symbol='^GSPC'): fp_bm = get_datafile(get_benchmark_filename(bm_symbol), "rb") except IOError: print """ -data msgpacks aren't distribute with source. +data msgpacks aren't distributed with source. Fetching data from Yahoo Finance. """.strip() dump_benchmarks(bm_symbol) @@ -119,7 +119,7 @@ Fetching data from Yahoo Finance. fp_tr = get_datafile('treasury_curves.msgpack', "rb") except IOError: print """ -data msgpacks aren't distribute with source. +data msgpacks aren't distributed with source. Fetching data from data.treasury.gov """.strip() dump_treasury_curves() diff --git a/zipline/utils/factory.py b/zipline/utils/factory.py index 4f9d99d7..87831705 100644 --- a/zipline/utils/factory.py +++ b/zipline/utils/factory.py @@ -34,6 +34,7 @@ from zipline.sources import (SpecificEquityTrades, from zipline.gens.utils import create_trade from zipline.finance.trading import SimulationParameters import zipline.finance.trading as trading +from zipline.sources.test_source import date_gen def create_simulation_parameters(year=2006, start=None, end=None, @@ -54,6 +55,36 @@ def create_simulation_parameters(year=2006, start=None, end=None, return sim_params +def create_noop_environment(): + oneday = timedelta(days=1) + start = datetime(2006, 1, 1, tzinfo=pytz.utc) + + bm_returns = [] + tr_curves = OrderedDict() + for day in date_gen(start=start, delta=oneday, count=252): + dr = trading.DailyReturn(day, 0.01) + bm_returns.append(dr) + curve = { + '10year': 0.0799, + '1month': 0.0799, + '1year': 0.0785, + '20year': 0.0765, + '2year': 0.0794, + '30year': 0.0804, + '3month': 0.0789, + '3year': 0.0796, + '5year': 0.0792, + '6month': 0.0794, + '7year': 0.0804, + 'tid': 1752 + } + tr_curves[day] = curve + + load_nodata = lambda x: (bm_returns, tr_curves) + + return trading.TradingEnvironment(load=load_nodata) + + def create_random_simulation_parameters(): trading.environment = trading.TradingEnvironment() treasury_curves = trading.environment.treasury_curves diff --git a/zipline/utils/tradingcalendar.py b/zipline/utils/tradingcalendar.py index 36d35398..0ceb2385 100644 --- a/zipline/utils/tradingcalendar.py +++ b/zipline/utils/tradingcalendar.py @@ -19,10 +19,11 @@ import pytz from datetime import datetime from dateutil import rrule -from zipline.utils.date_utils import utcnow +from delorean import Delorean start = datetime(1990, 1, 1, tzinfo=pytz.utc) -end = utcnow() +end_dln = Delorean(datetime.now(), 'US/Eastern').truncate('day').shift('UTC') +end = end_dln.datetime def get_non_trading_days(start, end): diff --git a/zipline/utils/tradingcalendar_lse.py b/zipline/utils/tradingcalendar_lse.py index 60f2d72b..84d5e545 100644 --- a/zipline/utils/tradingcalendar_lse.py +++ b/zipline/utils/tradingcalendar_lse.py @@ -27,10 +27,9 @@ import pandas as pd from datetime import datetime from dateutil import rrule -from zipline.utils.date_utils import utcnow +from zipline.utils.tradingcalendar import end start = datetime(2002, 1, 1, tzinfo=pytz.utc) -end = utcnow() non_trading_rules = [] # Weekends