S
StockBud Docs

StockBud.io Market Data Schema

Schema for market data structures used in StockBud.io trading system

🏛️ StockBud.io Market Data Schema

Version: 1.0.0

Schema for market data structures used in StockBud.io trading system

Overview

This schema defines 8 data structures:


Definitions

MarketData

Basic market data for a security

Properties

PropertyTypeRequiredDescription
symbolstringStock symbol
pricenumberCurrent price
changenumberPrice change from previous close
change_percentnumberPercentage change from previous close
volumeintegerTrading volume
avg_volumeintegerAverage daily volume
market_capnumberMarket capitalization
pe_rationumberPrice-to-earnings ratio
betanumberBeta coefficient
dividend_yieldnumberDividend yield percentage
timestampstringData timestamp

TypeScript

interface MarketData {
  /** Stock symbol */
  symbol: string;
  /** Current price */
  price: number;
  /** Price change from previous close */
  change?: number;
  /** Percentage change from previous close */
  change_percent?: number;
  /** Trading volume */
  volume?: number;
  /** Average daily volume */
  avg_volume?: number;
  /** Market capitalization */
  market_cap?: number;
  /** Price-to-earnings ratio */
  pe_ratio?: number;
  /** Beta coefficient */
  beta?: number;
  /** Dividend yield percentage */
  dividend_yield?: number;
  /** Data timestamp */
  timestamp: string;
}

Quote

Real-time quote data

Properties

PropertyTypeRequiredDescription
symbolstringStock symbol
bidnumberBid price
asknumberAsk price
bid_sizeintegerBid size
ask_sizeintegerAsk size
spreadnumberBid-ask spread
spread_percentnumberBid-ask spread as percentage
timestampstringQuote timestamp

TypeScript

interface Quote {
  /** Stock symbol */
  symbol: string;
  /** Bid price */
  bid: number;
  /** Ask price */
  ask: number;
  /** Bid size */
  bid_size?: number;
  /** Ask size */
  ask_size?: number;
  /** Bid-ask spread */
  spread?: number;
  /** Bid-ask spread as percentage */
  spread_percent?: number;
  /** Quote timestamp */
  timestamp: string;
}

Bar

OHLCV bar data

Properties

PropertyTypeRequiredDescription
symbolstringStock symbol
opennumberOpening price
highnumberHigh price
lownumberLow price
closenumberClosing price
volumeintegerTrading volume
vwapnumberVolume-weighted average price
trade_countintegerNumber of trades
timestampstringBar timestamp
timeframeenum: '1min', '5min', '15min', '30min', '1hour', '4hour', '1day', '1week', '1month'Bar timeframe

TypeScript

interface Bar {
  /** Stock symbol */
  symbol: string;
  /** Opening price */
  open: number;
  /** High price */
  high: number;
  /** Low price */
  low: number;
  /** Closing price */
  close: number;
  /** Trading volume */
  volume: number;
  /** Volume-weighted average price */
  vwap?: number;
  /** Number of trades */
  trade_count?: number;
  /** Bar timestamp */
  timestamp: string;
  /** Bar timeframe */
  timeframe: "1min" | "5min" | "15min" | "30min" | "1hour" | "4hour" | "1day" | "1week" | "1month";
}

TechnicalIndicators

Technical indicators for a security

Properties

PropertyTypeRequiredDescription
symbolstringStock symbol
sma_20number20-period Simple Moving Average
sma_50number50-period Simple Moving Average
sma_200number200-period Simple Moving Average
ema_10number10-period Exponential Moving Average
ema_20number20-period Exponential Moving Average
ema_50number50-period Exponential Moving Average
rsinumberRelative Strength Index
macdnumberMACD line
macd_signalnumberMACD signal line
macd_histogramnumberMACD histogram
bollinger_uppernumberBollinger Bands upper band
bollinger_middlenumberBollinger Bands middle band
bollinger_lowernumberBollinger Bands lower band
atrnumberAverage True Range
volatilitynumberHistorical volatility
volume_smanumberVolume Simple Moving Average
timestampstringIndicators calculation timestamp

TypeScript

