UNPKG

@copytrade/shared-types

Version:

Shared TypeScript types for CopyTrade application

363 lines (362 loc) 8.43 kB
/** * Options Trading Types * * Types specific to F&O (Futures & Options) trading */ import { Exchange, BrokerName } from './constants'; /** * Option types */ export declare const OPTION_TYPE: { readonly CALL: "CE"; readonly PUT: "PE"; readonly FUTURE: "FUT"; }; export type OptionType = typeof OPTION_TYPE[keyof typeof OPTION_TYPE]; /** * Options instrument interface */ export interface OptionsInstrument { id: string; underlying_symbol: string; trading_symbol: string; instrument_key: string; strike_price?: number | undefined; expiry_date: string; option_type: OptionType; lot_size: number; exchange: Exchange; segment: string; tick_size: number; created_at: string; updated_at: string; is_active: boolean; } /** * Data for creating options instrument */ export interface CreateOptionsInstrumentData { underlying_symbol: string; trading_symbol: string; instrument_key: string; strike_price?: number; expiry_date: string; option_type: OptionType; lot_size: number; exchange: Exchange; segment: string; tick_size: number; } /** * Options market data interface */ export interface OptionsMarketData { id: string; instrument_id: string; date: string; open: number; high: number; low: number; close: number; volume: number; open_interest: number; change: number; change_percent: number; created_at: string; } /** * Real-time options quote */ export interface OptionsQuote { instrument_key: string; trading_symbol: string; ltp: number; open: number; high: number; low: number; close: number; volume: number; open_interest: number; change: number; change_percent: number; bid_price: number; ask_price: number; bid_quantity: number; ask_quantity: number; timestamp: string; } /** * Option chain strike data */ export interface OptionChainStrike { strike_price: number; call: { instrument_key: string; trading_symbol: string; ltp: number; change: number; change_percent: number; volume: number; open_interest: number; bid_price: number; ask_price: number; iv?: number; } | null; put: { instrument_key: string; trading_symbol: string; ltp: number; change: number; change_percent: number; volume: number; open_interest: number; bid_price: number; ask_price: number; iv?: number; } | null; } /** * Complete option chain */ export interface OptionChain { underlying_symbol: string; underlying_price: number; expiry_date: string; strikes: OptionChainStrike[]; total_call_oi: number; total_put_oi: number; pcr: number; max_pain?: number; timestamp: string; } /** * Options-specific order data */ export interface OptionsOrderData { underlying_symbol: string; strike_price?: number; expiry_date: string; option_type: OptionType; action: 'BUY' | 'SELL'; quantity: number; price: number; order_type: 'MARKET' | 'LIMIT' | 'SL-LIMIT' | 'SL-MARKET'; product_type: string; trigger_price?: number; disclosed_quantity?: number; validity?: 'DAY' | 'IOC' | 'GTD'; remarks?: string; } /** * Options order with instrument details */ export interface OptionsOrder extends OptionsOrderData { id: string; user_id: string; account_id: string; broker_name: BrokerName; broker_order_id: string; instrument_key: string; trading_symbol: string; lot_size: number; status: 'SUBMITTED' | 'PENDING' | 'EXECUTED' | 'REJECTED' | 'CANCELLED'; executed_quantity?: number; executed_price?: number; order_time: string; execution_time?: string; error_message?: string; created_at: string; updated_at?: string; } /** * Common option strategies */ export declare const OPTION_STRATEGY: { readonly LONG_CALL: "LONG_CALL"; readonly LONG_PUT: "LONG_PUT"; readonly SHORT_CALL: "SHORT_CALL"; readonly SHORT_PUT: "SHORT_PUT"; readonly LONG_STRADDLE: "LONG_STRADDLE"; readonly SHORT_STRADDLE: "SHORT_STRADDLE"; readonly LONG_STRANGLE: "LONG_STRANGLE"; readonly SHORT_STRANGLE: "SHORT_STRANGLE"; readonly BULL_CALL_SPREAD: "BULL_CALL_SPREAD"; readonly BEAR_PUT_SPREAD: "BEAR_PUT_SPREAD"; readonly IRON_CONDOR: "IRON_CONDOR"; readonly BUTTERFLY: "BUTTERFLY"; readonly COLLAR: "COLLAR"; readonly COVERED_CALL: "COVERED_CALL"; readonly PROTECTIVE_PUT: "PROTECTIVE_PUT"; }; export type OptionStrategy = typeof OPTION_STRATEGY[keyof typeof OPTION_STRATEGY]; /** * Option strategy leg */ export interface OptionStrategyLeg { instrument_key: string; trading_symbol: string; action: 'BUY' | 'SELL'; quantity: number; strike_price?: number; option_type: OptionType; price?: number; } /** * Option strategy definition */ export interface OptionStrategyDefinition { id: string; name: string; strategy_type: OptionStrategy; underlying_symbol: string; expiry_date: string; legs: OptionStrategyLeg[]; max_profit?: number; max_loss?: number; breakeven_points?: number[]; margin_required?: number; created_at: string; } /** * Options position */ export interface OptionsPosition { id: string; user_id: string; account_id: string; instrument_key: string; trading_symbol: string; underlying_symbol: string; strike_price?: number | undefined; expiry_date: string; option_type: OptionType; quantity: number; average_price: number; current_price: number; pnl: number; pnl_percent: number; margin_used?: number | undefined; created_at: string; updated_at: string; } /** * Options portfolio summary */ export interface OptionsPortfolioSummary { total_positions: number; total_pnl: number; total_pnl_percent: number; total_margin_used: number; day_pnl: number; positions_by_underlying: { [symbol: string]: { positions: OptionsPosition[]; net_pnl: number; net_quantity: number; }; }; expiry_wise_summary: { [expiry: string]: { positions: number; pnl: number; }; }; } /** * Options instrument search response */ export interface OptionsInstrumentSearchResponse { success: boolean; data: OptionsInstrument[]; total: number; page?: number; limit?: number; } /** * Option chain response */ export interface OptionChainResponse { success: boolean; data: OptionChain; message?: string; } /** * Options order response */ export interface OptionsOrderResponse { success: boolean; data: OptionsOrder; message?: string; } /** * Options portfolio response */ export interface OptionsPortfolioResponse { success: boolean; data: OptionsPortfolioSummary; message?: string; } /** * Options instrument filters */ export interface OptionsInstrumentFilters { underlying_symbol?: string; option_type?: OptionType; expiry_date?: string; strike_price_min?: number; strike_price_max?: number; exchange?: Exchange; is_active?: boolean; limit?: number; offset?: number; } /** * Options order filters */ export interface OptionsOrderFilters { user_id?: string; account_id?: string; underlying_symbol?: string; option_type?: OptionType; expiry_date?: string; status?: string; start_date?: string; end_date?: string; limit?: number; offset?: number; } /** * Options Greeks (for advanced analytics) */ export interface OptionsGreeks { delta: number; gamma: number; theta: number; vega: number; rho: number; implied_volatility: number; } /** * Options analytics */ export interface OptionsAnalytics { instrument_key: string; greeks?: OptionsGreeks; time_to_expiry: number; moneyness: 'ITM' | 'ATM' | 'OTM'; intrinsic_value: number; time_value: number; } /** * Expiry calendar */ export interface ExpiryCalendar { underlying_symbol: string; expiry_dates: { date: string; is_weekly: boolean; is_monthly: boolean; days_to_expiry: number; available_strikes: number[]; }[]; }