yahoo-finance2
Version:
JS API for Yahoo Finance
183 lines • 6.71 kB
TypeScript
/**
* Options module for retrieving options chain data including calls, puts, and Greeks.
*
* This module provides comprehensive options data for stocks, including all available
* expiration dates, strike prices, implied volatility, open interest, and other
* essential options trading information.
*
* @example Basic Options Chain
* ```typescript
* import YahooFinance from "yahoo-finance2";
* const yahooFinance = new YahooFinance();
*
* // Get complete options chain for Apple
* const optionsData = await yahooFinance.options('AAPL');
*
* console.log('Available expirations:', optionsData.expirationDates);
* console.log('Available strikes:', optionsData.strikes);
* console.log('Underlying quote:', optionsData.quote.regularMarketPrice);
*
* // Access the first expiration's calls and puts
* const firstExpiration = optionsData.options[0];
* console.log(`Expiration: ${firstExpiration.expirationDate}`);
* console.log(`Number of calls: ${firstExpiration.calls.length}`);
* console.log(`Number of puts: ${firstExpiration.puts.length}`);
* ```
*
* @example Specific Expiration Date
* ```typescript
* // Get options for a specific expiration date
* const specificExpiration = await yahooFinance.options('TSLA', {
* date: new Date('2024-03-15')
* });
*
* // Find in-the-money calls
* const currentPrice = specificExpiration.quote.regularMarketPrice;
* const itmCalls = specificExpiration.options[0].calls.filter(call =>
* call.strike < currentPrice && call.inTheMoney
* );
*
* console.log(`Current stock price: $${currentPrice}`);
* console.log(`In-the-money calls: ${itmCalls.length}`);
* ```
*
* @example Options Analysis and Screening
* ```typescript
* const optionsData = await yahooFinance.options('NVDA');
* const currentPrice = optionsData.quote.regularMarketPrice;
*
* // Analyze all expirations
* optionsData.options.forEach(expiration => {
* console.log(`\nExpiration: ${expiration.expirationDate}`);
*
* // Find at-the-money options
* const atmCalls = expiration.calls.filter(call =>
* Math.abs(call.strike - currentPrice) < 5
* );
*
* const atmPuts = expiration.puts.filter(put =>
* Math.abs(put.strike - currentPrice) < 5
* );
*
* if (atmCalls.length > 0) {
* const atmCall = atmCalls[0];
* console.log(`ATM Call: Strike $${atmCall.strike}, IV: ${(atmCall.impliedVolatility * 100).toFixed(2)}%`);
* }
*
* if (atmPuts.length > 0) {
* const atmPut = atmPuts[0];
* console.log(`ATM Put: Strike $${atmPut.strike}, IV: ${(atmPut.impliedVolatility * 100).toFixed(2)}%`);
* }
* });
* ```
*
* @example High Volume and Open Interest Analysis
* ```typescript
* const optionsData = await yahooFinance.options('SPY');
*
* // Find most active options across all expirations
* let mostActiveOptions = [];
*
* optionsData.options.forEach(expiration => {
* const allOptions = [...expiration.calls, ...expiration.puts];
* mostActiveOptions.push(...allOptions);
* });
*
* // Sort by volume
* mostActiveOptions.sort((a, b) => (b.volume || 0) - (a.volume || 0));
*
* console.log('Most Active Options:');
* mostActiveOptions.slice(0, 10).forEach((option, index) => {
* const type = option.contractSymbol.includes('C') ? 'CALL' : 'PUT';
* console.log(`${index + 1}. ${type} Strike $${option.strike} - Volume: ${option.volume}`);
* });
*
* // Find highest open interest
* mostActiveOptions.sort((a, b) => (b.openInterest || 0) - (a.openInterest || 0));
* console.log('\nHighest Open Interest:');
* mostActiveOptions.slice(0, 5).forEach(option => {
* console.log(`Strike $${option.strike} - OI: ${option.openInterest}`);
* });
* ```
*
* @remarks
* **Data Refresh**: Options data is updated throughout the trading day.
* Prices, volumes, and implied volatilities change constantly during market hours.
*
* **Expiration Processing**: All expiration dates are provided, but you can
* filter to specific dates using the `date` parameter.
*
* **Mini Options**: Some stocks have mini options (10 shares instead of 100).
* Check the `hasMiniOptions` flag and individual contract `contractSize`.
*
* **Liquidity**: Options with low volume or wide bid-ask spreads may be
* difficult to trade. Always check volume and open interest.
*
* **Greeks**: Basic Greeks like implied volatility are provided. For advanced
* Greeks (delta, gamma, theta, vega), you may need to calculate them separately.
*
* **Currency**: All option prices are in the underlying stock's currency.
*
* @see {@link quote} for current stock price and basic data
*
* @module options
*/
import type { ModuleOptionsWithValidateFalse, ModuleOptionsWithValidateTrue, ModuleThis } from "../lib/moduleCommon.js";
import type { Quote } from "./quote.js";
export interface OptionsResult {
[key: string]: unknown;
underlyingSymbol: string;
expirationDates: Date[];
strikes: number[];
hasMiniOptions: boolean;
quote: Quote;
options: Option[];
}
export interface Option {
[key: string]: unknown;
expirationDate: Date;
hasMiniOptions: boolean;
calls: CallOrPut[];
puts: CallOrPut[];
}
export interface CallOrPut {
[key: string]: unknown;
contractSymbol: string;
strike: number;
currency?: string;
lastPrice: number;
change: number;
percentChange?: number;
volume?: number;
openInterest?: number;
bid?: number;
ask?: number;
contractSize: "REGULAR";
expiration: Date;
lastTradeDate: Date;
impliedVolatility: number;
inTheMoney: boolean;
}
export interface OptionsOptions {
formatted?: boolean;
lang?: string;
region?: string;
date?: Date | number | string;
}
/**
* Get options chain data including calls, puts, and Greeks (delta, gamma, etc).
*
* **See the {@link [modules/options] options module} docs for examples and more.**
* @see {@link [modules/options] options module} docs for examples and more.
*/
export default function options(this: ModuleThis, symbol: string, queryOptionsOverrides?: OptionsOptions, moduleOptions?: ModuleOptionsWithValidateTrue): Promise<OptionsResult>;
/**
* Get options chain data including calls, puts, and Greeks (delta, gamma, etc).
*
* **See the {@link [modules/options] options module} docs for examples and more.**
* @see {@link [modules/options] options module} docs for examples and more.
*
* @returns An unvalidated and untyped result, but that have a similar form to {@linkcode OptionsResult}.
*/
export default function options(this: ModuleThis, symbol: string, queryOptionsOverrides?: OptionsOptions, moduleOptions?: ModuleOptionsWithValidateFalse): Promise<unknown>;
//# sourceMappingURL=options.d.ts.map