Skip to content

Commit 3feee0f

Browse files
committed
added get_available_cash in portfolio
1 parent d1ffca5 commit 3feee0f

1 file changed

Lines changed: 30 additions & 4 deletions

File tree

scripts/risk_manager.py

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -165,27 +165,53 @@ def _calculate_atr(portfolio, ticker, period: int = 14) -> float:
165165

166166

167167
def _process_buy(ticker, portfolio, dict_enriched, max_positions, risk_per_trade, atr_factor):
168-
if portfolio.get_positions_count() >= max_positions:
168+
logger.info(f"Processing BUY for ticker {ticker}")
169+
170+
positions_count = portfolio.get_positions_count()
171+
logger.info(f"Current positions count: {positions_count} / Max allowed: {max_positions}")
172+
if positions_count >= max_positions:
173+
logger.info(f"Max positions reached, skipping BUY for {ticker}")
169174
return
170175

171176
available_cash = portfolio.get_available_cash()
177+
logger.info(f"Available cash: {available_cash}")
178+
172179
equity = portfolio.get_total_value()
180+
logger.info(f"Portfolio total value: {equity}")
181+
173182
risk_amount = equity * risk_per_trade
183+
logger.info(f"Risk amount ({risk_per_trade*100:.2f}% of total value): {risk_amount}")
184+
185+
# Calcolo ATR
186+
atr = _calculate_atr(portfolio, ticker)
187+
logger.info(f"ATR for {ticker}: {atr}")
188+
if atr == 0:
189+
logger.warning(f"ATR is zero for {ticker}, cannot calculate position size")
190+
return
174191

175-
atr = _calculate_atr(portfolio, ticker)
176192
risk_distance = atr * atr_factor
193+
logger.info(f"Risk distance (ATR * factor {atr_factor}): {risk_distance}")
194+
if risk_distance == 0:
195+
logger.warning(f"Risk distance is zero for {ticker}, skipping BUY")
196+
return
177197

178-
position_size = risk_amount / risk_distance
179198
price = database.get_last_close(ticker)
199+
logger.info(f"Last close price for {ticker}: {price}")
180200

181-
stop = price - risk_distance
201+
position_size = risk_amount / risk_distance
202+
logger.info(f"Calculated position size before cash check: {position_size}")
182203

204+
# Controllo cash disponibile
183205
if position_size < 1 or position_size * price > available_cash:
206+
logger.info(f"Position size too small or exceeds available cash, skipping BUY for {ticker}")
184207
return
185208

209+
stop = price - risk_distance
186210
dict_enriched["BUY"][ticker] = {
187211
"size": int(position_size),
188212
"price": price,
189213
"stop": stop,
190214
"risk": risk_amount
191215
}
216+
217+
logger.info(f"BUY signal prepared for {ticker}: {dict_enriched['BUY'][ticker]}")

0 commit comments

Comments
 (0)