Saltar al contenido
Todos los documentos de la biblioteca

Selección concentrada de acciones con análisis de AI y revisión bajista

Código Lumibot

Resumen

Esta estrategia emplea un flujo de trabajo con tres agentes para crear una cartera concentrada a partir de una lista fija de acciones de grandes empresas. Un agente de investigación clasifica hasta cinco candidatas según la previsibilidad de sus operaciones, la generación de efectivo y el atractivo de su precio. Un agente que adopta la perspectiva de un vendedor en corto cuestiona esas ideas en cuanto a deuda, gestión, competencia y valoración; después, el agente de trading mantiene entre tres y cinco ideas que superan la revisión, asigna más peso a las candidatas más sólidas y vende las que dejan de cumplir los criterios.

El documento ofrece un esquema de implementación, no pruebas de rendimiento. El proceso se ejecuta una vez al día e incluye una opción de entrada para backtesting con datos de Yahoo, pero no informa de resultados de pruebas, rentabilidad de la cartera ni medidas de riesgo. Las indicaciones dejan sin especificar decisiones importantes, como la forma en que los agentes evalúan los fundamentos de las empresas, determinan los pesos, gestionan la rotación y controlan el riesgo de la cartera. Por tanto, el enfoque descrito es un marco cualitativo de selección de acciones, no una prueba de que los juicios de los agentes sean fiables o de que la cartera supere al mercado.

Ideas clave

  • Un agente de investigación clasifica empresas según su sencillez, previsibilidad, generación de efectivo y precio.
  • Una revisión independiente desde la perspectiva de un vendedor en corto cuestiona cada candidata antes de que pueda entrar en la cartera.
  • El agente de trading mantiene entre tres y cinco acciones que superan la revisión y asigna más capital a sus ideas más sólidas.
  • El código describe un flujo de trabajo diario, pero no aporta resultados de rendimiento ni controles de riesgo detallados.

Etiquetas

Texto completo
# ai_trading_team_bill_ackman_concentrated.py


```py
"""Bill Ackman Portfolio AI Trading Bot.

Invests the way Bill Ackman describes his style: own just a few simple,
high-quality companies and put real money behind them. A research agent finds
the best ideas. A short seller agent attacks each one. A trading agent holds the
3 to 5 that survive, with the most money in the best ideas.
Not affiliated with or endorsed by Bill Ackman or Pershing Square.
"""

from lumibot.strategies import Strategy


class AITradingTeamBillAckmanConcentratedStrategy(Strategy):
    parameters = {"universe": ["GOOGL", "CMG", "HLT", "QSR", "UBER", "CP", "LOW", "MDLZ", "BKNG", "MSFT"]}

    def initialize(self):
        self.sleeptime = "1D"
        self.agents.create(
            name="researcher",
            allow_trading=False,
            system_prompt=(
                "Find the simple, predictable companies in the universe that make lots of cash and trade at a "
                "good price. Rank your top 5 ideas and say why. Do not trade."
            ),
        )
        self.agents.create(
            name="short_seller",
            allow_trading=False,
            system_prompt=(
                "You are a short seller. Attack each idea: too much debt, weak management, strong rivals, or "
                "a price that is too high. Say which ideas survive. Do not trade."
            ),
        )
        self.agents.create(
            name="trader",
            allow_trading=True,
            system_prompt=(
                "Hold the 3 to 5 ideas that survived, with more money in the best ones. Sell a stock when it "
                "no longer survives the attack."
            ),
        )

    def on_trading_iteration(self):
        facts = {"universe": self.parameters["universe"]}
        research = self.agents["researcher"].run(task_prompt="Rank your best ideas.", context=facts)
        attack = self.agents["short_seller"].run(
            task_prompt="Attack each idea.", context={**facts, "research": research.summary}
        )
        self.agents["trader"].run(task_prompt="Hold the survivors.", context={**facts, "short_seller": attack.summary})


if __name__ == "__main__":
    from lumibot.credentials import IS_BACKTESTING

    if IS_BACKTESTING:
        from lumibot.backtesting import YahooDataBacktesting

        AITradingTeamBillAckmanConcentratedStrategy.backtest(YahooDataBacktesting)
    else:
        AITradingTeamBillAckmanConcentratedStrategy().run_live()

```

Se muestra íntegramente con atribución según la licencia de la fuente. Licencia: GPL-3.0

Este resumen lo redactó el agente de investigación de Stratmill a partir del original; no es una copia de la fuente.