Software de Kardex e Estoque

Kardex Tauro

O software de gestão de estoque Kardex Tauro® foi projetado para gerenciar seu armazém ou depósito de forma eficiente e pode ser aprendido em um curto período de tempo.

O Kardex Tauro é gratuito para uso não comercial.
Não requer conexão com a internet e funciona no Windows.

Código Python: médias móveis de 20 e 50 e o cruzamento (download grátis)

Código Python: médias móveis de 20 e 50 e o cruzamento (download grátis)

Tem uma ideia que aparece em todo vídeo de mercado: quando a média dos últimos vinte dias de um preço fica acima da média dos últimos cinquenta, dizem que surgiu um sinal de compra; quando fica abaixo, um sinal de venda. Chama-se cruzamento de médias móveis e, por mais complicado que o nome soe, a conta é uma soma e uma divisão repetidas com paciência. Neste artigo você baixa um programa em Python que faz essa conta com os seus próprios preços, mostra o resultado na tela em duas tabelas organizadas e, no fim, compara tudo com a opção mais simples de todas: comprar uma vez e não mexer mais.

É para o dono de um negócio, o contador ou o encarregado de estoque que quer ver a conta com os próprios olhos, sem instalar programas novos nem pagar assinatura. O pacote vem com preços de exemplo inventados e também com o caminho para trocá-los pelos seus: um arquivo de texto com uma coluna de data e outra de preço resolve. Você não precisa saber programar para usar, e não precisa acreditar nele também: o próprio programa mostra onde a ideia falha.

⬇ Baixar o código (ZIP)

Aviso: isto é material educativo e não é uma recomendação de compra nem de venda. Os preços de exemplo são inventados e os dados históricos aparecem só para praticar. Um resultado passado não garante nada no futuro; antes de investir, consulte um profissional autorizado.

O que vem no ZIPPara que serve
medias_y_cruces.pyO programa: lê os preços, calcula as duas médias, marca os cruzamentos e faz a comparação final.
datos/precos.csvCento e oitenta dias de preços de exemplo, inventados, para o programa ter com o que trabalhar.
salida_ejemplo.txtA saída real do programa, exatamente como sai, para você comparar com o que aparecer na sua tela.
LEIAME.mdAs instruções escritas, passo a passo, caso este artigo deixe algo de fora.

O arquivo de preços: duas colunas e mais nada

O programa lê um arquivo de texto com extensão .csv. Qualquer planilha abre esse formato, e o editor de texto simples também. Ele só precisa de duas colunas, com os nomes escritos na primeira linha:

ColunaO que vai nela
dataO dia, escrito no formato ano-mês-dia, por exemplo 2026-01-02.
fechamentoO preço de fechamento desse dia, com ponto decimal e duas casas, por exemplo 99.94.

A primeira linha é o cabeçalho e não se mexe nela. Cada linha seguinte é um dia: primeiro a data, depois uma vírgula e depois o preço. Se o arquivo trouxer colunas a mais, o programa as ignora; se faltar uma dessas duas, ele para e avisa na tela, sem inventar número. Você pode exportar seus preços do Excel com a opção salvar como CSV, ou digitá-los à mão no editor de texto. Para usar os seus dados, troque o arquivo que está dentro da pasta datos pelo seu, com o mesmo nome e na mesma pasta, e rode o programa de novo.

De onde vêm os números reais: as séries históricas usadas para praticar nesta família de artigos vêm do CoinGecko, o serviço aberto de dados de criptomoedas cujo endereço é api.coingecko.com, e do índice SP500 do Reserva Federal de St. Louis, publicado em fred.stlouisfed.org/series/SP500. Os dois foram baixados em 2026-09-25 e aparecem aqui apenas como dados históricos de prática. Nesta peça o arquivo que viaja dentro do ZIP é inventado de propósito: serve para qualquer pessoa repetir o exercício sem depender de download nem de internet.

