back start next

[start] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [ 43 ] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93] [94] [95] [96] [97] [98] [99] [100] [101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120] [121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134]


A few considerations may illustrate the behavior of Equation 4.43. If the data in the window are of good quality, the window is of small size. As soon as a cluster of low-quality or doubtful data enters the window, it will grow (sometimes to a very large size) until the situation becomes clearer and most old quotes can be dismissed again. In the case of a sparse time series, the window may contain few quotes but these quotes will extend further in time than for a dense time series. After dismissing the oldest quote when Equation 4.43 is fulfilled, the whole quote dismissal procedure is repeated as long as the remaining window still satisfies Equation 4.43.

In very rare cases, the window grows to a very large size and the filtering algorithm becomes slow. This problem and its solution are discussed in Section 4.5.6. Aside from this, another safety measure is taken where a quote older than 300 days is dismissed from the window even if Equation 4.43 is not fulfilled, as long as the remaining window still has at least two quotes.

Dismissed scalar quotes are also reported to the higher level of the filtering algorithm. This is necessary in the case of historical filtering for producing the final filtering results.

4.5.5 Updating the Statistics with Credible Scalar Quotes

When a scalar quote is dismissed from the window, its credibility C, has reached a final value that will no longer be changed where C, = C(Tj) results from Equation 4.1. This is the right moment to update all the statistics needed for the adap-tivity of the filter.

Invalid quotes are excluded from these statistics and they are simply ignored when updating the statistical variables. We set a critical credibility level Ccnt where only quotes with credibility values above Ccrit are used for updating the statistics. However, we should not be too rigid when excluding quotes. The filter has to adapt to unexpected events such as sudden volatility increases, but this requires including also some mildly rejected quotes. In fact, tests have shown that only the totally invalid quotes should be excluded here. We choose a low critical credibility level. In the initial phase, right after a filter starts from initialization (before having seen 10 acceptable quotes), we take a larger, more cautious value.

If a dismissed quote has a credibility C, > Ccnt, we update all the statistics. These updates typically imply the computation of moving average iteration formulas, and the statistics are explained in Sections 4.4.2 through 4.4.6.

4.5.6 A Second Scalar Window for Old Valid Quotes

The quote dismissal rale of Equation 4.43 makes sure that the scalar window stays reasonably small-except in the case of a very long series of bad quotes. Such long, rarely occurring series usually consist of computerized quotes (e.g., repeated or monotonic quotes). The filtering window technology as described so far is well able to handle this case, but the computation time of the filter grows very much

in the case of a very large window. In real time, this does not really matter, but historical filtering becomes slow.

For efficiency reasons, the filter therefore supports a second queue of old valid quotes. The normal scalar window size is strictly limited to a maximum number of quotes, but an old quote dismissed from the normal window is stored in a second scalar window if its credibility exceeds a low threshold value. Otherwise, the dismissed quote is treated as any dismissed quote, as explained before, including the updating of statistics and the final reporting of its credibility.

This second scalar window of old valid quotes is normally empty. As soon as one or more dismissed quotes are in this window, it is treated as a part of the normal scalar window in all computations. The trust capital computation of Equation 4.32, for example, has a sum over both scalar windows, starting at the window of old valid quotes. The window of old valid quotes stays and possibly grows as long as the quote dismissal condition (applied to the two joined scalar windows) is not fulfilled. When the condition is fulfilled, the oldest quote of the scalar window of old valid quotes is deleted. After deleting all of its quotes, the second window is again empty and filtering is back to the normal mode.

The concept of a second scalar filtering window for old valid quotes adds quite some complexity to the filter and is motivated only by computational efficiency.


The full-quote filtering window is managed on hierarchy level 2 of Table 4.1. It is basically a sequence of recent full quotes plus a set of algorithmic methods of managing and processing this sequence. The full-quote filtering window has the following tasks:

Splitting the quotes into scalar quotes that can be used in the filtering operations of Section 4.4.

A first basic validity test for the filtered variables. This is usually a domain test (e.g., rejecting negative prices). Rejected scalar quotes are marked as invalid ( ,- = 0) and eliminated from all further tests. They do not enter a scalar filtering window.

Tn many cases, a transformation of the quoted level such as taking logarithms of prices instead of raw price values.

Creating independent filtering environments for all types of scalar quotes, each with its own scalar filtering window.

Storing the credibility of dismissed scalar quotes until all the other scalar quotes belonging to the same full quote have also been dismissed. (The spread filter may dismiss quotes before the bid price filter, for example.)

Storing the full quotes as long as two or more filtering hypotheses coexist, until one of them wins. This is decided by the next higher hierarchy level (see Section 4.7). The decision between filtering hypotheses can also be made fast enough to make this point superfluous.

When a full quote is finally dismissed, reporting it, together with its filtering results, to the higher level (needed only in historical filtering).

In principle, the full-quote filtering window also offers the opportunity of analyzing those data errors that affect full quotes in a way that cannot be analyzed when just looking at scalar quotes after splitting. In our experience, we have never found a good reason to implement this (aside from the filtering hypotheses discussed in Section 4.7).

The full quotes may enter a full-quote filtering window in a form already corrected by a filtering hypothesis. This fact plays no role here since the algorithm of the full-quote window does not care about quote corrections. This is managed on a higher level. The most important task of the full-quote filtering window is quote splitting.

4.6.1 Quote Splitting Depending on the Instrument Type

Quotes can have complex structures as explained in Section 4.2.1. The filter follows the guideline of quote splitting, which is motivated by the goals of modularity and transparency. Instead of trying to formulate complex algorithms for complex data structures, we split the quotes into scalar quotes that are individually filtered, wherever possible. Some filtering operations are done on a higher level before splitting as explained in Section 4.7.

The quote splitting unit has the task of splitting the stream of full quotes into streams of different filtered variables, each with its scalar quotes that are used in the filtering operations of Section 4.4.

Some quotes, such as bid-ask or open/high/low/close quotes, are splittable by nature. Only the bid-ask case is discussed here as many instruments come in the form of bid-ask quotes. Other instruments have single-valued quotes. Bid-ask quotes are split into three scalar quotes:

Bid quote

Ask quote

Bid-ask spread

Other instruments have single-valued quotes, which are "split" into one scalar quote:

The "level" quote

This is not as trivial as it looks because quote splitting is coupled with two other operations: basic validity testing and mathematical transformations, as will be explained. The user of the filter has to know whether an instrument has single-valued or bid-ask quotes and has to select or configure the filter accordingly.

4.6.2 The Basic Validity Test

Many quotes have a natural lower limit in a predetermined domain. This instrument-dependent information has an impact on quote splitting and needs to be

[start] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [ 43 ] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93] [94] [95] [96] [97] [98] [99] [100] [101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120] [121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134]