UNPKG

@stoqey/ib

Version:

Interactive Brokers TWS/IB Gateway API client library for Node.js (TS)

627 lines (626 loc) 27.2 kB
import { SoftDollarTier } from "../data/container/soft-dollar-tier"; import { TagValue } from "../data/container/tag-value"; import { OrderCondition } from "./condition/order-condition"; import { OrderAction } from "./enum/order-action"; import { OrderType } from "./enum/orderType"; import { TimeInForce } from "./enum/tif"; import { OrderComboLeg } from "./orderComboLeg"; /** * The order's description. */ export interface Order { /** The API client's order id. */ orderId?: number; /** TODO document */ solicited?: boolean; /** The API client id which placed the order. */ clientId?: number; /** The Host order identifier. */ permId?: number; /** * Identifies the side. * * Generally available values are BUY, SELL. * * Additionally, SSHORT, SLONG are available in some institutional-accounts only. * * For general account types, a SELL order will be able to enter a short position automatically if the order quantity is larger than your current long position. * * SSHORT is only supported for institutional account configured with Long/Short account segments or clearing with a separate account. * * SLONG is available in specially-configured institutional accounts to indicate that long position not yet delivered is being sold. */ action?: OrderAction; /** The number of positions being bought/sold. */ totalQuantity?: number; /** The order's type. */ orderType?: OrderType; /** * The LIMIT price. * * Used for limit, stop-limit and relative orders. * In all other cases specify zero. * For relative orders with no limit price, also specify zero. */ lmtPrice?: number; /** Generic field to contain the stop price for STP LMT orders, trailing amount, etc. */ auxPrice?: number; /** * The time in force. * * Valid values are: * - DAY - Valid for the day only. * - GTC - Good until canceled. * The order will continue to work within the system and in the marketplace until it executes or is canceled. * GTC orders will be automatically be cancelled under the following conditions: * If a corporate action on a security results in a stock split (forward or reverse), exchange for shares, or distribution of shares. * If you do not log into your IB account for 90 days. * At the end of the calendar quarter following the current quarter. * For example, an order placed during the third quarter of 2011 will be canceled at the end of the first quarter of 2012. * If the last day is a non-trading day, the cancellation will occur at the close of the final trading day of that quarter. * For example, if the last day of the quarter is Sunday, the orders will be cancelled on the preceding Friday. * Orders that are modified will be assigned a new “Auto Expire” date consistent with the end of the calendar quarter following the current quarter. * Orders submitted to IB that remain in force for more than one day will not be reduced for dividends. * To allow adjustment to your order price on ex-dividend date, consider using a Good-Til-Date/Time (GTD) or Good-after-Time/Date (GAT) order type, or a combination of the two. * - IOC - Immediate or Cancel. Any portion that is not filled as soon as it becomes available in the market is canceled. * - GTD. - Good until Date. It will remain working within the system and in the marketplace until it executes or until the close of the market on the date specified * - OPG - Use OPG to send a market-on-open (MOO) or limit-on-open (LOO) order. * - FOK - If the entire Fill-or-Kill order does not execute as soon as it becomes available, the entire order is canceled. * - DTC - Day until Canceled */ tif?: TimeInForce; /** One-Cancels-All group identifier. */ ocaGroup?: string; /** * Tells how to handle remaining orders in an OCA group when one order or part of an order executes. * * Valid values are: * - 1 = Cancel all remaining orders with block. * - 2 = Remaining orders are proportionately reduced in size with block. * - 3 = Remaining orders are proportionately reduced in size with no block. * * If you use a value "with block" it gives the order overfill protection. * This means that only one order in the group will be routed at a time to remove the possibility of an overfill. */ ocaType?: number; /** * The order reference. * * Intended for institutional customers only, * although all customers may use it to identify the API client that sent the order when multiple API clients are running. */ orderRef?: string; /** * Specifies whether the order will be transmitted by TWS. * If set to false`, the order will be created at TWS but will not be sent. */ transmit?: boolean; /** The order ID of the parent order, used for bracket and auto trailing stop orders. */ parentId?: number; /** If set to `true`, specifies that the order is an ISE Block order. */ blockOrder?: boolean; /** If set to `true`, specifies that the order is a Sweep-to-Fill order. */ sweepToFill?: boolean; /** The publicly disclosed order size, used when placing Iceberg orders. */ displaySize?: number; /** * Specifies how Simulated Stop, Stop-Limit and Trailing Stop orders are triggered. * * Valid values are: * - 0 - The default value. The "double bid/ask" function will be used for orders for OTC stocks and US options. All other orders will used the "last" function. * - 1 - use "double bid/ask" function, where stop orders are triggered based on two consecutive bid or ask prices. * - 2 - "last" function, where stop orders are triggered based on the last price. * - 3 - double last function. * - 4 - bid/ask function. * - 7 - last or bid/ask function. * - 8 - mid-point function. */ triggerMethod?: number; /** If set to `true`, allows orders to also trigger or fill outside of regular trading hours. */ outsideRth?: boolean; /** * If set to `true`, the order will not be visible when viewing the market depth. * This option only applies to orders routed to the ISLAND exchange. */ hidden?: boolean; /** * Specifies the date and time after which the order will be active. * Format: yyyymmdd hh:mm:ss {optional Timezone}. */ goodAfterTime?: string; /** * The date and time until the order will be active. * You must enter GTD as the time in force to use this string. * The trade's "Good Till Date," format "YYYYMMDD hh:mm:ss (optional time zone)". */ goodTillDate?: string; /** * Overrides TWS constraints. * Precautionary constraints are defined on the TWS Presets page, and help ensure that your price and size order values are reasonable. * Orders sent from the API are also validated against these safety constraints, and may be rejected if any constraint is violated. * * To override validation, set this parameter’s value to `true`. */ overridePercentageConstraints?: boolean; /** * Possible values: * - Individual = 'I' * - Agency = 'A' * - AgentOtherMember = 'W' * - IndividualPTIA = 'J' * - AgencyPTIA = 'U' * - AgentOtherMemberPTIA = 'M' * - IndividualPT = 'K' * - AgencyPT = 'Y' * - AgentOtherMemberPT = 'N' */ rule80A?: string; /** Indicates whether or not all the order has to be filled on a single execution. */ allOrNone?: boolean; /** Identifies a minimum quantity order type. */ minQty?: number; /** The percent offset amount for relative orders. */ percentOffset?: number; /** Trail stop price for TRAILIMIT orders. */ trailStopPrice?: number; /** * Specifies the trailing amount of a trailing stop order as a percentage. * * This field is mutually exclusive with the existing trailing amount. * That is, the API client can send one or the other but not both. * * This field is read AFTER the stop price (barrier price) as follows: deltaNeutralAuxPrice stopPrice, trailingPercent, scale order attributes * * The field will also be sent to the API in the openOrder message if the API client version is >= 56. * It is sent after the stopPrice field as follows: stopPrice, trailingPct, basisPoint */ trailingPercent?: number; /** The Financial Advisor group the trade will be allocated to. Use an empty string if not applicable. */ faGroup?: string; /** @deprecated The Financial Advisor allocation profile the trade will be allocated to. Use an empty string if not applicable. */ faProfile?: string; /** The Financial Advisor allocation method the trade will be allocated to. Use an empty string if not applicable.FaMethod */ faMethod?: string; /** The Financial Advisor percentage concerning the trade's allocation. Use an empty string if not applicable. */ faPercentage?: string; /** * For institutional customers only. * * Valid values are O (open), C (close). * * Available for institutional clients to determine if this order is to open or close a position. * * When Action = "BUY" and OpenClose = "O" this will open a new position. * * When Action = "BUY" and OpenClose = "C" this will close and existing short position. */ openClose?: string; /** * The order's origin. Same as TWS "Origin" column. * * Identifies the type of customer from which the order originated. * * Valid values are 0 (customer), 1 (firm). */ origin?: number; /** * For institutions only. * Valid values are: * - 1 - broker holds shares. * - 2 - shares come from elsewhere. */ shortSaleSlot?: number; /** * Used only when shortSaleSlot is 2. * * For institutions only. * * Indicates the location where the shares to short come from. * Used only when short sale slot is set to 2 (which means that the shares to short are held elsewhere and not with IB). */ designatedLocation?: string; /** Only available with IB Execution-Only accounts with applicable securities Mark order as exempt from short sale uptick rule. */ exemptCode?: number; /** The amount off the limit price allowed for discretionary orders. */ discretionaryAmt?: number; /** Trade with electronic quotes. */ eTradeOnly?: boolean; /** Trade with firm quotes. */ firmQuoteOnly?: boolean; /** Maximum smart order distance from the NBBO. */ nbboPriceCap?: number; /** * Use to opt out of default SmartRouting for orders routed directly to ASX. * This attribute defaults to false unless explicitly set to `true`. * * When set to `false`, orders routed directly to ASX will NOT use SmartRouting. * When set to `true`, orders routed directly to ASX orders WILL use SmartRouting. */ optOutSmartRouting?: boolean; /** * For BOX orders only. * * Possible values: * - 1 - match * - 2 - improvement * - 3 - transparent */ auctionStrategy?: number; /** The auction's starting price. For BOX orders only. */ startingPrice?: number; /** * The stock's reference price. * The reference price is used for VOL orders to compute the limit price sent to an exchange (whether or not Continuous Update is selected), * and for price range monitoring. */ stockRefPrice?: number; /** The stock's Delta. For orders on BOX only. */ delta?: number; /** * The lower value for the acceptable underlying stock price range. * For price improvement option orders on BOX and VOL orders with dynamic management. */ stockRangeLower?: number; /** * The upper value for the acceptable underlying stock price range. * For price improvement option orders on BOX and VOL orders with dynamic management. */ stockRangeUpper?: number; /** * The option price in volatility, as calculated by TWS' Option Analytics. * This value is expressed as a percent and is used to calculate the limit price sent to the exchange. */ volatility?: number; /** * Values include: * - 1 - Daily Volatility * - 2 - Annual Volatility. */ volatilityType?: number; /** * Specifies whether TWS will automatically update the limit price of the order as the underlying price moves. * * VOL orders only. */ continuousUpdate?: number; /** * Specifies how you want TWS to calculate the limit price for options, and for stock range price monitoring. * * VOL orders only. * * Valid values include: * - 1 - Average of NBBO * - 2 - NBB or the NBO depending on the action and right. */ referencePriceType?: number; /** * Enter an order type to instruct TWS to submit a delta neutral trade on full or partial execution of the VOL order. * * VOL orders only. * * For no hedge delta order to be sent, specify NONE. */ deltaNeutralOrderType?: string; /** * Use this field to enter a value if the value in the deltaNeutralOrderType field is an order type that requires an Aux price, such as a REL order. * * VOL orders only. */ deltaNeutralAuxPrice?: number; /** TODO document */ deltaNeutralConId?: number; /** TODO document */ deltaNeutralSettlingFirm?: string; /** TODO document */ deltaNeutralClearingAccount?: string; /** TODO document */ deltaNeutralClearingIntent?: string; /** Specifies whether the order is an Open or a Close order and is used when the hedge involves a CFD and and the order is clearing away. */ deltaNeutralOpenClose?: string; /** Used when the hedge involves a stock and indicates whether or not it is sold short. */ deltaNeutralShortSale?: boolean; /** * Has a value of 1 (the clearing broker holds shares) or 2 (delivered from a third party). * If you use 2, then you must specify a [[deltaNeutralDesignatedLocation]]. */ deltaNeutralShortSaleSlot?: number; /** Used only when [[deltaNeutralShortSaleSlot]] = 2. */ deltaNeutralDesignatedLocation?: string; /** TODO document. For EFP orders only. */ basisPoints?: number; /** TODO document. For EFP orders only. */ basisPointsType?: number; /** * Defines the size of the first, or initial, order component. * * For Scale orders only. */ scaleInitLevelSize?: number; /** * Defines the order size of the subsequent scale order components. * * For Scale orders only. Used in conjunction with scaleInitLevelSize(). */ scaleSubsLevelSize?: number; /** * Defines the price increment between scale components. * * For Scale orders only. This value is compulsory. */ scalePriceIncrement?: number; /** TODO document. For extended Scale orders. */ scalePriceAdjustValue?: number; /** TODO document. For extended Scale orders. */ scalePriceAdjustInterval?: number; /** TODO document. For extended Scale orders. */ scaleProfitOffset?: number; /** TODO document. For extended Scale orders. */ scaleAutoReset?: boolean; /** TODO document. For extended Scale orders. */ scaleInitPosition?: number; /** TODO document. For extended Scale orders. */ scaleInitFillQty?: number; /** TODO document. For extended Scale orders. */ scaleRandomPercent?: boolean; /** * For hedge orders. * * Possible values include: * - D - delta * - B - beta * - F - FX * - P - Pair */ hedgeType?: string; /** Beta = x for Beta hedge orders, ratio = y for Pair hedge order */ hedgeParam?: string; /** The account the trade will be allocated to. */ account?: string; /** * Institutions only. * * Indicates the firm which will settle the trade. */ settlingFirm?: string; /** * Specifies the true beneficiary of the order. * * For IBExecution customers. * * This value is required for FUT/FOP orders for reporting to the exchange. */ clearingAccount?: string; /** * For execution-only clients to know where do they want their shares to be cleared at. * Valid values are: IB, Away, and PTA (post trade allocation). */ clearingIntent?: string; /** * The algorithm strategy. * * As of API version 9.6, the following algorithms are supported: * - ArrivalPx - Arrival Price * - DarkIce - Dark Ice * - PctVol - Percentage of Volume * - Twap - TWAP (Time Weighted Average Price) * - Vwap - VWAP (Volume Weighted Average Price) * * For more information about IB's API algorithms, refer to https://www.interactivebrokers.com/en/software/api/apiguide/tables/ibalgo_parameters.htm. */ algoStrategy?: string; /** * The list of parameters for the IB algorithm. * * For more information about IB's API algorithms, refer to https://www.interactivebrokers.com/en/software/api/apiguide/tables/ibalgo_parameters.htm. */ algoParams?: TagValue[]; /** * Allows to retrieve the commissions and margin information. * * When placing an order with this attribute set to `true, the order will not be placed as such. * Instead it will used to request the commissions and margin information that would result from this order. */ whatIf?: boolean; /** TODO document. */ algoId?: string; /** * Orders routed to IBDARK are tagged as “post only” and are held in IB's order book, * where incoming SmartRouted orders from other IB customers are eligible to trade against them. * * For IBDARK orders only. */ notHeld?: boolean; /** * Advanced parameters for Smart combo routing. * * These features are for both guaranteed and non-guaranteed combination orders routed to Smart, and are available based on combo type and order type. * SmartComboRoutingParams is similar to AlgoParams in that it makes use of tag/value pairs to add parameters to combo orders. * * Make sure that you fully understand how Advanced Combo Routing works in TWS itself first: https://www.interactivebrokers.com/en/software/tws/usersguidebook/specializedorderentry/advanced_combo_routing.htm * * The parameters cover the following capabilities: * * - Non-Guaranteed - Determine if the combo order is Guaranteed or Non-Guaranteed. * * Tag = NonGuaranteed * * Value = 0: The order is guaranteed * * Value = 1: The order is non-guaranteed * * - Select Leg to Fill First - User can specify which leg to be executed first. * * Tag = LeginPrio * * Value = -1: No priority is assigned to either combo leg * * Value = 0: Priority is assigned to the first leg being added to the comboLeg * * Value = 1: Priority is assigned to the second leg being added to the comboLeg * * Note: The LeginPrio parameter can only be applied to two-legged combo. * * - Maximum Leg-In Combo Size - Specify the maximum allowed leg-in size per segment * * Tag = MaxSegSize * * Value = Unit of combo size * * - Do Not Start Next Leg-In if Previous Leg-In Did Not Finish - Specify whether or not the system should attempt to fill the next segment before the current segment fills. * * Tag = DontLeginNext * * * Value = 0: Start next leg-in even if previous leg-in did not finish * Value = 1: Do not start next leg-in if previous leg-in did not finish * * - Price Condition - Combo order will be rejected or cancelled if the leg market price is outside of the specified price range [CondPriceMin, CondPriceMax] * * Tag = PriceCondConid: The ContractID of the combo leg to specify price condition on * * Value = The ContractID * * Tag = CondPriceMin: The lower price range of the price condition * * Value = The lower price * * Tag = CondPriceMax: The upper price range of the price condition * * Value = The upper price */ smartComboRoutingParams?: TagValue[]; /** * List of Per-leg price following the same sequence combo legs are added. * * The combo price must be left unspecified when using per-leg prices. */ orderComboLegs?: OrderComboLeg[]; /** TODO document */ orderMiscOptions?: TagValue[]; /** For GTC orders. */ activeStartTime?: TagValue[]; /** For GTC orders. */ activeStopTime?: TagValue[]; /** Used for scale orders. */ scaleTable?: string; modelCode?: string; /** This is a regulatory attribute that applies to all US Commodity (Futures) Exchanges, provided to allow client to comply with CFTC Tag 50 Rules. */ extOperator?: string; /** Define the Soft Dollar Tier used for the order. Only provided for registered professional advisors and hedge and mutual funds. */ softDollarTier?: SoftDollarTier; /** The native cash quantity. */ cashQty?: number; /** * Identifies a person as the responsible party for investment decisions within the firm. * * Orders covered by MiFID 2 (Markets in Financial Instruments Directive 2) must include either [[mifid2DecisionMaker]] or [[mifid2DecisionAlgo]] field (but not both). * * Requires TWS 969+. */ mifid2DecisionMaker?: string; /** * Identifies the algorithm responsible for investment decisions within the firm. * Orders covered under MiFID 2 must include either [[mifid2DecisionMaker]] or [[mifid2DecisionAlgo]], but cannot have both. * * Requires TWS 969+. */ mifid2DecisionAlgo?: string; /** * For MiFID 2 reporting; identifies a person as the responsible party for the execution of a transaction within the firm. * * Requires TWS 969+. */ mifid2ExecutionTrader?: string; /** * For MiFID 2 reporting; identifies the algorithm responsible for the execution of a transaction within the firm. * * Requires TWS 969+. */ mifid2ExecutionAlgo?: string; /** Don't use auto price for hedge. */ dontUseAutoPriceForHedge?: boolean; /** TODO: document */ autoCancelDate?: string; /** TODO: document */ filledQuantity?: number; /** TODO: document */ refFuturesConId?: number; /** TODO: document */ autoCancelParent?: boolean; /** TODO: document */ shareholder?: string; /** TODO: document */ imbalanceOnly?: boolean; /** TODO: document */ routeMarketableToBbo?: boolean; /** TODO: document */ parentPermId?: number; /** TODO: document */ randomizeSize?: boolean; /** TODO: document */ randomizePrice?: boolean; /** Pegged-to-benchmark orders: this attribute will contain the conId of the contract against which the order will be pegged. */ referenceContractId?: number; /** Pegged-to-benchmark orders: indicates whether the order's pegged price should increase or decreases. */ isPeggedChangeAmountDecrease?: boolean; /** Pegged-to-benchmark orders: amount by which the order's pegged price should move. */ peggedChangeAmount?: number; /** Pegged-to-benchmark orders: the amount the reference contract needs to move to adjust the pegged order. */ referenceChangeAmount?: number; /** Pegged-to-benchmark orders: the exchange against which we want to observe the reference contract. */ referenceExchangeId?: string; /** Adjusted Stop orders: the parent order will be adjusted to the given type when the adjusted trigger price is penetrated. */ adjustedOrderType?: string; /** TODO: document */ triggerPrice?: number; /** TODO: document */ lmtPriceOffset?: number; /** Adjusted Stop orders: specifies the stop price of the adjusted (STP) parent. */ adjustedStopPrice?: number; /** Adjusted Stop orders: specifies the stop limit price of the adjusted (STPL LMT) parent. */ adjustedStopLimitPrice?: number; /** Adjusted Stop orders: specifies the trailing amount of the adjusted (TRAIL) parent. */ adjustedTrailingAmount?: number; /** Adjusted Stop orders: specifies where the trailing unit is an amount (set to 0) or a percentage (set to 1) */ adjustableTrailingUnit?: number; /** Conditions determining when the order will be activated or canceled. */ conditions?: OrderCondition[]; /** Indicates whether or not conditions will also be valid outside Regular Trading Hours. */ conditionsIgnoreRth?: boolean; /** Conditions can determine if an order should become active or canceled. */ conditionsCancelOrder?: boolean; /** Define the Soft Dollar Tier used for the order. Only provided for registered professional advisors and hedge and mutual funds. */ tier?: SoftDollarTier; /** Set to `true` to create tickets from API orders when TWS is used as an OMS. */ isOmsContainer?: boolean; /** Set to `true` to convert order of type 'Primary Peg' to 'D-Peg'. */ discretionaryUpToLimitPrice?: boolean; /** TODO: document */ usePriceMgmtAlgo?: boolean; /** Specifies the duration of the order. Format: yyyymmdd hh:mm:ss TZ. For GTD orders. */ duration?: number; /** Value must be positive, and it is number of seconds that SMART order would be parked for at IBKRATS before being routed to exchange. */ postToAts?: number; /** Accepts a list with parameters obtained from advancedOrderRejectJson */ advancedErrorOverride?: string; /** Used by brokers and advisors when manually entering, modifying or cancelling orders at the direction of a client. Only used when allocating orders to specific groups or accounts. Excluding "All" group. */ manualOrderTime?: string; /** Defines the minimum trade quantity to fill. For IBKRATS orders. */ minTradeQty?: number; /** Defines the minimum size to compete. For IBKRATS orders. */ minCompeteSize?: number; /** Specifies the offset Off The Midpoint that will be applied to the order. For IBKRATS orders. */ competeAgainstBestOffset?: number; /** This offset is applied when the spread is an even number of cents wide. This offset must be in whole-penny increments or zero. For IBKRATS orders. */ midOffsetAtWhole?: number; /** This offset is applied when the spread is an odd number of cents wide. This offset must be in half-penny increments. For IBKRATS orders. */ midOffsetAtHalf?: number; customerAccount?: string; professionalCustomer?: boolean; bondAccruedInterest?: string; includeOvernight?: boolean; manualOrderIndicator?: number; } export declare const COMPETE_AGAINST_BEST_OFFSET_UP_TO_MID: number; export declare const isCompeteAgainstBestOffsetUpToMid: (order: Order) => boolean; export default Order;