mirror of
https://github.com/wassname/catalyst.git
synced 2026-07-01 23:13:58 +08:00
Merge pull request #1459 from quantopian/target_cash_capital_change_from_raw_cash
BUG/ENH: Fix behavior of 'target' capital changes
This commit is contained in:
+10
-9
@@ -2167,7 +2167,7 @@ class TestCapitalChanges(WithLogger,
|
||||
)
|
||||
|
||||
@parameterized.expand([
|
||||
('target', 153000.0), ('delta', 50000.0)
|
||||
('target', 127000.0), ('delta', 50000.0)
|
||||
])
|
||||
def test_capital_changes_daily_mode(self, change_type, value):
|
||||
sim_params = factory.create_simulation_parameters(
|
||||
@@ -2215,8 +2215,9 @@ def order_stuff(context, data):
|
||||
capital_change_packets[0],
|
||||
{'date': pd.Timestamp('2006-01-06', tz='UTC'),
|
||||
'type': 'cash',
|
||||
'target': 153000.0 if change_type == 'target' else None,
|
||||
'delta': 50000.0})
|
||||
'target': value if change_type == 'target' else None,
|
||||
'delta': 50000.0
|
||||
})
|
||||
|
||||
# 1/03: price = 10, place orders
|
||||
# 1/04: orders execute at price = 11, place orders
|
||||
@@ -2320,10 +2321,10 @@ def order_stuff(context, data):
|
||||
)
|
||||
|
||||
@parameterized.expand([
|
||||
('interday_target', [('2006-01-04', 2388.0)]),
|
||||
('interday_target', [('2006-01-04', 1899.0)]),
|
||||
('interday_delta', [('2006-01-04', 1000.0)]),
|
||||
('intraday_target', [('2006-01-04 17:00', 2186.0),
|
||||
('2006-01-04 18:00', 2806.0)]),
|
||||
('intraday_target', [('2006-01-04 17:00', 908.0),
|
||||
('2006-01-04 18:00', 1408.0)]),
|
||||
('intraday_delta', [('2006-01-04 17:00', 500.0),
|
||||
('2006-01-04 18:00', 500.0)]),
|
||||
])
|
||||
@@ -2486,10 +2487,10 @@ def order_stuff(context, data):
|
||||
)
|
||||
|
||||
@parameterized.expand([
|
||||
('interday_target', [('2006-01-04', 2388.0)]),
|
||||
('interday_target', [('2006-01-04', 1899.0)]),
|
||||
('interday_delta', [('2006-01-04', 1000.0)]),
|
||||
('intraday_target', [('2006-01-04 17:00', 2186.0),
|
||||
('2006-01-04 18:00', 2806.0)]),
|
||||
('intraday_target', [('2006-01-04 17:00', 908.0),
|
||||
('2006-01-04 18:00', 1408.0)]),
|
||||
('intraday_delta', [('2006-01-04 17:00', 500.0),
|
||||
('2006-01-04 18:00', 500.0)]),
|
||||
])
|
||||
|
||||
@@ -825,12 +825,17 @@ class TradingAlgorithm(object):
|
||||
|
||||
return daily_stats
|
||||
|
||||
def calculate_capital_changes(self, dt, emission_rate, is_interday):
|
||||
def calculate_capital_changes(self, dt, emission_rate, is_interday,
|
||||
portfolio_value_adjustment=0.0):
|
||||
"""
|
||||
If there is a capital change for a given dt, this means the the change
|
||||
occurs before `handle_data` on the given dt. In the case of the
|
||||
change being a target value, the change will be computed on the
|
||||
portfolio value according to prices at the given dt
|
||||
|
||||
`portfolio_value_adjustment`, if specified, will be removed from the
|
||||
portfolio_value of the cumulative performance when calculating deltas
|
||||
from target capital changes.
|
||||
"""
|
||||
try:
|
||||
capital_change = self.capital_changes[dt]
|
||||
@@ -852,13 +857,12 @@ class TradingAlgorithm(object):
|
||||
False,
|
||||
self.data_portal
|
||||
)
|
||||
|
||||
self.perf_tracker.prepare_capital_change(is_interday)
|
||||
|
||||
if capital_change['type'] == 'target':
|
||||
target = capital_change['value']
|
||||
capital_change_amount = target - \
|
||||
self.updated_portfolio().portfolio_value
|
||||
(self.updated_portfolio().cash - portfolio_value_adjustment)
|
||||
self.portfolio_needs_update = True
|
||||
|
||||
log.info('Processing capital change to target %s at %s. Capital '
|
||||
|
||||
Reference in New Issue
Block a user