Write risk checking helpers and tests
This commit is contained in:
46
core/trading/risk.py
Normal file
46
core/trading/risk.py
Normal file
@@ -0,0 +1,46 @@
|
||||
def check_max_loss(risk_model, initial_balance, account_balance):
|
||||
"""
|
||||
Check that the account balance is within the max loss limit.
|
||||
"""
|
||||
max_loss_percent = risk_model.max_loss_percent
|
||||
max_loss = initial_balance * (max_loss_percent / 100)
|
||||
return account_balance > max_loss
|
||||
|
||||
|
||||
def check_max_risk(risk_model, account_trades):
|
||||
"""
|
||||
Check that all of the trades in the account are within the max risk limit.
|
||||
"""
|
||||
max_risk_percent = risk_model.max_risk_percent
|
||||
total_risk = 0
|
||||
for trade in account_trades:
|
||||
max_tmp = []
|
||||
if "sl_percent" in trade:
|
||||
max_tmp.append(trade["sl_percent"])
|
||||
if "tsl_percent" in trade:
|
||||
max_tmp.append(trade["tsl_percent"])
|
||||
total_risk += max(max_tmp)
|
||||
return total_risk < max_risk_percent
|
||||
|
||||
|
||||
def check_max_open_trades(risk_model, account_trades):
|
||||
"""
|
||||
Check that the number of trades in the account is within the max open trades limit.
|
||||
"""
|
||||
return len(account_trades) < risk_model.max_open_trades
|
||||
|
||||
|
||||
def check_max_open_trades_per_symbol(risk_model, account_trades):
|
||||
"""
|
||||
Check we cannot open more trades per symbol than permissible.
|
||||
"""
|
||||
symbol_map = {}
|
||||
for trade in account_trades:
|
||||
symbol = trade["symbol"]
|
||||
if symbol not in symbol_map:
|
||||
symbol_map[symbol] = 0
|
||||
symbol_map[symbol] += 1
|
||||
for symbol, count in symbol_map.items():
|
||||
if count >= risk_model.max_open_trades_per_symbol:
|
||||
return False
|
||||
return True
|
||||
Reference in New Issue
Block a user