Communitygithub.com

cmoralesm/P123-Claude-Skill

Referência completa e verificada para o Portfolio123 (P123), a plataforma de pesquisa sistemática de ações: factor investing, screaning, sistemas de ranking, backtesting e API REST com o wrapper Python p123api.

O que é P123-Claude-Skill?

Esta skill fornece uma referência abrangente e verificada para o Portfolio123 (P123), uma plataforma web para pesquisa sistemática de ações, incluindo screaning, sistemas de ranking multifator, simulação/backtesting de estratégias e uma API REST. Ela abrange todos os 4.463 fatores e 465 funções do Factor Reference oficial, organizados em 13 arquivos de categorias, além de toda a API REST (39 operações) e 9 scripts de exemplo executáveis. A skill é essencial para qualquer desenvolvedor ou usuário de IA que trabalhe com P123, seja para escrever fórmulas, depurar sistemas de ranking, construir screens, replicar estratégias acadêmicas de fatores (como valor, momentum, qualidade, baixa volatilidade) ou extrair dados programaticamente via p123api. Ela também documenta as armadilhas comuns de nomenclatura, o esquema correto de XML de sistemas de ranking e fornece pontos de partida verificados para fatores por estilo de investimento, garantindo que o usuário evite erros de implementação e obtenha resultados precisos.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add cmoralesm/P123-Claude-Skill

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Portfolio123 (P123)

Portfolio123 é uma plataforma web para pesquisa sistemática de ações: screaning, sistemas de ranking multifator, simulação/backtesting de estratégias e uma API REST. Sua linguagem de fórmulas (não Python) é usada em regras de screen, nós de sistemas de ranking, regras de compra/venda e extrações de dados da API.

Tudo nesta skill foi extraído do Factor Reference oficial do P123 em 09/06/2026 (4.463 fatores e 465 funções em 13 categorias, além de 473 constantes/IDs de séries/operadores) e da especificação OpenAPI oficial e do código-fonte do wrapper p123api. Nunca invente um nome de fator ou função - se um nome não estiver nesses arquivos de referência, presuma que ele não existe e procure o nome correto.

Qual arquivo de referência ler

Leia apenas o que a tarefa necessita:

