Bill Ackman Concentrated Trading Team

AI trading team workflow for Bill Ackman concentrated style investing

This example models a concentrated idea process: quality research, catalyst analysis, an adversarial bear case, then one final position decision.

Agent flow

  • quality_researcher finds the best high-quality large-cap business.

  • activist_bull argues for catalysts, pricing power, and value creation.

  • short_seller_bear attacks the thesis.

  • portfolio_manager builds one concentrated position with trading permission.

Example code

"""Bill Ackman / Pershing Square-inspired concentrated AI trading team example.

This example is inspired by public descriptions of concentrated, high-quality
large-cap investing. It is not affiliated with or endorsed by Bill Ackman,
Pershing Square, or related companies.

Set GEMINI_API_KEY, then run:
    python ai_trading_team_bill_ackman_concentrated.py
"""

import os
from datetime import datetime

from lumibot.strategies.strategy import Strategy


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

    def initialize(self):
        self.sleeptime = "1D"
        model = os.environ.get("AI_TRADING_TEAM_MODEL", "gemini-3.1-flash-lite")
        self.agents.create(
            name="quality_researcher",
            model=model,
            allow_trading=False,
            system_prompt="Find the best high-quality, large-cap business with durable free cash flow and clear upside.",
        )
        self.agents.create(
            name="activist_bull",
            model=model,
            allow_trading=False,
            system_prompt="Argue for the most concentrated high-conviction position. Focus on catalysts, pricing power, and value creation.",
        )
        self.agents.create(
            name="short_seller_bear",
            model=model,
            allow_trading=False,
            system_prompt="Attack the thesis like a short seller. Find leverage, governance, accounting, competition, and valuation risk.",
        )
        self.agents.create(
            name="portfolio_manager",
            model=model,
            allow_trading=True,
            system_prompt="Build one concentrated position from the universe if the bull case survives. Use nearly all cash in the best idea.",
        )

    def on_trading_iteration(self):
        context = {
            "date": self.get_datetime().date().isoformat(),
            "universe": self.parameters["universe"],
        }
        quality = self.agents["quality_researcher"].run(task_prompt="Pick the best high-quality large-cap candidate.", context=context)
        bull = self.agents["activist_bull"].run(task_prompt="Make the concentrated bull case.", context={**context, "quality": quality.summary})
        bear = self.agents["short_seller_bear"].run(
            task_prompt="Attack the concentrated thesis.",
            context={**context, "quality": quality.summary, "bull": bull.summary},
        )
        self.agents["portfolio_manager"].run(
            task_prompt="Sell anything that is not the surviving best idea, then buy the best stock with nearly all available cash.",
            context={**context, "quality": quality.summary, "bull": bull.summary, "bear": bear.summary},
        )


if __name__ == "__main__":
    from lumibot.backtesting import YahooDataBacktesting

    AITradingTeamBillAckmanConcentratedStrategy.backtest(
        YahooDataBacktesting,
        datetime(2026, 4, 7),
        datetime(2026, 5, 22),
    )