interface TechnicalIndicators {
  /** Stock symbol */
  symbol: string;
  /** 20-period Simple Moving Average */
  sma_20?: number;
  /** 50-period Simple Moving Average */
  sma_50?: number;
  /** 200-period Simple Moving Average */
  sma_200?: number;
  /** 10-period Exponential Moving Average */
  ema_10?: number;
  /** 20-period Exponential Moving Average */
  ema_20?: number;
  /** 50-period Exponential Moving Average */
  ema_50?: number;
  /** Relative Strength Index */
  rsi?: number;
  /** MACD line */
  macd?: number;
  /** MACD signal line */
  macd_signal?: number;
  /** MACD histogram */
  macd_histogram?: number;
  /** Bollinger Bands upper band */
  bollinger_upper?: number;
  /** Bollinger Bands middle band */
  bollinger_middle?: number;
  /** Bollinger Bands lower band */
  bollinger_lower?: number;
  /** Average True Range */
  atr?: number;
  /** Historical volatility */
  volatility?: number;
  /** Volume Simple Moving Average */
  volume_sma?: number;
  /** Indicators calculation timestamp */
  timestamp: string;
}

OptionChain

Options chain data

Properties

PropertyTypeRequiredDescription
symbolstringUnderlying symbol
expiration_datestringOptions expiration date
callsArray<OptionContract>Call options
putsArray<OptionContract>Put options
max_painnumberMax pain strike price
put_call_rationumberPut/Call ratio
timestampstringChain data timestamp

TypeScript

interface OptionChain {
  /** Underlying symbol */
  symbol: string;
  /** Options expiration date */
  expiration_date: string;
  /** Call options */
  calls: OptionContract[];
  /** Put options */
  puts: OptionContract[];
  /** Max pain strike price */
  max_pain?: number;
  /** Put/Call ratio */
  put_call_ratio?: number;
  /** Chain data timestamp */
  timestamp?: string;
}

OptionContract

Individual option contract

Properties

PropertyTypeRequiredDescription
strikenumberStrike price
typeenum: 'call', 'put'Option type
bidnumberBid price
asknumberAsk price
lastnumberLast traded price
volumeintegerTrading volume
open_interestintegerOpen interest
implied_volatilitynumberImplied volatility
deltanumberDelta greek
gammanumberGamma greek
thetanumberTheta greek
veganumberVega greek
rhonumberRho greek

TypeScript

interface OptionContract {
  /** Strike price */
  strike: number;
  /** Option type */
  type: "call" | "put";
  /** Bid price */
  bid: number;
  /** Ask price */
  ask: number;
  /** Last traded price */
  last: number;
  /** Trading volume */
  volume: number;
  /** Open interest */
  open_interest: number;
  /** Implied volatility */
  implied_volatility?: number;
  /** Delta greek */
  delta?: number;
  /** Gamma greek */
  gamma?: number;
  /** Theta greek */
  theta?: number;
  /** Vega greek */
  vega?: number;
  /** Rho greek */
  rho?: number;
}

MarketNews

Market news item

Properties

PropertyTypeRequiredDescription
idstringUnique news identifier
headlinestringNews headline
summarystringNews summary
contentstringFull news content
sourcestringNews source
authorstringArticle author
urlstringArticle URL
symbolsArray<string>Related symbols
sentimentenum: 'positive', 'negative', 'neutral'Sentiment analysis
sentiment_scorenumberSentiment score (-1 to 1)
relevance_scorenumberRelevance score (0 to 1)
timestampstringNews publication timestamp
created_atstringRecord creation timestamp

TypeScript

interface MarketNews {
  /** Unique news identifier */
  id?: string;
  /** News headline */
  headline: string;
  /** News summary */
  summary: string;
  /** Full news content */
  content?: string;
  /** News source */
  source: string;
  /** Article author */
  author?: string;
  /** Article URL */
  url?: string;
  /** Related symbols */
  symbols?: string[];
  /** Sentiment analysis */
  sentiment?: "positive" | "negative" | "neutral";
  /** Sentiment score (-1 to 1) */
  sentiment_score?: number;
  /** Relevance score (0 to 1) */
  relevance_score?: number;
  /** News publication timestamp */
  timestamp: string;
  /** Record creation timestamp */
  created_at?: string;
}

CryptoData

Cryptocurrency market data

Properties

