es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La función sum() de Python está calculando el mismo valor para dos listas diferentes.

Estoy tratando de hacer un análisis técnico utilizando RSI, lo cual implica tener 2 listas de ganancias y pérdidas, luego obtener el promedio de las 2 listas. Por alguna razón, al utilizar sum(), obtengo el mismo valor para las 2 listas. Cuando agrego manualmente la suma de las listas, veo resultados diferentes. Esto es lo que tengo:

def calculate_avg_gain(in_list : list) -> tuple:
gain_list = []
loss_list = []
for i, close in enumerate(in_list):
try:
change = close – in_list[i-1]
except IndexError:
change = 0.0
if change >= 0.0:
gain_list.append(change)
loss_list.append(0.0)
else:
gain_list.append(0.0)
loss_list.append(abs(change))
avg_gain = sum(gain_list) / 14
avg_loss = sum(loss_list) / 14
return avg_gain, avg_loss

Me detuve en el código cuando tenía 14 entradas para cada una:

gain_list = [1.1800000000000068, 0.0, 0.0, 0.10000000000002274, 0.0, 0.44999999999998863, 0.030000000000001137, 0.0, 0.160000000000025, 0.0, 0.0, 0.15000000000000568, 0.0, 0.05000000000001137]
loss_list = [0.0, 0.19999999999998863, 0.10999999999998522, 0.0, 0.0, 0.0, 0.5, 0.3299999999999841, 0.0, 0.47999999999998977, 0.0, 0.10000000000002274, 0.25, 0.0]
avg_gain = 0.15142857142857583
avg_loss = 0.1407142857142836

La suma para ambas es de 2.12, que es lo que obtengo para la suma de loss_list, mientras que obtengo 2.1799 para gain_list. ¿Me estoy perdiendo algo?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema no está en el cálculo de la suma sino en la división por 14. La función sum() está calculando correctamente la suma de los valores en cada lista, pero la división por 14 debería aplicarse después de calcular la suma de cada lista por separado.

    En la implementación actual, la división por 14 se aplica a la suma total de ambas listas combinadas, lo que está causando los valores promedio incorrectos. Para solucionar esto, la división por 14 debe realizarse por separado para gain_list y loss_list, de la siguiente manera:

    avg_gain = sum(gain_list) / len(gain_list)
    avg_loss = sum(loss_list) / len(loss_list)
    

    Esto asegurará que cada promedio se calcule correctamente en base a la longitud de la lista particular que se esté utilizando.

Comments are closed.