mirror of
https://github.com/wassname/catalyst.git
synced 2026-07-04 13:38:20 +08:00
BUG: ensure perf stats are generated for all days
When running with minutely emissions the simulator would report to the user that it simulated 'n - 1' days (where n is the number of days specified in the simulation params). Now the correct number of trading days are reported as being simulated.
This commit is contained in:
committed by
twiecki
parent
45844bac31
commit
147242339d
@@ -0,0 +1,28 @@
|
||||
#
|
||||
# Copyright 2014 Quantopian, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# 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.
|
||||
|
||||
from unittest import TestCase
|
||||
from zipline.test_algorithms import NoopAlgorithm
|
||||
from zipline.utils import factory
|
||||
|
||||
|
||||
class TestTradeSimulation(TestCase):
|
||||
|
||||
def test_minutely_emissions_generate_performance_stats_for_last_day(self):
|
||||
params = factory.create_simulation_parameters(num_days=1)
|
||||
params.emission_rate = 'minute'
|
||||
algo = NoopAlgorithm()
|
||||
algo.run(source=[], sim_params=params)
|
||||
self.assertEqual(algo.perf_tracker.day_count, 1.0)
|
||||
@@ -59,6 +59,7 @@ DEFAULT_CAPITAL_BASE = float("1.0e5")
|
||||
|
||||
|
||||
class TradingAlgorithm(object):
|
||||
|
||||
"""
|
||||
Base class for trading algorithms. Inherit and overload
|
||||
initialize() and handle_data(data).
|
||||
@@ -83,6 +84,7 @@ class TradingAlgorithm(object):
|
||||
stats = my_algo.run(data)
|
||||
|
||||
"""
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
"""Initialize sids and other state variables.
|
||||
|
||||
@@ -228,7 +230,8 @@ class TradingAlgorithm(object):
|
||||
"""
|
||||
if self.benchmark_return_source is None:
|
||||
env = trading.environment
|
||||
if self.data_frequency == 'minute':
|
||||
if (self.data_frequency == 'minute'
|
||||
or sim_params.emission_rate == 'minute'):
|
||||
update_time = lambda date: env.get_open_and_close(date)[1]
|
||||
else:
|
||||
update_time = lambda date: date
|
||||
|
||||
@@ -188,7 +188,7 @@ class AlgorithmSimulator(object):
|
||||
yield daily_rollup
|
||||
tp = self.algo.perf_tracker.todays_performance
|
||||
tp.rollover()
|
||||
if mkt_close < self.algo.perf_tracker.last_close:
|
||||
if mkt_close <= self.algo.perf_tracker.last_close:
|
||||
_, mkt_close = \
|
||||
trading.environment.next_open_and_close(
|
||||
mkt_close
|
||||
|
||||
@@ -134,6 +134,9 @@ class NoopAlgorithm(TradingAlgorithm):
|
||||
def set_transact_setter(self, txn_sim_callable):
|
||||
pass
|
||||
|
||||
def handle_data(self, data):
|
||||
pass
|
||||
|
||||
|
||||
class ExceptionAlgorithm(TradingAlgorithm):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user