PropertyTypeRequiredDescription
symbolstringCryptocurrency symbol (e.g., BTC, ETH)
pricenumberCurrent price in USD
change_24hnumber24-hour price change
change_24h_percentnumber24-hour percentage change
volume_24hnumber24-hour trading volume
market_capnumberMarket capitalization
circulating_supplynumberCirculating supply
total_supplynumberTotal supply
dominancenumberMarket dominance percentage
timestampstringData timestamp

TypeScript

interface CryptoData {
  /** Cryptocurrency symbol (e.g., BTC, ETH) */
  symbol: string;
  /** Current price in USD */
  price: number;
  /** 24-hour price change */
  change_24h?: number;
  /** 24-hour percentage change */
  change_24h_percent?: number;
  /** 24-hour trading volume */
  volume_24h?: number;
  /** Market capitalization */
  market_cap?: number;
  /** Circulating supply */
  circulating_supply?: number;
  /** Total supply */
  total_supply?: number;
  /** Market dominance percentage */
  dominance?: number;
  /** Data timestamp */
  timestamp: string;
}

Usage Example

import type { MarketData, Quote, Bar, TechnicalIndicators, OptionChain, OptionContract, MarketNews, CryptoData } from '@stockbud/schemas';
 
// Create a new MarketData
const example: MarketData = {
  symbol: "example-value",
  price: 0,
  timestamp: "example-value",
};

Full JSON Schema

