fintech-algorithms
Using a coding agent? Give it the skill: npx skills add IslamBaraka90/Fintech-Algorithms-Library What it does →

Volatility-Auction Reopening

Install and import#

bash
npm install fintech-algorithms
ts
import { volatilityAuctionReopening } from "fintech-algorithms/matching-engines-and-venue-logic/auctions/volatility-auction-reopening";

Signature#

volatilityAuctionReopening(inputs)

Decides, from an already-determined corridor state, whether continuous trading carries on, the auction has no executable quantity, the indicative price may reopen the book, or the auction must be extended. The dynamic and static corridors are both built from a reference and a band percentage, and the reopening test uses each corridor widened by the extension multiplier. The algorithm does not build a book or discover a price; the indicative price and executable quantity are supplied.

Parameters#

NameTypeNotes
inputs{ reference_price, dynamic_reference, dynamic_band_pct, static_reference, static_band_pct, potential_continuous_price, indicative_auction_price, extended_band_multiplier, executable_quantity }Nine scalars. The first eight must be finite and positive; extended_band_multiplier must be at least one and executable_quantity must be finite and nonnegative. No order arrays are taken.

Returns#

{ model, reference_price, potential_continuous_price, dynamic_corridor, static_corridor, dynamic_breach, static_breach, triggered, indicative_auction_price, executable_quantity, expanded_dynamic_corridor, expanded_static_corridor, inside_reopening_corridor, reopened, reopen_price, reason, state }

Both active corridors and both expanded corridors as [low, high] pairs, the per-corridor breach flags and their disjunction, whether the indicative price sits inside both expanded corridors, and a state of continuous, auction-no-cross, reopened or extended-volatility-auction with the reason that produced it. reopen_price is the indicative price when the state is reopened and null otherwise.

Errors#

  • When inputs is not an object — throws
  • When any scalar is missing, non-numeric or non-finite — throws
  • When a price, reference or band percentage is not positive — throws
  • When extended_band_multiplier is below one — throws
  • When executable_quantity is negative — throws

Complexity: time O(1), space O(1).

Worked example#

executed Captured by running this function on the input its own test provides. Real output of real code — but not asserted against a published figure.

Input#

inputs
{
  "reference_price": 100,
  "dynamic_reference": 100,
  "dynamic_band_pct": 0.02,
  "static_reference": 98,
  "static_band_pct": 0.05,
  "potential_continuous_price": 103,
  "indicative_auction_price": 101.5,
  "extended_band_multiplier": 2,
  "executable_quantity": 500
}

Call#

volatilityAuctionReopening(inputs)

Returns#

object with 17 fields: model, reference_price, potential_continuous_price, dynamic_corridor, static_corridor, dynamic_breach, static_breach, triggered, …

{
  "model": "dual-corridor-volatility-auction-reopening",
  "reference_price": 100,
  "potential_continuous_price": 103,
  "dynamic_corridor": [98, 102],
  "static_corridor": [93.1, 102.9],
  "dynamic_breach": true,
  "static_breach": true,
  "triggered": true,
  "indicative_auction_price": 101.5,
  "executable_quantity": 500,
  "expanded_dynamic_corridor": [96, 104],
  "expanded_static_corridor": [88.2, 107.80000000000001],
  "inside_reopening_corridor": true,
  "reopened": true
}

Showing 14 of 17 fields.

Other exports#

This module also exports maximumExecutableVolumeAuction, minimumImbalanceTieBreak, openingCrossPrice, closingCrossPrice, calculate. Every module additionally exports run as an alias of its primary function, and a meta object carrying its catalog id, domain, family, shape and article URL.

Diagrams#

Volatility-Auction Reopening — system map

Calculation flow#

Volatility-Auction Reopening calculation flow
flowchart LR
    S1["Validate references percentages multiplier and quantit"]
    S2["Test potential price against both active corridors"]
    S3["Enter volatilityauction state on either strict breach"]
    S4["Test indicative price against both expanded corridors"]
    S5["Reopen remain nocross or extend with a reason"]
    S1 --> S2
    S2 --> S3
    S3 --> S4
    S4 --> S5
    S5 --> D{"endpoint equality nocross and onecorridoronly failure"}
    D --> O["reopened + diagnostics"]
    O --> A["Audit: Equality at any corridor endpoint is inside"]

How it works#

This page states the contract — how to call it correctly. The article explains the concept: why it works, and where it breaks.

Read the article →

References#

The rest of the Auctions family#