Código Python: IFS de 14 períodos do zero (download grátis)

Código Python: IFS de 14 períodos do zero (download grátis)
Todo negócio tem um preço que importa: a mercadoria comprada para revender, a matéria-prima, o produto do concorrente, a moeda em que o cliente paga. Quando esse preço se mexe muito, a pergunta aparece sozinha: subiu muito ou pouco nas últimas semanas? O índice de força relativa, o IFS, responde com um número só: mede se o preço subiu muito ou pouco nos últimos dias, numa escala de zero a cem. Neste texto você vê o que existe por trás desse número, o que significam sobrecompra e sobrevenda, e leva um programa em Python que calcula tudo do zero, sem biblioteca de análise técnica, para rodar na sua máquina e ver a tabela no console.
O código é para o dono de negócio curioso que quer entender o que os analistas falam, para o contador que lê relatórios e para o almoxarife que acompanha o preço da mercadoria. Não é preciso ser programador: o pacote traz o código comentado linha por linha e um arquivo de instruções.
⬇ Baixar o código (ZIP)Aviso: este é material educativo: não é uma recomendação de compra nem de venda. Os preços de exemplo do pacote são inventados e os dados históricos são citados apenas para praticar o cálculo. Um resultado passado não garante nada no futuro. Antes de decidir qualquer coisa com o seu dinheiro, consulte um profissional autorizado.
O que vem no pacote
| Arquivo | Para que serve |
|---|---|
rsi_desde_cero.py | O programa, comentado linha por linha, escrito apenas com a biblioteca padrão do Python. |
datos/precos.csv | Cento e oitenta fechamentos diários de exemplo, preços inventados, para praticar o cálculo. |
salida_ejemplo.txt | A saída real que você deve obter ao rodar, para comparar com a sua. |
LEIAME.md | As instruções escritas: o que faz, como se roda e o que significa cada resultado. |
salida/rsi.csv | O arquivo gerado na execução: data, fechamento, alta, baixa e IFS de cada dia. |
O que o programa faz, passo a passo
- Lê o arquivo
datos/precos.csv, que traz o fechamento de cada dia. - Compara o fechamento de cada dia com o do dia anterior e separa o que subiu do que caiu. Um dia nunca entra nas duas colunas ao mesmo tempo.
- Calcula duas médias de catorze dias: uma das altas e outra das baixas. Essas duas médias são a matéria-prima do índice.
- Transforma as duas médias num único número entre zero e cem. Quando as altas pesam mais que as baixas, o número sobe em direção a cem; quando as baixas pesam mais, ele cai em direção a zero.
- Aplica a suavização de Wilder, que dá mais peso ao dia mais recente sem esquecer o histórico.
- Imprime no console as últimas quinze linhas com seu IFS e conta quantos dias ficaram acima de setenta (sobrecompra) e quantos abaixo de trinta (sobrevenda).
- Salva tudo em
salida/rsi.csv, um arquivo que abre em qualquer planilha sem conversão.
Como rodar
Basta ter o Python 3.11 ou mais novo instalado (o download comum do python.org, o mesmo para Windows, Mac e Linux). Descompacte o ZIP numa pasta, abra o terminal nessa pasta e escreva o nome do programa:
python rsi_desde_cero.py
Não há nada mais para instalar: o programa usa só a biblioteca padrão do Python, então não aparece aquela lista enorme de pacotes que assusta. Se a máquina responder que o Python não é reconhecido, tente python3 ou instale de novo marcando a caixa que coloca o Python no PATH. Ao terminar, o programa grava o resultado em salida/rsi.csv e mostra o aviso educativo outra vez.
O código, explicado
Estas são quatro partes reais do programa, copiadas exatamente como vêm no arquivo do pacote. Abaixo de cada uma explicamos o que ela faz, em palavras simples.
1. Os caminhos. O programa descobre primeiro a pasta onde ele mesmo mora. Por isso funciona igual se você o abre pela área de trabalho ou pelo terminal, e não depende de onde você está quando roda:
# # A pasta deste mesmo arquivo: assim o programa roda de qualquer lugar
BASE = Path(__file__).resolve().parent
ENTRADA = BASE / "datos" / "precos.csv" # # preços de exemplo que viajam dentro do ZIP
SALIDA = BASE / "salida" / "rsi.csv" # # resultado do IFS, pronto para abrir no Excel
2. A fórmula. Aqui está o coração do índice. A força relativa é a média das altas dividida pela média das baixas, e o IFS transforma essa razão numa escala de zero a cem. Se nessas duas semanas não houve nenhuma baixa, o índice vale cem; se não houve nem alta nem baixa, vale cinquenta. Nada disso olha para amanhã: só resume o que já passou.
def rsi_de(media_subidas: Decimal, media_bajadas: Decimal) -> Decimal:
"""Transforma as duas médias (altas e baixas) no valor do IFS, entre 0 e 100."""
if media_bajadas == 0:
# # Sem baixas na média o IFS é 100; sem altas nem baixas é 50
return Decimal("100.00") if media_subidas > 0 else Decimal("50.00")
fuerza = media_subidas / media_bajadas
return redondear(Decimal("100") - Decimal("100") / (Decimal("1") + fuerza))
3. A suavização de Wilder. A primeira média é uma média simples dos catorze primeiros dias; daí em diante o programa usa (anterior vezes treze, mais o dia novo) dividido por catorze. Esse detalhe é o que separa o IFS clássico de uma média móvel comum: o dado mais recente pesa um pouco mais que os antigos.
# # Suavização de Wilder: a primeira média é simples e depois (anterior * 13 + novo) / 14
media_subidas = sum((f["subida"] for f in filas[1:PERIODOS + 1]), Decimal("0")) / PERIODOS
media_bajadas = sum((f["bajada"] for f in filas[1:PERIODOS + 1]), Decimal("0")) / PERIODOS
4. A parte honesta. O programa imprime a leitura em palavras e diz sem enfeite: o IFS descreve o que JÁ passou, isto é, quanto o preço subiu e caiu nos últimos dias. Ninguém pode saber se amanhã sobe ou cai. Um índice baixo não é ordem de compra, nem um índice alto é ordem de venda: são etiquetas para descrever o passado recente.
print(" O IFS mede o que JÁ passou: quanto o preço subiu e caiu nos últimos dias.")
print(" Ninguém pode saber se amanhã sobe ou cai: o passado não garante o futuro.")
O que você vê na tela
Com os dados de exemplo o programa imprime as últimas quinze linhas. Este é um trecho literal da saída real, com os últimos dias do arquivo:
Data Fechamento Alta Baixa IFS --------------------------------------------------- 2026-06-23 118,49 1,53 0,00 50,19 2026-06-24 116,43 0,00 2,06 45,05 2026-06-25 117,39 0,96 0,00 47,74 2026-06-26 115,28 0,00 2,11 42,79 2026-06-27 115,53 0,25 0,00 43,54 2026-06-28 117,18 1,65 0,00 48,33 2026-06-29 116,97 0,00 0,21 47,77 2026-06-30 117,24 0,27 0,00 48,59 ---------------------------------------------------
No fim ele resume o exercício inteiro: dos cento e sessenta e seis dias que têm valor de IFS, trinta e um ficaram em sobrecompra, cinco em sobrevenda e cento e trinta na zona neutra. No último dia do arquivo o IFS foi 48,59, ou seja, nem um extremo nem o outro.
Vale explicar os dois conceitos com calma. Sobrecompra não quer dizer que o preço está caro nem que vai cair: quer dizer que, naquelas duas semanas, as altas pesaram muito mais que as baixas, a ponto de o índice passar de setenta. Sobrevenda é o espelho: as baixas pesaram muito mais e o índice ficou abaixo de trinta. As duas expressões dizem que houve muito movimento em pouco tempo, não são sinais que anunciem amanhã. No exemplo, mais ou menos um dia em cada cinco com índice terminou num extremo: um preço agitado passa boa parte da vida nos extremos, e isso também é informação.
Erros comuns e dicas
- As primeiras catorze linhas não têm IFS, e isso não é erro. O índice precisa de catorze dias de história para começar, por isso o primeiro valor aparece na linha quinze.
- O arquivo não é encontrado. Quase sempre é porque o terminal foi aberto em outra pasta. O programa procura
datos/precos.csvao lado dele mesmo, então basta abrir o terminal dentro da pasta descompactada. - Os preços são tratados com decimais exatos. O programa usa a classe Decimal e não números de ponto flutuante: assim o arredondamento não arrasta aqueles erros minúsculos que aparecem ao somar decimais binários.
- Mudar os dados muda o resultado, e essa é a graça. Troque o arquivo de preços pelo seu e o IFS se recalcula sozinho. Mantenha as mesmas colunas e a mesma ordem de datas, da mais antiga para a mais recente.
- Não leia o índice isolado. Duas séries bem diferentes podem dar o mesmo IFS por motivos opostos: uma que sobe devagar todos os dias e outra que quica com força. O número resume movimento, não causa.
- Datas seguidas, sem buracos. Se você apagar feriados ou fins de semana o programa não reclama, mas a média muda de sentido. Use séries completas.
- Não brigue com o console. Se a tabela parecer torta, mude o tamanho da janela ou a fonte; o arquivo
salida/rsi.csvguarda os números completos.
Quando isso não basta
Este programa responde a uma pergunta bem estreita a partir de um arquivo de preços. Quando o negócio cresce, o problema deixa de ser um indicador e passa a ser o estoque inteiro: o que entrou, o que saiu, quanto custou cada unidade, quanto vale o depósito hoje e quem mexeu em quê. Aí a planilha e os scripts soltos já não bastam: é aí que entra o Kardex Tauro, um programa gratuito que organiza o estoque, a ficha de estoque e os custos de uma pequena empresa, sem você montar fórmula nenhuma. A ideia é simples: o script serve para aprender e experimentar; o software serve para o dia a dia do negócio. Você encontra o programa no site do blog.
Se você quiser usar os seus próprios preços
Troque o arquivo datos/precos.csv pelo seu e rode o programa de novo. O formato é mínimo: uma linha de cabeçalho e uma linha por dia, separadas por vírgulas, com as datas da mais antiga para a mais recente.
| Coluna | O que vai nela |
|---|---|
data | O dia no formato ano-mês-dia, em ordem cronológica. |
fechamento | O preço de fechamento desse dia. |
Os dados reais que vêm no pacote são históricos de prática e saem de duas fontes públicas: CoinGecko (api.coingecko.com) para o bitcoin, e o Federal Reserve Bank of St. Louis, série SP500, https://fred.stlouisfed.org/series/SP500. Os dois foram baixados em 2026-09-25 e são citados só para praticar o cálculo, nunca para julgar o mercado. O programa não precisa de site nenhum para funcionar: os dados viajam dentro do ZIP.
Aviso: repetimos porque importa: este é material educativo e não é uma recomendação de compra nem de venda. A fonte dos dados reais está citada acima, com o endereço à vista, e o pacote leva esse mesmo aviso por escrito no arquivo de instruções. Nenhum resultado do passado garante nada no futuro; consulte um profissional autorizado antes de investir.
⬇ Baixar o código (ZIP)Baixe o pacote, rode com os seus próprios números e compare a saída com a que este artigo mostra. Aprender com os seus dados, calculadora na mão, é o jeito mais rápido de entender o que um indicador diz e o que ele não diz. Se ajudar, passe adiante para o seu contador ou para quem cuida do depósito.