image

Access unlimited bootcamps and 650+ courses

50
%OFF
Article image
Izairton Vasconcelos
Izairton Vasconcelos26/12/2024 11:35
Share

Simulação Econômica com Python: Analisando a Alta do Dólar e o Impacto nas Reservas Cambiais

  • #Matemática financeira
  • #Python

Vivemos um momento de grande apreensão no cenário econômico brasileiro. As constantes altas do dólar e a queima regular do estoque de nossas reservas cambiais pelo Banco Central, acendeu não só o sinal vermelho do perigo da inflação como também os sinais da desordem e insegurança.

Diante desse cenário, este artigo tem como objetivo apresentar um script em Python que simulará diferentes situações da alta do dólar e da queima das reservas cambiais pelo Governo Federal.

A ideia é bem simples. A partir das recentes altas do dólar e de algumas estratégias contracionistas prováveis do governo, o script retornará uma simulação indicando o quanto de estoque será queimado para conter a alta da moeda americana.

A lógica aplicada no script também poderá servir para simular eventos de capitais de giro onerosos frente aos juros pagos a terceiros pela redução de reservas financeiras. O script em Python demonstrará através de tabelas, referências visuais e textos explicativos a problemática discutida.


O Cenário Atual e o Modelo Matemático


image


Um dos principais sinais de que uma economia vai indo de mal a pior ou pelo menos apontado para o abismo é quando um governo resolve queimar suas reservas cambiais para conter a alta de outra moeda, em nosso caso o dólar, sem se importar com a verdadeira causa.

O ponto chave aparece quando o Banco Central intervém no mercado para conter a alta do dólar utilizando para isso a torra de dólares reduzindo nossas reservas cambiais.

Usaremos nesse modelo a regressão linear para definir as cotações futuras da moeda considerando as altas passadas dos últimos dias. Em seguida, utilizaremos de diferentes estratégias do governo para simular a evolução das reservas cambiais e sua queima no mercado. Além disso, ajustaremos o valor do dólar com base na estratégia e no sentimento de mercado, conceito que adotaremos como sendo outros fatores externos influenciadores do câmbio.

Criação de um Script em Python

O desenvolvimento do modelo para simular esse cenário partiu inicialmente da necessidade de prever os valores futuros do dólar, dado as constantes altas apresentadas, e o impacto nas reservas cambiais do Brasil.

Como as reservas estão sendo queimadas continuamente para acalmar o mercado e a fuga de capitais, o modelo também incluiu prováveis estratégias que poderiam justificar a queima dos dólares por parte do governo federal. Essas estratégias foram definidas como: Moderada, Agressiva, Inatividade e Padrão.

Para não ficar apenas no campo governamental, optou-se também pela inclusão de um fator que evidenciasse as interferências externas diretamente no mercado, refletindo neste, um estado otimista ou pessimista diante da evolução do dólar e da eficácia da queima de reservas.

O trecho do código que sinaliza esse entendimento está evidenciado a partir da linha 107, configurações iniciais do script, reproduzido a seguir:


# Configurações iniciais do script

dollar_values = [6.00, 6.05, 6.10, 6.15, 6.20] # Valores históricos do dólar
initial_reserves = 170 # Reservas iniciais (em bilhões de dólares)
burn_rate = 1.7 # Taxa diária de queima de reservas (em bilhões de dólares)
days_to_predict = 10 # Número de dias para previsão
strategies = ['moderada', 'agressiva', 'inatividade', 'padrão'] # Estratégias simuladas
market_sentiment = -0.5 # Sentimento de mercado: -1 (piora), 0 (neutro), 1 (melhora)
 

Por fim, o script retornará cada estratégia com um texto explicativo da discrepância entre a alta do dólar e a torra de reservas cambiais, em consonância com o sentimento do mercado de piora, melhora ou neutralidade.

O Script em Python

 

# Importando as bibliotecas necessárias
import numpy as np  # Biblioteca para manipulação de arrays numéricos
import pandas as pd  # Biblioteca para manipulação e análise de dados em formato tabular
from sklearn.linear_model import LinearRegression  # Regressão Linear para previsão do dólar futuro
import matplotlib.pyplot as plt  # Biblioteca para geração de gráficos