O que o programa faz

  1. Abre o arquivo de preços da pasta datos e lê os cento e oitenta dias que vêm de exemplo.
  2. Calcula a média dos últimos vinte dias para cada data. Essa é a média curta: mexe rápido porque olha só o último mês de negociação.
  3. Calcula a média dos últimos cinquenta dias. Essa é a longa: mexe devagar e mostra a tendência de fundo.
  4. Compara as duas dia a dia. No dia em que a curta passa de baixo para cima da longa, ele escreve um sinal de compra. No dia em que passa de cima para baixo, escreve um sinal de venda.
  5. Salva dois arquivos na pasta salida: medias.csv com as duas médias de cada dia e senales.csv com cada cruzamento encontrado, com sua data e seu preço.
  6. No fim separa um capital imaginário de mil unidades, segue os sinais e compara isso com comprar uma única vez e nunca vender. É aí que o programa diz, sem enfeite, qual das duas formas terminou na frente e por quanto.

Como executar

Não há nada para instalar além do Python. Baixe a versão 3.11 ou superior no site oficial do Python e deixe as opções que já vêm marcadas. Depois descompacte o ZIP numa pasta cômoda, a área de trabalho serve. Abra o terminal do sistema, entre nessa pasta e escreva o nome do programa:

python medias_y_cruces.py

No Windows o terminal se chama Prompt de Comando ou PowerShell; no Mac e no Linux é o Terminal. O programa usa somente a biblioteca padrão do Python: não há pandas para instalar, nem numpy, nem nada pago. Leva menos de um segundo e não precisa de internet, porque trabalha com o arquivo de preços que já está dentro do ZIP.

O código, explicado

O programa começa escrevendo num único lugar tudo o que você pode ajustar. As duas janelas das médias, quantos dias aparecem na tela e o dinheiro imaginário do exemplo ficam no topo, com nomes claros. Se você quiser testar uma média de trinta e cinco dias, muda um número e pronto:

# As duas janelas das médias, a tabela da tela e o dinheiro do exemplo
VENTANA_CORTA = 20                                  # média dos últimos 20 dias: é a curta, reage rápido
VENTANA_LARGA = 50                                  # média dos últimos 50 dias: é a longa, mostra a tendência de fundo
FILAS_TABLA = 10                                    # quantos dias aparecem na tela
CAPITAL_INICIAL = Decimal("1000.00")                # dinheiro imaginário do exemplo, para comparar as duas formas
CENTAVO = Decimal("0.01")

Ali dentro há dois detalhes que evitam muita dor de cabeça. Primeiro, preços e dinheiro são tratados com Decimal, o tipo de dado que os bancos usam: com os decimais binários de sempre, somar centenas de preços vai arrastando erros de centavos até a tabela não fechar. Segundo, todos os caminhos são montados com pathlib a partir da pasta do próprio arquivo, então o programa se comporta igual no Windows, no Linux e no Mac sem mexer numa linha.

A média móvel simples é exatamente o que o nome diz: a média dos últimos N fechamentos. A função recebe a lista de fechamentos, o dia que está sendo olhado e o tamanho da janela; corta o pedaço da lista que pertence àquela janela e divide. Enquanto não houver dias suficientes para encher a janela, ela devolve vazio em vez de inventar um número:

def media_movil(cierres: list, indice: int, ventana: int):
    """Média móvel simples: média dos últimos N fechamentos até o dia indicado."""
    if indice + 1 < ventana:
        return None                    # ainda não há dias suficientes para esta média
    return redondear(sum(cierres[indice - ventana + 1: indice + 1], Decimal("0")) / ventana)

Esse costume de devolver vazio é o que evita o erro clássico desse tipo de conta: as primeiras linhas da tabela saem sem média, porque ainda não há o que calcular, e isso está certo. A média de cinquenta dias só começa a existir no dia cinquenta, nunca antes.

Aqui está o coração do assunto. O programa percorre o arquivo dia a dia e compara onde as duas médias estão hoje contra onde estavam ontem. Só dois casos interessam:

