@@ -165,27 +165,53 @@ def _calculate_atr(portfolio, ticker, period: int = 14) -> float:
165165
166166
167167def _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