# Função que realiza a simulação de estratégias cambiais e gera mensagens explicativas
def simulate_with_message(dollar_values, initial_reserves, burn_rate, days_to_predict, strategy, market_sentiment):
  """
  Simula a evolução das reservas cambiais com base em diferentes estratégias
  e inclui o impacto do sentimento de mercado (market_sentiment).
  
  Parâmetros:
      dollar_values (list): Valores históricos do dólar.
      initial_reserves (float): Reservas iniciais (em bilhões de dólares).
      burn_rate (float): Taxa diária de queima de reservas (em bilhões de dólares).
      days_to_predict (int): Número de dias para previsão futura.
      strategy (str): Estratégia governamental ('moderada', 'agressiva', 'inatividade', 'padrão').
      market_sentiment (float): Sentimento de mercado (-1: piora, 0: neutro, 1: melhora).
      
  Retorna:
      tuple: (DataFrame com resultados simulados, mensagem explicativa)
  """
  # Criando o modelo de Regressão Linear para prever o dólar futuro
  X = np.array(range(len(dollar_values))).reshape(-1, 1)  # Dias passados como variável independente (X)
  y = np.array(dollar_values)  # Valores históricos do dólar como variável dependente (y)
  model = LinearRegression()  # Inicializa o modelo de Regressão Linear
  model.fit(X, y)  # Treina o modelo nos dados históricos
  future_days = np.array(range(len(dollar_values), len(dollar_values) + days_to_predict)).reshape(-1, 1)
  # Previsão de valores futuros do dólar
  predicted_dollar_values = model.predict(future_days)


  # Inicializa as reservas com o valor inicial
  reserves = [initial_reserves]
  # Combina os valores históricos do dólar
  dollar_trend = list(dollar_values)


  # Ajusta o valor do dólar com base na estratégia e no sentimento de mercado
  for day, dollar_value in enumerate(predicted_dollar_values):
      # Ajuste baseado na estratégia
      if strategy == 'moderada':
          adjusted_dollar = dollar_value * (1 + 0.001 * day)
      elif strategy == 'agressiva':
          adjusted_dollar = dollar_value * (1 - 0.002 * day)
      elif strategy == 'inatividade':
          adjusted_dollar = dollar_value * (1 + 0.003 * day)
      else:  # padrão
          adjusted_dollar = dollar_value
      
      # Ajuste adicional com base no sentimento de mercado
      adjusted_dollar *= (1 + market_sentiment * 0.01)  # Pequeno ajuste proporcional ao sentimento
      dollar_trend.append(adjusted_dollar)  # Adiciona o valor ajustado à tendência do dólar


  # Simula a evolução das reservas para cada dia futuro
  for day in range(days_to_predict):
      if strategy == 'moderada':
          burn = max(burn_rate - 0.1 * day, 0)  # Reduz a queima de reservas ao longo do tempo
      elif strategy == 'agressiva':
          burn = burn_rate * 1.5  # Intensifica a queima para conter o dólar
      elif strategy == 'inatividade':
          burn = 0  # Sem queima de reservas
      else:  # Estratégia padrão
          burn = burn_rate
      
      # Ajusta a eficácia da queima com base no sentimento de mercado
      burn *= (1 - market_sentiment * 0.1)  # Mercado positivo reduz a queima; negativo aumenta
      # Calcula o valor restante das reservas, garantindo que não fique negativo
      reserves.append(max(reserves[-1] - burn, 0))
  
  # Garante que "reserves" e "dollar_trend" tenham o mesmo comprimento
  while len(reserves) < len(dollar_trend):
      reserves.append(reserves[-1])


  # Cria um DataFrame com os resultados
  data = {
      "Day": list(range(len(dollar_trend))),  # Dias simulados
      "Dollar Value (R$)": dollar_trend,  # Valores do dólar (ajustados por estratégia)
      "Reserves (Billion USD)": reserves  # Reservas restantes
  }
  df = pd.DataFrame(data)


  # Mensagem explicativa para a estratégia usada
  if strategy == 'moderada':
      message = (
          f"Estratégia Moderada: A queima de reservas é gradualmente reduzida. "
          f"O sentimento de mercado é {'positivo' if market_sentiment > 0 else 'negativo' if market_sentiment < 0 else 'neutro'}."
      )
  elif strategy == 'agressiva':
      message = (
          f"Estratégia Agressiva: A queima de reservas é intensificada para conter o dólar. "
          f"O sentimento de mercado é {'positivo' if market_sentiment > 0 else 'negativo' if market_sentiment < 0 else 'neutro'}."
      )
  elif strategy == 'inatividade':
      message = (
          f"Estratégia de Inatividade: O governo opta por não intervir. "
          f"O sentimento de mercado é {'positivo' if market_sentiment > 0 else 'negativo' if market_sentiment < 0 else 'neutro'}."
      )
  else:
      message = (
          f"Estratégia Padrão: A queima de reservas ocorre a uma taxa fixa. "
          f"O sentimento de mercado é {'positivo' if market_sentiment > 0 else 'negativo' if market_sentiment < 0 else 'neutro'}."
      )
  
  # Retorna os dados simulados e a mensagem explicativa
  return df, message