def detectar_cruces(filas: list) -> list:
    """Procura o dia em que a média curta cruza a longa: para cima é compra e para baixo é venda."""
    senales = []
    for indice in range(1, len(filas)):
        anterior, actual = filas[indice - 1], filas[indice]
        if None in (anterior["media20"], anterior["media50"],
                    actual["media20"], actual["media50"]):
            continue                   # enquanto as duas médias não existirem, não se pode falar de cruzamento
        if actual["media20"] > actual["media50"] and anterior["media20"] <= anterior["media50"]:
            tipo = "Compra"
        elif actual["media20"] < actual["media50"] and anterior["media20"] >= anterior["media50"]:
            tipo = "Venda"
        else:
            continue
        senales.append({"tipo": tipo, "fecha": actual["fecha"], "cierre": actual["cierre"],
                        "media20": actual["media20"], "media50": actual["media50"]})
    return senales

O importante é que o cruzamento não se enxerga olhando um único dia, mas o par de dias: hoje a curta está em cima e ontem estava embaixo. Essa condição se escreve com quatro comparações e uma subtração de posições, nada mais. E há um detalhe fino: enquanto as duas médias não existirem, o programa pula o dia em vez de comparar com um buraco.

No fim chega a parte incômoda, a que quase nenhum vídeo mostra: comparar. O programa pega o último preço do arquivo, calcula quanto valeria o capital se tivesse seguido os sinais e quanto valeria se tivesse comprado no dia do primeiro sinal e nunca tivesse vendido. As duas rentabilidades são arredondadas para duas casas, para poderem ser comparadas em pé de igualdade:

    ultimo = filas[-1]["cierre"]
    final_senal = redondear(unidades * ultimo) if unidades > 0 else capital
    # comprar e manter: entra na data do primeiro sinal e nunca mais vende
    arranque = senales[0] if senales else filas[0]
    final_mantener = redondear(CAPITAL_INICIAL * ultimo / arranque["cierre"])
    return {
        "operaciones": operaciones,
        "final_senal": final_senal,
        "final_mantener": final_mantener,
        "rent_senal": redondear((final_senal / CAPITAL_INICIAL - 1) * 100),
        "rent_mantener": redondear((final_mantener / CAPITAL_INICIAL - 1) * 100),
        "arranque": arranque,
    }

Esse último bloco é o que transforma o exercício em algo honesto. O programa não se gaba: calcula as duas formas e mostra qual ganhou, mesmo quando a vencedora não é a estratégia de sinais.

O que você vai ver na tela

Ao rodar, a tela mostra primeiro o aviso legal, depois os últimos dez dias com seu fechamento e suas duas médias, em seguida os sinais encontrados e, por último, a comparação. Um trecho real da saída é este:

ÚLTIMOS DIAS (10)
===============================================
Data         Fechamento    Média 20    Média 50
-----------------------------------------------
2026-06-21       120,85      120,12      115,92
2026-06-22       116,96      119,99      116,22
2026-06-23       118,49      119,76      116,53
2026-06-24       116,43      119,40      116,76
2026-06-25       117,39      119,13      117,00
2026-06-26       115,28      118,76      117,19
2026-06-27       115,53      118,42      117,37
2026-06-28       117,18      118,17      117,56
2026-06-29       116,97      118,11      117,75
2026-06-30       117,24      118,09      117,93
SINAIS ENCONTRADOS: 2
===========================================================
Sinal       Data         Fechamento    Média 20    Média 50
-----------------------------------------------------------
Venda       2026-03-16        97,97      107,93      107,95
Compra      2026-04-29       100,66       97,91       97,76
-----------------------------------------------------------
  Cruzamento para cima: a curta passa acima da longa (sinal de compra).
  Cruzamento para baixo: a curta passa abaixo (sinal de venda).

E a parte que mais interessa, o fecho da comparação:

SINAIS CONTRA COMPRAR E MANTER
================================================================================
  Capital inicial: 1.000,00
  Comprar e manter entra em: 2026-03-16 a um preço de 97,97
  Operações da estratégia de sinais: 1
    2026-04-29  Compra   100,66
  Capital final seguindo os sinais: 1.164,71 (16,47 %)
  Capital final comprando e mantendo: 1.196,69 (19,67 %)
  GANHOU comprar e manter, por: 31,98
  Nota honesta: o ganhador depende do trecho medido e do primeiro sinal; com
  outros preços pode ganhar a outra forma. Um resultado passado não garante
  nada.