TarefaLeia
Chamadas à API REST ou ao p123api Python (auth, screen_run, backtests, rank_ranks, data_universe, uploads, AI Factor)references/api.md
Índices de valuation (PE, EV/EBITDA, preço-sobre-X), margens, taxas de crescimento, scores de qualidade (Piotroski), razões financeiras e por açãoreferences/ratios-statistics.md
Itens de demonstrações financeiras (DRE, balanço patrimonial, fluxo de caixa) e suas variantes de fator; mapeamento de fornecedores Compustat/FactSetreferences/financials.md
Metadados da empresa, preços/dividendos/desdobramentos como fundamentos, estatísticas de ações, participação de insiders/institucionais, juros de venda a descoberto, dados realizadosreferences/fundamentals.md
Estimativas de analistas: consenso EPS/vendas (famílias CurFY/NextFY/CurQ), revisões, surpresas, recomendações, crescimento de longo prazoreferences/estimates.md
Indicadores de preço/volume: SMA/EMA, RSI, MACD, ADX/DMI, Bollinger, retornos (Ret%Chg), estatísticas de 52 semanas, volatilidade, betareferences/technical.md
Ferramentas transversais e de séries temporais: FRank, FHist, FHistAvg, Aggregate, FMedian/FSum/FCount, funções Loop, regressão linear, condicionaisreferences/advanced-functions.md
Contexto de estratégia simulada: fatores de regras de compra/venda (Rank, RankPos, estado do portfólio), padrões de regras, expressões idiomáticas de rebalanceamentoreferences/strategy.md
Agregados de todo o universo: UnivAvg, UnivCnt, UnivMedian, UnivSum, ...references/universe-operations.md
Filtros de definição de universo: UnivExclude, UnivSubset, UnivRBICSreferences/universe-filters.md
Acesso a séries de benchmark: BenchClosereferences/benchmark-functions.md
Classificação setorial/industrial (RBICS): Sector, IndCode, SubIndustry, composites setoriais/industriaisreferences/industry-sector.md
Vocabulários de taxonomia de ETFs (contextos ETF): classe de ativo, país, região, conjuntos setoriaisreferences/taxonomy.md
Utilitários matemáticos/conjuntos/data, InList, GetSeries, IDs de séries macro (##CPI, mapeamentos FRED), constantes de país e ID de universo, operadoresreferences/misc.md
Replicação de um fator acadêmico nomeado (Piotroski F-Score, rentabilidade bruta Novy-Marx, accruals Sloan, Beneish M-Score, momentum 12-1, betting-against-beta, crescimento de ativos, emissão líquida de ações): implementação exata, direção e escopo do nó, armadilhas de traduçãoreferences/factor-replication.md
Gerar ou editar XML de sistema de ranking (leitura obrigatória, veja abaixo)references/ranking-system-xml.md
Executar os scripts de exemplo inclusos (configuração, variáveis de ambiente, modelo de segurança)scripts/README.md

Fundamentos da linguagem de fórmulas

// Variáveis: SetVar SEMPRE retorna VERDADEIRO (1), nunca o valor atribuído
SetVar(@cheap, PEExclXorTTM < 15)   // regra própria, depois reutilize @cheap em regras posteriores
// Retornar 1 é o que permite que uma definição seja encadeada na fórmula que a usa -
// a única opção onde não há regra seguinte (nós de ranking, fórmulas da API):
SetVar(@r, Ret%Chg(252, 21)) * @r * Abs(@r)   // 1 * @r * Abs(@r) == @r * Abs(@r)
// Uma regra de venda SetVar pura sempre aciona a venda - negue-a: !SetVar(@x, ...).
// @var:expr difere - RETORNA o valor (pode ser 0/NA) e adiciona uma coluna de relatório:
MktCap > @med:FMedian("MktCap")

// Matemática: + - * / e ^ (potência). ^ tem precedência sobre todos os outros operadores, então 2*x^3 é 2*(x^3).
// x^y e Pow(x, y) são a mesma operação - escreva x^y. NÃO existe Sqrt: uma raiz
// quadrada é x^0.5, uma raiz n-ésima x^(1/n) (parênteses obrigatórios, pois x^1/3 significa (x^1)/3).
MktCap^0.5                          // raiz quadrada da capitalização de mercado; NÃO Sqrt(MktCap)

// Condicional: Eval(condição, valor_se_verdadeiro, valor_se_falso)
Eval(PEExclXorTTM = NA, Pr2SalesTTM < 2, PEExclXorTTM < 20)

// Tratamento de NA: IsNA(expr1, expr2) é uma função de SUBSTITUIÇÃO (retorna expr2 quando
// expr1 é NA). NÃO é um teste booleano de um argumento - teste NA com "= NA".
IsNA(DivPSTTM, 0)           // dividendo por ação, 0 quando ausente
LastSellPrice = NA          // booleano: nunca vendido antes

// Percentil transversal (0-100). Padrões: escopo #All, ordenação #DESC, NAs #InclNA
FRank("PEExclXorTTM", #All, #ASC) > 80   // #ASC: PE baixo classifica alto

// Histórico pontual: valor de uma fórmula N semanas atrás / amostras médias
FHist("ROE%TTM", 52)
FHistAvg("ROE%TTM", 4, 13)

// Técnicos: barras são dias de negociação; constantes #Year, #Month, #Week são contagens de barras
Close(0) > SMA(200, 0)
RSI(14) < 30
Ret%Chg(252, 21)            // retorno total em 252 barras, terminando 21 barras atrás

// Agregados de escopo e contrapartes
Aggregate("Pr2SalesTTM", #Industry)      // métodos: #Avg (padrão), #CapAvg
FMedian("Pr2SalesTTM", #Industry)        // mediana; também FSum, FCount
UnivCnt("PEExclXorTTM < 10")             // contagem em todo o universo

// Séries macro/índices em funções de preço via IDs de série
Close(0, ##CPI)
Close(0, GetSeries("$SP500"))

Padrão de itens de linha (Financeiros). Cada item de linha de demonstração financeira é uma função mais variantes de fator pré-construídas: Sales(offset, type[, NAHandling]) com type = QTR/ANN/TTM e NAHandling = FALLBACK (padrão), KEEPNA, ZERONA; variantes pré-construídas anexam sufixos de período à mesma base - SalesQ, SalesPQ, SalesPYQ, SalesTTM, SalesPTM, SalesA, SalesPY, crescimento SalesGr%TTM/SalesGr%A, por ação SalesPSQ, médias Sales5YAvg, regressões SalesRegGr%TTM. O mesmo sistema de sufixos impulsiona a maioria dos 4.463 fatores - veja references/financials.md.

Screens vs rankings. Regras de screen são testes booleanos avaliados por ação. Sistemas de ranking combinam nós de fator ponderados em uma classificação de 0–100; em um nó de ranking, "menor é melhor" controla a direção (por exemplo, PE), enquanto em FRank o equivalente é o argumento de ordenação #ASC.

Crítico: não alucine nomes

O modo de falha mais comum é inventar nomes de fatores com aparência plausível. Principais armadilhas entre categorias (cada nome "correto" verificado no dicionário de extração; tabelas por categoria estão na seção Erros Comuns de cada arquivo de referência):

Errado (não use)CorretoNota
IsNA(x) como booleanox = NAIsNA(expr1, expr2) é uma substituição de dois argumentos
Eval(IsNA(x), a, b)Eval(x = NA, a, b)mesma armadilha dentro de Eval
Eval(SetVar(@x, f), A, NA)SetVar(@x, f) * ASetVar retorna VERDADEIRO; o ramo NA é código morto
PiotroskiFPiotFScorePiotroski F-Score
EstEPSCY / EstEPSCQCurFYEPSMean / CurQEPSMeana família de estimativas legada Est... não existe
RevenueSalesitem de linha de receita
NetIncomeNetIncBXorlucro líquido antes de extraordinários
TotalAssetsAstTotativos totais
FreeCashFlowFCFfluxo de caixa livre
MarketCapMktCapcapitalização de mercado
EnterpriseValEVvalor da empresa (por ação: EVPS)
GrossMarginGMgn%margem bruta (ex.: GMgn%TTM)
CurrentRatioCurRatioliquidez corrente
DivYield%TTMYieldrendimento de dividendos não leva sufixo de período
EarnYield%TTMEarnYieldrendimentos são figuras de preço atual, sem sufixo
PEGPEGLT / PEGSTvariantes da razão PEG
AltmanZAltmanZOrigtambém AltmanZPriv, AltmanZNonManu
LatestRankRankclassificação atual em regras de compra/venda
SectorCountSecCountcontagem de posições no setor
UnivCountUnivCntcontagem do universo
BenchmarkCloseBenchClosefechamento do benchmark
Average / LnAvg / LNgrafias de funções matemáticas
Power / Pow(x, y)x^y^ é o operador de potência; Pow é o equivalente verboso
Sqrt(x) / Exp(x)x^0.5 / 2.718281828^xnão há função raiz ou exp; ^ é o operador de potência
PlusDI / MinusDIDMIPlus / DMIMinusindicadores direcionais
IndustryCodeIndCodefator de classificação

Quando estiver em dúvida sobre qualquer nome, pesquise no arquivo de referência relevante antes de escrevê-lo.

XML de sistema de ranking: sempre leia a referência primeiro

SEMPRE leia references/ranking-system-xml.md antes de gerar ou editar qualquer XML de sistema de ranking. O esquema correto NÃO é adivinhável, e versões anteriores desta skill entregaram um quebrado. Esse arquivo contém o esquema validado, orientação de direção RankType, semântica de peso de nó (incluindo quando Weight="0" é legal), um exemplo trabalhado de Penman & Pope e uma tabela de erros de fórmula conhecidos. Em particular: Weight="0" e um Weight omitido em um nó de ranking são legais, nunca um erro para corrigir - leia esse arquivo para saber como o peso é então dividido.

Início rápido da API

As credenciais vêm de Configurações da Conta P123 → API (assinatura paga necessária). Os scripts inclusos as leem das variáveis de ambiente P123_API_ID / P123_API_KEY.

import p123api

with p123api.Client(api_id='seu api id', api_key='sua api key') as client:
    try:
        # Screen por definição. Screens apenas long: regras são fórmulas simples -
        # NÃO adicione um 'type' por regra (é rejeitado para o método 'long').
        df = client.screen_run({
            'screen': {
                'type': 'stock',
                'universe': 'SP500',
                'method': 'long',
                'maxNumHoldings': 25,
                'ranking': {'formula': 'PEExclXorTTM', 'lowerIsBetter': True},
                'rules': [
                    {'formula': 'MktCap > 1000'},
                    {'formula': 'ROE%TTM > 10'},
                ],
            },
            'asOfDt': '2026-01-05',
        }, to_pandas=True)

        # Download de fatores em massa para pesquisa/ML
        df2 = client.data_universe({
            'universe': 'SP500',
            'asOfDts': ['2026-01-05'],
            'formulas': ['PEExclXorTTM', 'ROE%TTM', 'MktCap', 'Ret%Chg(252, 21)'],
            'includeNames': True,
            'precision': 4,
        }, to_pandas=True)
    except p123api.ClientException as e:
        print(e)

As respostas carregam cost e quotaRemaining - monitore-os; veja api.md → Quotas & Costs. Para documentação endpoint por endpoint, o mapa do wrapper de 44 métodos, uso do AI Factor (o asOfDt histórico deve ser um sábado) e armadilhas conhecidas (includeNodeDetails obsoleto → nodeDetails, payloads de upload via data=, o bug type por regra), leia references/api.md.

Exemplos executáveis

scripts/ contém 9 exemplos de linha de comando construídos em p123_helpers.py (instalação: pip install "p123api[pandas]" - desde p123api 3.0, pandas é um extra, não uma dependência). Todos são somente leitura, exceto 09_strategy_rebalance_dryrun.py, que só muda algo com uma flag --execute explícita mais confirmação digitada. Comece com 01_auth_check.py, depois 02_screen_run.py, 07_price_history.py (padrão para IBM, uma das três tickers nomeadas pela isenção de licença POST /data da especificação). Tabela completa e modelo de segurança: scripts/README.md.

Pontos de partida de fatores verificados por estilo

EstiloFatores/funções verificados
ValorPEExclXorTTM, Pr2BookQ, Pr2SalesTTM, Pr2FrCashFlTTM, EV2EBITDATTM, EarnYield, FCFYield
MomentumRet%Chg(252, 21), Ret%Chg(231, 21) (12-1), Pr52W%Chg, Pr52WRel%Chg, RSI(14)
QualidadeROE%TTM, ROA%TTM, GMgn%TTM, OpMgn%TTM, PiotFScore
Baixa volatilidadeTRSD1YD, PctDev(52, 5), Beta1Y (= BetaFunc(5, 52, 0))
Tamanho / liquidezMktCap, AvgDailyTot(63)
CrescimentoSalesGr%TTM, EBITDAGr%TTM, CurFYEPSMean vs tendências NextFYEPSMean

Estes são pontos de partida, não construções. Quando o usuário nomear um fator publicado - Piotroski, rentabilidade bruta Novy-Marx, accruals Sloan, Beneish, momentum 12-1, betting-against-beta, crescimento de ativos, emissão líquida de ações - leia references/factor-replication.md primeiro: ele fornece a implementação exata, a direção e escopo do nó e as armadilhas que silenciosamente constroem um fator diferente (Ret%Chg(252, 21) abrange treze meses, não 12-1; um múltiplo de preço classificado como menor-é-melhor promove empresas com prejuízo ao topo).

Regras de trabalho para esta skill

  1. Verifique cada nome de fator/função nos arquivos de referência antes de usá-lo; nunca extrapole de uma família de nomes para outra (as regras de sufixo diferem por família).
  2. Leia ranking-system-xml.md antes de qualquer trabalho com XML de ranking - sem exceções.
  3. Para nomes de parâmetros da API, api.md reflete o código-fonte do wrapper onde a especificação discorda (ex.: passe api_id/api_key como strings mesmo que a especificação tipifique apiId como inteiro).
  4. Sufixos de período: Q, PQ, PYQ, TTM, PTM, A, PY são a família principal; crescimento e sufixos estatísticos (Gr%..., RSD%..., RegEst..., ...3YAvg) existem apenas onde um ... (truncado para tradução, mas o conteúdo permanece inalterado).

Habilidades Relacionadas