Skip to main content

Add your description here

Project description

📦 Enode Quant SDK

Author: Oscar Thiele Serrano Context: ESADE ENODE Association – Quant Finance Team (student quant fund)

A lightweight, beginner-friendly Python SDK for accessing Enode’s internal market data (stocks, options, and candles) stored in our AWS RDS PostgreSQL database.

This library is for our team: it standardises how we fetch data for research, prototyping, and strategy development.


🧭 Overview

The Enode Quant SDK lets researchers work with market data using simple Python functions instead of SQL.

Example:

get_stock_quotes("AAPL")
get_option_contracts("AAPL", option_type="call")
get_stock_candles("AAPL")

The SDK provides:

High-level Python functions for stocks, options, and candles

A built-in CLI for authentication (enode login)

Secure local credential storage

SQL query builders (users never write SQL)

Optional pandas DataFrame output

Clean error handling and a simple API surface

Designed to be usable by both beginners and more advanced quants in the ENODE team.

🌳 Project Structure

enode_quant/ ├── api/ # High-level data access │ ├── candles.py # Candle/OHLCV helpers │ ├── options.py # Option contracts and quotes │ └── stocks.py # Stock quotes and helpers ├── cli/ # Authentication CLI │ ├── login.py │ ├── logout.py │ ├── main.py # Defines the enode CLI entrypoint │ └── whoami.py ├── client.py # Sends SQL → API Gateway → Lambda → RDS ├── config.py # Loads/stores ~/.enode/credentials ├── errors.py # Custom exception types ├── sql/ # SQL query builders ├── utils/ # DataFrame helpers, validation ├── pyproject.toml └── uv.lock

🔐 Authentication & Credentials

Each team member authenticates once using the CLI:

enode login

You will be prompted for:

API URL (our API Gateway endpoint)

API Key (hidden input)

Credentials are stored securely in:

~/.enode/credentials

Check the current login:

enode whoami

Log out:

enode logout

This keeps our fund’s data secure while staying simple for everyone.

🧪 Quick Start

  1. Install

From PyPI :

pip install enode-quant

or

uv add enode-quant #if using uv (recommended)
  1. Fetch Stock Quotes
from enode_quant.api.stocks import get_stock_quotes

df = get_stock_quotes(
    symbol="AAPL",
    start_date="2024-01-01",
    end_date="2024-02-01",
    limit=200,
    as_dataframe=True,
)

print(df.head())
  1. Fetch Option Contracts
from enode_quant.api.options import get_option_contracts

contracts = get_option_contracts(
    symbol="AAPL",
    option_type="call",         # "put" or "both"
    expiration_before="2025-12-01",
    as_dataframe=True,
)

print(contracts.head())
  1. Fetch Candles (OHLCV)
from enode_quant.api.candles import get_stock_candles

candles = get_stock_candles(
    symbol="AAPL",
    resolution="1D",            # depends on how we store data
    start_date="2024-01-01",
    end_date="2024-02-01",
    limit=200,
    as_dataframe=True,
)

print(candles.head())

All high-level functions support flexible filters, such as:

symbol or stock_id

start_date and end_date

option_type (call / put / both)

expiration windows

resolution (for candles)

limit

as_dataframe (True/False)

🧱 How the SDK Works (Short Version)

When you call something like:

get_stock_quotes("AAPL")

internally the SDK:

Loads your credentials from ~/.enode/credentials

Builds a safe SQL query (using the sql helpers)

Sends the query to API Gateway via HTTP

API Gateway triggers the Lambda DB worker

Lambda executes the query on PostgreSQL (RDS)

The result is returned as JSON and (optionally) converted into a pandas DataFrame

Errors are mapped to clear Python exceptions:

MissingCredentialsError

AuthenticationError

APIConnectionError

ServerError

So researchers don’t have to debug HTTP or SQL directly.

🧰 Available Modules Stocks (enode_quant.api.stocks)

get_stock_quotes(...)

Options (enode_quant.api.options)

get_option_contracts(...)

get_option_quotes(...)

Candles (enode_quant.api.candles)

get_stock_candles(...)

Core

run_query(sql) – low-level query runner (normally not needed by beginners)

sql_literal(...) – helper for building safe SQL values

apply_date_filters(...) – shared date filter helper

CLI

enode login

enode whoami

enode logout

🎯 Design Principles (for the ENODE Quant Team)

Beginner-friendly – new members can get data with just a few lines of Python

Flexible – advanced users can control filters and parameters

Safe – validated inputs and no raw SQL from users

Extensible – easy to add new functions as our database grows

Planned future extensions (not implemented yet, but on the roadmap):

A backtesting module that uses the same data layer

A quant-finance utilities module (risk, stats, indicators) for research

Problem Error Solution
Not logged in MissingCredentialsError Run enode login
Wrong API key AuthenticationError Re-run enode login
Bad URL / network APIConnectionError Check URL and connectivity
Schema mismatch ServerError Update SDK or fix the query

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

enode_quant-0.1.0.tar.gz (20.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

enode_quant-0.1.0-py3-none-any.whl (25.4 kB view details)

Uploaded Python 3

File details

Details for the file enode_quant-0.1.0.tar.gz.

File metadata

  • Download URL: enode_quant-0.1.0.tar.gz
  • Upload date:
  • Size: 20.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for enode_quant-0.1.0.tar.gz
Algorithm Hash digest
SHA256 68c29a5336678fa327e8a8c01845a6e09af02a4f03e0818f1eda903f1ce21e9c
MD5 b53f97f4157c95f98db5201227516eac
BLAKE2b-256 938ad97d3375ef2b8a32e33ed1bc9bc64e6f9cd59b1a48d94f63208b0be5dc7d

See more details on using hashes here.

File details

Details for the file enode_quant-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: enode_quant-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 25.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for enode_quant-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e8a0c52dfda79c7e1ddef9fc349fcb98bb65801cfde3870ff17e2c54fb00f054
MD5 a5a266c65a3a30e700bf4488af1bce0f
BLAKE2b-256 c358b82ef354e141e96cbd550190dc56b041c0cdd3032ebaa331c1e901debfce

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page