Echa un vistazo a Backtrader:
Hay una extensa biblioteca de Python para backtesting llamada Backtrader
(enlace al repositorio de Github), que según la documentación, soporta estrategias basadas en eventos a través de múltiples activos. Debido a la activa comunidad detrás de ella, la biblioteca se actualiza frecuentemente con funcionalidades adicionales (tiene asombrosos 122 indicadores integrados). He proporcionado un enlace a la documentación.
Además de eso, he encontrado un ejemplo donde prueban la estrategia de este documento, a través de un subconjunto de acciones. Siempre y cuando el universo de activos esté fijo, entonces se puede reequilibrar a lo largo de la dimensión de los activos basándose en algunas condiciones. En el ejemplo, las condiciones para reequilibrar se basan en comprar y vender acciones clasificadas en la parte superior e inferior respectivamente y establecer una orden objetivo para las acciones mejor clasificadas.
Esto parece ser la misma configuración que estás solicitando en tu pregunta. Aunque es difícil de determinar, cuando no has revelado tu estrategia. Aquí tienes algunos más ejemplos. Puedes determinar si alguno de ellos se ajusta a tu propio escenario.
Alternativamente, podrías probar Zipline
(enlace aquí), que es otra biblioteca de Python para backtesting. Al final, si tu estrategia es demasiado "compleja" (de una forma u otra), es mejor codificar tu propio backtester, donde verificas tus señales a lo largo de la dimensión de activos y a lo largo del tiempo. Esto es lo mismo que rebalancear una cartera de activos, basándote en algunas condiciones relacionadas con la dimensión de activos y tiempo. Espero que esto te brinde algo de perspectiva.