@@ -298,28 +298,34 @@ def get_average_trade_gain(trades: List[Trade]) -> Tuple[float, float]:
298298 trades (List[Trade]): List of trades.
299299
300300 Returns:
301- Tuple[float, float]: The average gain
302- percentage of the average loss
301+ Tuple[float, float]: The average gain and average gain percentage
303302 """
304303 if trades is None or len (trades ) == 0 :
305304 raise OperationalException (
306305 "Trades list is empty or None, cannot calculate average gain."
307306 )
308307
309308 gains = [t .net_gain_absolute for t in trades if t .net_gain_absolute > 0 ]
310- cost = sum (t .cost for t in trades if t .net_gain_absolute > 0 )
311309
312310 if not gains :
313311 return 0.0 , 0.0
314312
315313 average_gain = sum (gains ) / len (gains )
316- percentage = (average_gain / cost ) if cost > 0 else 0.0
317- return average_gain , percentage
318314
315+ # Updated percentage calculation to match other functions
316+ percentage_returns = [
317+ (t .net_gain_absolute / t .cost ) for t in trades
318+ if t .net_gain_absolute > 0 and t .cost > 0
319+ ]
320+ average_gain_percentage = (
321+ sum (percentage_returns ) / len (percentage_returns )
322+ if percentage_returns else 0.0
323+ )
319324
320- def get_current_average_trade_gain (
321- trades : List [Trade ]
322- ) -> Tuple [float , float ]:
325+ return average_gain , average_gain_percentage
326+
327+
328+ def get_current_average_trade_gain (trades : List [Trade ]) -> Tuple [float , float ]:
323329 """
324330 Calculate the average gain from a list of trades,
325331 including both closed and open trades.
@@ -329,23 +335,31 @@ def get_current_average_trade_gain(
329335 Args:
330336 trades (List[Trade]): List of trades.
331337 Returns:
332- Tuple[float, float]: The average gain
333- percentage of the average loss
338+ Tuple[float, float]: The average gain and average gain percentage
334339 """
335340 if trades is None or len (trades ) == 0 :
336341 raise OperationalException (
337342 "Trades list is empty or None, cannot calculate average gain."
338343 )
339344
340345 gains = [t .net_gain_absolute for t in trades if t .net_gain_absolute > 0 ]
341- cost = sum (t .cost for t in trades if t .net_gain_absolute > 0 )
342346
343347 if not gains :
344348 return 0.0 , 0.0
345349
346350 average_gain = sum (gains ) / len (gains )
347- percentage = (average_gain / cost ) if cost > 0 else 0.0
348- return average_gain , percentage
351+
352+ # Updated percentage calculation to match other functions
353+ percentage_returns = [
354+ (t .net_gain_absolute / t .cost ) for t in trades
355+ if t .net_gain_absolute > 0 and t .cost > 0
356+ ]
357+ average_gain_percentage = (
358+ sum (percentage_returns ) / len (percentage_returns )
359+ if percentage_returns else 0.0
360+ )
361+
362+ return average_gain , average_gain_percentage
349363
350364
351365def get_average_trade_loss (trades : List [Trade ]) -> Tuple [float , float ]:
0 commit comments