A comparação, sem enfeite: aqui ganhou comprar e manter

Vamos à verdade do exercício, porque um programa que só mostra o lado bonito não vale nada. Com estes cento e oitenta dias de preços inventados, a estratégia de sinais terminou com 1.164,71 e comprar e manter terminou com 1.196,69. Ganhou comprar e manter, por 31,98. Em rentabilidade, dezenove vírgula sessenta e sete por cento contra dezesseis vírgula quarenta e sete por cento: a forma mais simples tirou quase dois pontos e meio da forma que parece mais esperta.

Por que a estratégia perde se chegou a detectar os dois cruzamentos? Por duas razões fáceis de ver. A primeira: a estratégia fica fora do mercado parte do tempo. Entre o sinal de venda de meados de março e o sinal de compra do fim de abril, o capital ficou parado enquanto o preço fazia o seu movimento, e esse buraco não se recupera sozinho. A segunda: o trecho medido sobe. Quando um preço sobe quase sem pausa, qualquer regra que tire você do mercado por uns dias perde para ficar sentado. Com outro trecho, com outros preços e com outro primeiro sinal pode ganhar a outra forma, e isso o próprio programa diz na sua nota honesta.

Por isso vale dizer bem claro: este programa serve para entender como um sinal é calculado, como é conferido e como uma estratégia é medida contra a alternativa mais simples. Não serve para ganhar dinheiro nem para adivinhar o futuro. Quem termina a leitura sabendo disso sai ganhando muito mais do que com qualquer promessa.

Erros comuns e dicas

  • O arquivo com o nome errado: o programa procura exatamente datos/precos.csv. Se você chamar de precos2.csv, ele para e avisa. Renomeie o seu arquivo ou edite essa linha.
  • Ponto contra vírgula: os arquivos de exemplo usam ponto decimal, como nos sistemas de faturamento, e as tabelas da tela aparecem com vírgula, porque o programa formata no padrão local. Os dois são o mesmo número.
  • Menos linhas que a janela longa: com menos de cinquenta dias o programa roda, mas não acha nenhum cruzamento e a tabela sai meio vazia. Carregue alguns meses.
  • Datas fora de ordem: o arquivo deve ir do dia mais antigo para o mais novo. Se estiverem invertidas, as médias saem sem sentido.
  • Linhas em branco no fim: uma linha vazia corta a leitura. Abra o arquivo e apague as linhas sobrando.
  • Não mude a pasta de saída: o programa cria salida/medias.csv e salida/senales.csv sozinho. Se você abrir no Excel e deixar aberto, a execução seguinte pode falhar na hora de escrever.

Quando isto não basta

Este programa é uma roda de treinamento. Lê um arquivo, calcula duas médias e mostra uma tabela; não leva a ficha de estoque, não sabe quanto você pagou por cada item, não lida com vários depósitos e não fecha o mês para você. A ficha de estoque, em palavras simples, é o registro de tudo o que entra e sai, com o seu custo.

Para um negócio pequeno que ainda vive em planilhas, o Kardex Tauro é um programa grátis que junta estoque, compras, vendas e ficha de estoque num só lugar, com relatórios que podem ser entregues ao contador. O software é o que se usa quando o Excel e um script já não bastam; este código em Python é o que se usa para entender a conta que existe por trás dos sinais antes de acreditar em qualquer gráfico.

Aviso: lembre-se de que isto é material educativo e não é uma recomendação de compra nem de venda. Os preços de exemplo são inventados, os dados históricos aparecem só para praticar e um resultado passado não garante nada no futuro; consulte um profissional autorizado antes de investir. A fonte dos dados reais está citada acima, com o seu endereço, e o ZIP traz este mesmo aviso por escrito dentro do arquivo de instruções.

⬇ Baixar o código (ZIP)

Baixe o pacote, abra o arquivo de preços, troque pelos seus números e rode de novo. Ver os seus próprios dados passarem pelas duas médias ensina mais do que qualquer vídeo, e a comparação honesta do final é a parte que quase ninguém chega a ver.

Compartilhar
Link copiado
Microsoft Store da Microsoft StoreBaixar grátis
Chatea por WhatsApp