Click to expand raw JSON Schema
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "StockBud.io Market Data Schema",
  "description": "Schema for market data structures used in StockBud.io trading system",
  "version": "1.0.0",
  "type": "object",
  "definitions": {
    "MarketData": {
      "type": "object",
      "description": "Basic market data for a security",
      "required": [
        "symbol",
        "price",
        "timestamp"
      ],
      "properties": {
        "symbol": {
          "type": "string",
          "pattern": "^[A-Z]{1,5}$",
          "description": "Stock symbol"
        },
        "price": {
          "type": "number",
          "minimum": 0,
          "description": "Current price"
        },
        "change": {
          "type": "number",
          "description": "Price change from previous close"
        },
        "change_percent": {
          "type": "number",
          "description": "Percentage change from previous close"
        },
        "volume": {
          "type": "integer",
          "minimum": 0,
          "description": "Trading volume"
        },
        "avg_volume": {
          "type": "integer",
          "minimum": 0,
          "description": "Average daily volume"
        },
        "market_cap": {
          "type": "number",
          "minimum": 0,
          "description": "Market capitalization"
        },
        "pe_ratio": {
          "type": "number",
          "minimum": 0,
          "description": "Price-to-earnings ratio"
        },
        "beta": {
          "type": "number",
          "description": "Beta coefficient"
        },
        "dividend_yield": {
          "type": "number",
          "minimum": 0,
          "description": "Dividend yield percentage"
        },
        "timestamp": {
          "type": "string",
          "format": "date-time",
          "description": "Data timestamp"
        }
      }
    },
    "Quote": {
      "type": "object",
      "description": "Real-time quote data",
      "required": [
        "symbol",
        "bid",
        "ask",
        "timestamp"
      ],
      "properties": {
        "symbol": {
          "type": "string",
          "pattern": "^[A-Z]{1,5}$",
          "description": "Stock symbol"
        },
        "bid": {
          "type": "number",
          "minimum": 0,
          "description": "Bid price"
        },
        "ask": {
          "type": "number",
          "minimum": 0,
          "description": "Ask price"
        },
        "bid_size": {
          "type": "integer",
          "minimum": 0,
          "description": "Bid size"
        },
        "ask_size": {
          "type": "integer",
          "minimum": 0,
          "description": "Ask size"
        },
        "spread": {
          "type": "number",
          "minimum": 0,
          "description": "Bid-ask spread"
        },
        "spread_percent": {
          "type": "number",
          "minimum": 0,
          "description": "Bid-ask spread as percentage"
        },
        "timestamp": {
          "type": "string",
          "format": "date-time",
          "description": "Quote timestamp"
        }
      }
    },
    "Bar": {
      "type": "object",
      "description": "OHLCV bar data",
      "required": [
        "symbol",
        "open",
        "high",
        "low",
        "close",
        "volume",
        "timestamp",
        "timeframe"
      ],
      "properties": {
        "symbol": {
          "type": "string",
          "pattern": "^[A-Z]{1,5}$",
          "description": "Stock symbol"
        },
        "open": {
          "type": "number",
          "minimum": 0,
          "description": "Opening price"
        },
        "high": {
          "type": "number",
          "minimum": 0,
          "description": "High price"
        },
        "low": {
          "type": "number",
          "minimum": 0,
          "description": "Low price"
        },
        "close": {
          "type": "number",
          "minimum": 0,
          "description": "Closing price"
        },
        "volume": {
          "type": "integer",
          "minimum": 0,
          "description": "Trading volume"
        },
        "vwap": {
          "type": "number",
          "minimum": 0,
          "description": "Volume-weighted average price"
        },
        "trade_count": {
          "type": "integer",
          "minimum": 0,
          "description": "Number of trades"
        },
        "timestamp": {
          "type": "string",
          "format": "date-time",
          "description": "Bar timestamp"
        },
        "timeframe": {
          "type": "string",
          "enum": [
            "1min",
            "5min",
            "15min",
            "30min",
            "1hour",
            "4hour",
            "1day",
            "1week",
            "1month"
          ],
          "description": "Bar timeframe"
        }
      }
    },
    "TechnicalIndicators": {
      "type": "object",
      "description": "Technical indicators for a security",
      "required": [
        "symbol",
        "timestamp"
      ],
      "properties": {
        "symbol": {
          "type": "string",
          "pattern": "^[A-Z]{1,5}$",
          "description": "Stock symbol"
        },
        "sma_20": {
          "type": "number",
          "description": "20-period Simple Moving Average"
        },
        "sma_50": {
          "type": "number",
          "description": "50-period Simple Moving Average"
        },
        "sma_200": {
          "type": "number",
          "description": "200-period Simple Moving Average"
        },
        "ema_10": {
          "type": "number",
          "description": "10-period Exponential Moving Average"
        },
        "ema_20": {
          "type": "number",
          "description": "20-period Exponential Moving Average"
        },
        "ema_50": {
          "type": "number",
          "description": "50-period Exponential Moving Average"
        },
        "rsi": {
          "type": "number",
          "minimum": 0,
          "maximum": 100,
          "description": "Relative Strength Index"
        },
        "macd": {
          "type": "number",
          "description": "MACD line"
        },
        "macd_signal": {
          "type": "number",
          "description": "MACD signal line"
        },
        "macd_histogram": {
          "type": "number",
          "description": "MACD histogram"
        },
        "bollinger_upper": {
          "type": "number",
          "description": "Bollinger Bands upper band"
        },
        "bollinger_middle": {
          "type": "number",
          "description": "Bollinger Bands middle band"
        },
        "bollinger_lower": {
          "type": "number",
          "description": "Bollinger Bands lower band"
        },
        "atr": {
          "type": "number",
          "minimum": 0,
          "description": "Average True Range"
        },
        "volatility": {
          "type": "number",
          "minimum": 0,
          "description": "Historical volatility"
        },
        "volume_sma": {
          "type": "number",
          "description": "Volume Simple Moving Average"
        },
        "timestamp": {
          "type": "string",
          "format": "date-time",
          "description": "Indicators calculation timestamp"
        }
      }
    },
    "OptionChain": {
      "type": "object",
      "description": "Options chain data",
      "required": [
        "symbol",
        "expiration_date",
        "calls",
        "puts"
      ],
      "properties": {
        "symbol": {
          "type": "string",
          "pattern": "^[A-Z]{1,5}$",
          "description": "Underlying symbol"
        },
        "expiration_date": {
          "type": "string",
          "format": "date",
          "description": "Options expiration date"
        },
        "calls": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/OptionContract"
          },
          "description": "Call options"
        },
        "puts": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/OptionContract"
          },
          "description": "Put options"
        },
        "max_pain": {
          "type": "number",
          "description": "Max pain strike price"
        },
        "put_call_ratio": {
          "type": "number",
          "description": "Put/Call ratio"
        },
        "timestamp": {
          "type": "string",
          "format": "date-time",
          "description": "Chain data timestamp"
        }
      }
    },
    "OptionContract": {
      "type": "object",
      "description": "Individual option contract",
      "required": [
        "strike",
        "type",
        "bid",
        "ask",
        "last",
        "volume",
        "open_interest"
      ],
      "properties": {
        "strike": {
          "type": "number",
          "minimum": 0,
          "description": "Strike price"
        },
        "type": {
          "type": "string",
          "enum": [
            "call",
            "put"
          ],
          "description": "Option type"
        },
        "bid": {
          "type": "number",
          "minimum": 0,
          "description": "Bid price"
        },
        "ask": {
          "type": "number",
          "minimum": 0,
          "description": "Ask price"
        },
        "last": {
          "type": "number",
          "minimum": 0,
          "description": "Last traded price"
        },
        "volume": {
          "type": "integer",
          "minimum": 0,
          "description": "Trading volume"
        },
        "open_interest": {
          "type": "integer",
          "minimum": 0,
          "description": "Open interest"
        },
        "implied_volatility": {
          "type": "number",
          "minimum": 0,
          "description": "Implied volatility"
        },
        "delta": {
          "type": "number",
          "description": "Delta greek"
        },
        "gamma": {
          "type": "number",
          "description": "Gamma greek"
        },
        "theta": {
          "type": "number",
          "description": "Theta greek"
        },
        "vega": {
          "type": "number",
          "description": "Vega greek"
        },
        "rho": {
          "type": "number",
          "description": "Rho greek"
        }
      }
    },
    "MarketNews": {
      "type": "object",
      "description": "Market news item",
      "required": [
        "headline",
        "summary",
        "source",
        "timestamp"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Unique news identifier"
        },
        "headline": {
          "type": "string",
          "description": "News headline"
        },
        "summary": {
          "type": "string",
          "description": "News summary"
        },
        "content": {
          "type": "string",
          "description": "Full news content"
        },
        "source": {
          "type": "string",
          "description": "News source"
        },
        "author": {
          "type": "string",
          "description": "Article author"
        },
        "url": {
          "type": "string",
          "format": "uri",
          "description": "Article URL"
        },
        "symbols": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Related symbols"
        },
        "sentiment": {
          "type": "string",
          "enum": [
            "positive",
            "negative",
            "neutral"
          ],
          "description": "Sentiment analysis"
        },
        "sentiment_score": {
          "type": "number",
          "minimum": -1,
          "maximum": 1,
          "description": "Sentiment score (-1 to 1)"
        },
        "relevance_score": {
          "type": "number",
          "minimum": 0,
          "maximum": 1,
          "description": "Relevance score (0 to 1)"
        },
        "timestamp": {
          "type": "string",
          "format": "date-time",
          "description": "News publication timestamp"
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "description": "Record creation timestamp"
        }
      }
    },
    "CryptoData": {
      "type": "object",
      "description": "Cryptocurrency market data",
      "required": [
        "symbol",
        "price",
        "timestamp"
      ],
      "properties": {
        "symbol": {
          "type": "string",
          "pattern": "^[A-Z]{3,10}$",
          "description": "Cryptocurrency symbol (e.g., BTC, ETH)"
        },
        "price": {
          "type": "number",
          "minimum": 0,
          "description": "Current price in USD"
        },
        "change_24h": {
          "type": "number",
          "description": "24-hour price change"
        },
        "change_24h_percent": {
          "type": "number",
          "description": "24-hour percentage change"
        },
        "volume_24h": {
          "type": "number",
          "minimum": 0,
          "description": "24-hour trading volume"
        },
        "market_cap": {
          "type": "number",
          "minimum": 0,
          "description": "Market capitalization"
        },
        "circulating_supply": {
          "type": "number",
          "minimum": 0,
          "description": "Circulating supply"
        },
        "total_supply": {
          "type": "number",
          "minimum": 0,
          "description": "Total supply"
        },
        "dominance": {
          "type": "number",
          "minimum": 0,
          "maximum": 100,
          "description": "Market dominance percentage"
        },
        "timestamp": {
          "type": "string",
          "format": "date-time",
          "description": "Data timestamp"
        }
      }
    }
  },
  "properties": {
    "market_data": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/MarketData"
      }
    },
    "quotes": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/Quote"
      }
    },
    "bars": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/Bar"
      }
    },
    "indicators": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/TechnicalIndicators"
      }
    },
    "option_chains": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/OptionChain"
      }
    },
    "news": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/MarketNews"
      }
    },
    "crypto": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/CryptoData"
      }
    }
  }
}