# Configurações iniciais do script
dollar_values = [6.00, 6.05, 6.10, 6.15, 6.20]  # Valores históricos do dólar
initial_reserves = 170  # Reservas iniciais (em bilhões de dólares)
burn_rate = 1.7  # Taxa diária de queima de reservas (em bilhões de dólares)
days_to_predict = 10  # Número de dias para previsão
strategies = ['moderada', 'agressiva', 'inatividade', 'padrão']  # Estratégias simuladas
market_sentiment = -0.5  # Sentimento de mercado: -1 (piora), 0 (neutro), 1 (melhora)


# Simula cada estratégia e armazena os resultados
results_with_messages = {
  strategy: simulate_with_message(
      dollar_values, 
      initial_reserves, 
      burn_rate, 
      days_to_predict, 
      strategy, 
      market_sentiment
  )
  for strategy in strategies
}


# Exibe os resultados e as mensagens para cada estratégia
for strategy, (df, message) in results_with_messages.items():
  print(f"\n### Estratégia: {strategy.capitalize()} ###")
  print(message)
  print(df)


# Gera o gráfico de reservas cambiais por estratégia
plt.figure(figsize=(12, 8))
for strategy, (df, _) in results_with_messages.items():
  plt.plot(df["Day"], df["Reserves (Billion USD)"], marker="o", label=f"Reservas ({strategy})")


plt.title("Simulação de Reservas Cambiais com Estratégias e Sentimento de Mercado")
plt.xlabel("Dia")
plt.ylabel("Reservas (Bilhões USD)")
plt.legend()
plt.show()


# Gera o gráfico de valores do dólar por estratégia
plt.figure(figsize=(12, 8))
for strategy, (df, _) in results_with_messages.items():
  plt.plot(df["Day"], df["Dollar Value (R$)"], marker="o", label=f"Dólar ({strategy})")


plt.title("Simulação do Valor do Dólar com Estratégias e Sentimento de Mercado")
plt.xlabel("Dia")
plt.ylabel("Dólar (R$)")
plt.legend()
plt.show()
 

 

Análise das Tabelas e Gráficos

  

De posse das tabelas e gráficos gerados pelo script, verifica-se o seguinte:

 

A) Tabelas


1) Estratégia Agressiva

 

- O governo queima muitas reservas rapidamente para conter o dólar.

- A alta do dólar é a mais controlada entre todas as estratégias.

- As reservas caem de US$ 170 bilhões para aproximadamente US$ 143 bilhões em 14 dias.

- Conclui-se que a estratégia é eficaz no curto prazo, mas consome muitas reservas.

image

2) Estratégia de Inatividade

 

- O governo não intervém no mercado cambial.

- O dólar sobe mais rapidamente do que em qualquer outra estratégia.

- As reservas permanecem constantes em US$ 170 bilhões.

- Conclusão de que não há consumo de reservas, mas permite uma alta incontrolada do dólar.

image

3) Estratégia Moderada

 

- O governo reduz gradualmente a queima de reservas ao longo do tempo.

- O dólar sobe mais devagar que na inatividade, mas mais rápido que na estratégia agressiva.

- As reservas caem para aproximadamente US$ 156,8 bilhões em 14 dias.

- Conclusão de tentar equilibrar o controle do dólar e a preservação das reservas.

image

4) Estratégia Padrão

 

- O governo queima reservas a uma taxa fixa diária.

- O dólar é controlado de maneira moderada, com aumento gradual.

- As reservas caem para aproximadamente US$ 152 bilhões em 14 dias.

- A conclusão que se tira é que se oferece um controle mediano, mas consome reservas de forma consistente.

image

B) Gráficos

 

1) Reservas Cambiais com Estratégias e Sentimento de Mercado

 

O gráfico destaca o custo de cada estratégia em termos de reservas

image

2) Valor do Dólar com Estratégias e Sentimento de Mercado

 

O gráfico deixa claro que a ausência de intervenção leva ao pior cenário para o dólar.

image

Conclusão

 

O script desenvolvido em Python para simular um cenário de altas do dólar com concomitantes queimas de reservas cambiais demonstrou claramente eficiência nos resultados.

O objetivo principal do retorno dos dados para uma análise mais abrangente da situação da queima de reservas, ficou evidente nas explicações e nas imagens fornecidas.

A linguagem Python revela-se como uma excelente ferramenta gerencial, contribuindo prontamente para projetos de compreensão de valores no tempo combinados com decisões administrativas.

A técnica mais uma vez confirma como o caminho curto para solução correta. Nesse caso específico, o script demonstrou que o antitérmico da torra não é a solução definitiva do problema da alta do dólar. É como aquele doente que sabe o remédio a tomar, mas prefere um paliativo a curar-se.

 

www.linkedin.com/in/izairton-oliveira-de-vasconcelos-a1916351



 

Share
Recommended for you
Suzano - Python Developer
BairesDev - Machine Learning Practitioner
Santander Bootcamp Cibersegurança #2
Comments (0)