CryptoPortfolio

pequena aplicação para ir acompanhando a evolução de um portfolio de activos de criptomoedas

"historico_preco.csv" -> ficheiro CSV com dados historicos diarizados de um activo.

data,moeda,simbolo,preco_abertura,preco_maximo,preco_minimo,preco_fecho

<data>              -   data a que se referem os dados. formato: dd-mm-aaaa
<moeda>             -   nome do activo (ex: bitcoin)
<simbolo>           -   simbolo do activo (ex: btc)
<preco_abertura>    -   preco de abertura do activo para esse dia (em EUR)
<preco_maximo>      -   preco máximo atingido pelo activo nesse dia (em EUR)
<preco_minimo>      -   preco minimo atingido pelo activo nesse dia (em EUR)
<preco_fecho>       -   preco de fecho do activo nesse dia (em EUR)

"portfolio.csv" - ficheiro CSV com informação sobre os movimentos de um activo.

data,moeda,tipo_movimento,quantidade,preco_movimento

<data>              -   data a que se refere o movimento
<moeda>             -   activo a que se refere o movimento
<tipo_movimento>    -   tipo do movimento ("compra", "venda")
<quantidade>        -   quantidade do activo a que se refere o movimento
<preco_movimento>   -   preco a que foi efectuado o movimento (preco activo * quantidade comprada)

exemplo: 02-03-2024,bitcoin,compra,0.05,2978.024

este exemplo indica-nos que no dia 02-03-2024 foi comprado 0.05BTC com um custo total de 2978.024EUR

de notar que o preco do movimento é o valor pago por 0.05BTC, não o preco de mercado de 1un de BTC nesta data.

podemos calcular qual o preco de compra por unidade de BTC deste movimento simplesmente:

<preco_movimento> / <quantidade> = 59560.48EUR

consultando na coingecko o preco de mercado de bitcoin à data de 02-03-2024 (cerca de 57560.483EUR), vemos que foi pago um premium de: ( ( 59560.48 / 57560.483 ) - 1 ) * 100 = 3.47%

Documentação API

https://docs.coingecko.com/v3.0.1/reference/introduction

API_KEY = "CG-K5RS5VXsdFDip2UvY3z8VjQP"

Sidequest - criação de wrapper para a API Coingecko

sim sim, já existe uma (muito bem feita, por sinal!) que pode ser descarregada aqui.

esta é a minha tentativa! :D

Padrões a adoptar

Nomes de funções e parâmetros das chamadas API

usar como nome das funções e dos parâmetros os mesmos nomes usados pela API da CoinGecko,por exemplo:

documentação:
    'Coin OHLC Chart by ID'
endpoint: 
    https://api.coingecko.com/api/v3/coins/{id}/ohlc
parametros:
    de caminho:
      id (obrigatorio)
    de consulta:    
      vs_currencies (obrigatorio)
      days (obrigatorio)
      precision

função:
    coin_ohlc_chart_by_id()
parametros:
    id
    vs_currencies
    days
    precision

Nota: na situação em que o nome do parâmetro for um termo reservado, renomear com nome apropriado e comentar essa alteração

Parâmetros obrigatórios e vazios

nas chamadas de API com parametros obrigatorios, a função deve gerar erro quando o parametro não for passado como argumento ou o tipo de objecto for diferente do esperado

quando houver parametros 'vazios' passados como argumentos, estes não devem ser incluidos no URL de consulta. ( implementado na função API() )

Dados devolvidos por chamadas API

url - url completo do endpoint

codigo - codigo de erro devolvido pelo modulo requests

dados - dados devolvidos pela chamada, em formato dict[Any, Any]

Documentação Public API

endpoints Public API Demo V3.0.1

- implementado

- não implementado

📖 - documentado

  • ping

    • check api server status
  • simple

    • coin price by ids

    • coin price by token addresses

    • supported currencies list

  • coins

    • coins list (id map)

    • coins list with market data

    • coin data by id

    • coin tickers by id

    • coin historical data by id

    • coin historical chart data by id

    • coin historical chart data within time range by id

    • coin ohlc chart by id

  • contract

    • coin data by token address

    • coin historical chart data by token address

    • coin historical chart data within time range by token address

  • asset platforms

    • assets platforms list (id map)
  • categories

    • coins categories list (id map)

    • coins categories list with market data

  • exchanges

    • exchanges list with data

    • exchanges list (id map)

    • exchange data by id

    • exchange tickers by id

    • exchange volume chart by id

  • derivatives

    • derivatives tickers list

    • derivatives exchange list with data

    • derivatives exchange data by id

    • derivatives exchanges list (id map)

  • NFTs (beta)

    • nfts list (id map)

    • nfts collection data by id

    • nfts collection data by contract address

  • exchange rates

    • btc-to-currency exchange rates
  • search

    • search queries
  • trending

    • trending search list
  • global

    • crypto global market data

    • global de-fi market data

  • companies (beta)

    • public companies holdings
Documentação Pro API

endpoints Pro API V3.1.1

- implementado

- não implementado

📖 - documentado

  • key

    • API usage
  • coins

    • top gainers & losers

    • recently added coins

    • coin ohcl chart within time range by id (enterprise only)

    • circulating supply chart by id (enterprise only)

    • total supply chart by id (enterprise only)

    • total supply chart within time range by id (enterprise only)

  • asset platforms

    • token lists by asset platform id (enterprise only)
  • exchanges

    • exchange volume chart within time range by id (enterprise only)
  • NFTs (beta)

    • nfts list with market data

    • nfts collection historical chart data by id

    • nfts collection tickers by id

  • global

    • global market cap chart data
Description
No description provided
Readme 1.9 MiB
Languages
Python 100%