Skip to content

Commit

Permalink
Merge branch 'develop' into python_logging_switch
Browse files Browse the repository at this point in the history
  • Loading branch information
bug-or-feature committed Oct 24, 2023
2 parents cffecf4 + caf16fa commit e63e585
Show file tree
Hide file tree
Showing 5 changed files with 16 additions and 20 deletions.
2 changes: 1 addition & 1 deletion sysdata/config/defaults.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ strategy_capital_allocation:
# example: 100.0
#
## Where do we save backtests
backtest_store_directory: 'private'
backtest_store_directory: 'private.backtests'
#
# And backups
csv_backup_directory: 'data.backups_csv'
Expand Down
4 changes: 2 additions & 2 deletions sysobjects/contract_dates_and_expiries.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,10 @@ def from_str(expiryDate, date_as_str: str):
as_date = datetime.datetime.strptime(date_as_str, EXPIRY_DATE_FORMAT)
except:
raise Exception(
"Expiry date %s not in format %s" % date_as_str, EXPIRY_DATE_FORMAT
"Expiry date %s not in format %s" % (date_as_str, EXPIRY_DATE_FORMAT)
)

return expiryDate(as_date.year, as_date.month, as_date.day)
return expiryDate(year=as_date.year, month=as_date.month, day=as_date.day)

def as_str(self) -> str:
return self.strftime(EXPIRY_DATE_FORMAT)
Expand Down
7 changes: 6 additions & 1 deletion sysproduction/strategy_code/report_system_classic.py
Original file line number Diff line number Diff line change
Expand Up @@ -529,7 +529,12 @@ def risk_scaling_string(backtest) -> str:
backtest_system_portfolio_stage.get_leverage_for_original_position().iloc[-1]
)
percentage_vol_target = backtest_system_portfolio_stage.get_percentage_vol_target()
risk_scalar_final = backtest_system_portfolio_stage.get_risk_scalar().iloc[-1]
try:
risk_scalar = backtest_system_portfolio_stage.get_risk_scalar()
except missingData:
risk_scalar_final = 1.0
else:
risk_scalar_final = risk_scalar.iloc[-1]
risk_overlay_config = (
backtest_system_portfolio_stage.config.get_element_or_arg_not_supplied(
"risk_overlay"
Expand Down
17 changes: 7 additions & 10 deletions systems/portfolio.py
Original file line number Diff line number Diff line change
Expand Up @@ -212,16 +212,18 @@ def get_notional_position(self, instrument_code: str) -> pd.Series:
self.get_notional_position_before_risk_scaling(instrument_code)
)

risk_scalar = self.get_risk_scalar()
if type(risk_scalar) is pd.Series:
try:
risk_scalar = self.get_risk_scalar()
except missingData:
self.log.debug("No risk overlay in config: won't apply risk scaling")
notional_position = notional_position_without_risk_scalar
else:
risk_scalar_reindex = risk_scalar.reindex(
notional_position_without_risk_scalar.index
)
notional_position = (
notional_position_without_risk_scalar * risk_scalar_reindex.ffill()
)
else:
notional_position = notional_position_without_risk_scalar

return notional_position

Expand Down Expand Up @@ -960,12 +962,7 @@ def capital_multiplier(self):
@diagnostic()
def get_risk_scalar(self) -> pd.Series:

risk_overlay_config = self.config.get_element_or_arg_not_supplied(
"risk_overlay"
)
if risk_overlay_config is arg_not_supplied:
self.log.debug("No risk overlay in config: won't apply risk scaling")
return 1.0
risk_overlay_config = self.config.get_element("risk_overlay")

normal_risk = self.get_portfolio_risk_for_original_positions()
shocked_vol_risk = (
Expand Down
6 changes: 0 additions & 6 deletions tests/test_examples.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ def my_config(ewmac_8, ewmac_32):
my_config.trading_rules = dict(ewmac8=ewmac_8, ewmac32=ewmac_32)
my_config.instruments = ["US10", "EDOLLAR", "CORN", "SP500"]
my_config.notional_trading_capital = 1000000
my_config.risk_overlay = arg_not_supplied
my_config.exclude_instrument_lists = dict(
ignore_instruments=["MILK"],
trading_restrictions=["BUTTER"],
Expand Down Expand Up @@ -309,7 +308,6 @@ def test_simple_system_config_object(self, data, ewmac_8, ewmac_32):
percentage_vol_target=25.00,
notional_trading_capital=500000,
base_currency="GBP",
risk_overlay=arg_not_supplied,
exclude_instrument_lists=dict(
ignore_instruments=["MILK"],
trading_restrictions=["BUTTER"],
Expand Down Expand Up @@ -379,7 +377,6 @@ def test_simple_system_risk_overlay(self, data, ewmac_8, ewmac_32):
def test_simple_system_config_import(self, data):

my_config = Config("systems.provided.example.simplesystemconfig.yaml")
my_config.risk_overlay = arg_not_supplied
my_config.exclude_instrument_lists = dict(
ignore_instruments=["MILK"],
trading_restrictions=["BUTTER"],
Expand Down Expand Up @@ -418,7 +415,6 @@ def test_prebaked_simple_system(self):
This is the simple system from 'examples.introduction.prebakedsimplesystems'
"""
my_system = simplesystem()
my_system.config.risk_overlay = arg_not_supplied
print(my_system)
print(my_system.portfolio.get_notional_position("EDOLLAR").tail(5))

Expand All @@ -428,7 +424,6 @@ def test_prebaked_from_confg(self):
This is the config system from 'examples.introduction.prebakedsimplesystems'
"""
my_config = Config("systems.provided.example.simplesystemconfig.yaml")
my_config.risk_overlay = arg_not_supplied
my_data = csvFuturesSimData()
my_system = simplesystem(config=my_config, data=my_data)
print(my_system.portfolio.get_notional_position("EDOLLAR").tail(5))
Expand All @@ -440,7 +435,6 @@ def test_prebaked_chapter15(self):
but without graph plotting
"""
system = base_futures_system()
system.config.risk_overlay = arg_not_supplied
print(system.accounts.portfolio().sharpe())

@staticmethod
Expand Down

0 comments on commit e63e585

Please sign in to comment.