mirror of
https://github.com/wassname/catalyst.git
synced 2026-07-23 12:50:22 +08:00
MAINT: Remove perf_periods member.
Refer to cumulative and todays performance explicitly instead of always looping through. The third value (minute) for which this was useful, has been removed. Also, there are some actions where only cumulative may need application, e.g. application of dividends. (However, this patch does not remove dividend processing from todays performance, but opens up later patches to make that distinction.)
This commit is contained in:
@@ -256,7 +256,11 @@ def check_perf_tracker_serialization(perf_tracker):
|
||||
for k in scalar_keys:
|
||||
nt.assert_equal(getattr(test, k), getattr(perf_tracker, k), k)
|
||||
|
||||
for period in test.perf_periods:
|
||||
perf_periods = (
|
||||
test.cumulative_performance,
|
||||
test.todays_performance
|
||||
)
|
||||
for period in perf_periods:
|
||||
nt.assert_true(hasattr(period, '_position_tracker'))
|
||||
|
||||
|
||||
|
||||
@@ -111,8 +111,6 @@ class PerformanceTracker(object):
|
||||
|
||||
self.position_tracker = PositionTracker(asset_finder=env.asset_finder)
|
||||
|
||||
self.perf_periods = []
|
||||
|
||||
if self.emission_rate == 'daily':
|
||||
self.all_benchmark_returns = pd.Series(
|
||||
index=self.trading_days)
|
||||
@@ -145,7 +143,6 @@ class PerformanceTracker(object):
|
||||
asset_finder=self.env.asset_finder,
|
||||
)
|
||||
self.cumulative_performance.position_tracker = self.position_tracker
|
||||
self.perf_periods.append(self.cumulative_performance)
|
||||
|
||||
# this performance period will span just the current market day
|
||||
self.todays_performance = PerformancePeriod(
|
||||
@@ -161,8 +158,6 @@ class PerformanceTracker(object):
|
||||
)
|
||||
self.todays_performance.position_tracker = self.position_tracker
|
||||
|
||||
self.perf_periods.append(self.todays_performance)
|
||||
|
||||
self.saved_dt = self.period_start
|
||||
# one indexed so that we reach 100%
|
||||
self.day_count = 0.0
|
||||
@@ -239,8 +234,8 @@ class PerformanceTracker(object):
|
||||
|
||||
def update_performance(self):
|
||||
# calculate performance as of last trade
|
||||
for perf_period in self.perf_periods:
|
||||
perf_period.calculate_performance()
|
||||
self.cumulative_performance.calculate_performance()
|
||||
self.todays_performance.calculate_performance()
|
||||
|
||||
def get_portfolio(self, performance_needs_update):
|
||||
if performance_needs_update:
|
||||
@@ -292,8 +287,8 @@ class PerformanceTracker(object):
|
||||
# updates last sale, and pays out a cash adjustment if applicable
|
||||
cash_adjustment = self.position_tracker.update_last_sale(event)
|
||||
if cash_adjustment != 0:
|
||||
for perf_period in self.perf_periods:
|
||||
perf_period.handle_cash_payment(cash_adjustment)
|
||||
self.cumulative_performance.handle_cash_payment(cash_adjustment)
|
||||
self.todays_performance.handle_cash_payment(cash_adjustment)
|
||||
|
||||
def process_trade(self, event):
|
||||
self._handle_event_price(event)
|
||||
@@ -302,8 +297,8 @@ class PerformanceTracker(object):
|
||||
self._handle_event_price(event)
|
||||
self.txn_count += 1
|
||||
self.position_tracker.execute_transaction(event)
|
||||
for perf_period in self.perf_periods:
|
||||
perf_period.handle_execution(event)
|
||||
self.cumulative_performance.handle_execution(event)
|
||||
self.todays_performance.handle_execution(event)
|
||||
|
||||
def process_dividend(self, dividend):
|
||||
|
||||
@@ -312,18 +307,18 @@ class PerformanceTracker(object):
|
||||
def process_split(self, event):
|
||||
leftover_cash = self.position_tracker.handle_split(event)
|
||||
if leftover_cash > 0:
|
||||
for perf_period in self.perf_periods:
|
||||
perf_period.handle_cash_payment(leftover_cash)
|
||||
self.cumulative_performance.handle_cash_payment(leftover_cash)
|
||||
self.todays_performance.handle_cash_payment(leftover_cash)
|
||||
|
||||
def process_order(self, event):
|
||||
for perf_period in self.perf_periods:
|
||||
perf_period.record_order(event)
|
||||
self.cumulative_performance.record_order(event)
|
||||
self.todays_performance.record_order(event)
|
||||
|
||||
def process_commission(self, event):
|
||||
|
||||
self.position_tracker.handle_commission(event)
|
||||
for perf_period in self.perf_periods:
|
||||
perf_period.handle_commission(event)
|
||||
self.cumulative_performance.handle_commission(event)
|
||||
self.todays_performance.handle_commission(event)
|
||||
|
||||
def process_benchmark(self, event):
|
||||
if self.sim_params.data_frequency == 'minute' and \
|
||||
@@ -394,9 +389,8 @@ class PerformanceTracker(object):
|
||||
|
||||
net_cash_payment = position_tracker.pay_dividends(dividends_payable)
|
||||
|
||||
for period in self.perf_periods:
|
||||
# notify periods to update their stats
|
||||
period.handle_dividends_paid(net_cash_payment)
|
||||
self.cumulative_performance.handle_dividends_paid(net_cash_payment)
|
||||
self.todays_performance.handle_dividends_paid(net_cash_payment)
|
||||
|
||||
def check_asset_auto_closes(self, next_trading_day):
|
||||
"""
|
||||
@@ -553,9 +547,6 @@ class PerformanceTracker(object):
|
||||
|
||||
state_dict['_dividend_count'] = self._dividend_count
|
||||
|
||||
# we already store perf periods as attributes
|
||||
del state_dict['perf_periods']
|
||||
|
||||
STATE_VERSION = 4
|
||||
state_dict[VERSION_LABEL] = STATE_VERSION
|
||||
|
||||
@@ -575,12 +566,10 @@ class PerformanceTracker(object):
|
||||
self.dividend_frame = pickle.loads(state['dividend_frame'])
|
||||
|
||||
# properly setup the perf periods
|
||||
self.perf_periods = []
|
||||
p_types = ['cumulative', 'todays', 'minute']
|
||||
p_types = ['cumulative', 'todays']
|
||||
for p_type in p_types:
|
||||
name = p_type + '_performance'
|
||||
period = getattr(self, name, None)
|
||||
if period is None:
|
||||
continue
|
||||
period._position_tracker = self.position_tracker
|
||||
self.perf_periods.append(period)
|
||||
|
||||
Reference in New Issue
Block a user