Advanced Clustering Technique For High-Frequency Low-Latency Analysis

Advanced Clustering Technique For High-Frequency Low-Latency Analysis

After configuring the backtesting scenario, data is streamed to ExSan to identify clusters that will subsequently be utilized for constructing the covariance matrix. This process is fundamental to modern portfolio theory, particularly due to the asynchronous nature of market data. Only clusters with overlapping time periods (i.e., concurrent in time) are eligible for inclusion in the estimation of the covariance matrix.

The aim of this work is to establish Covariance and Correlation of Asynchronous Market Tick Data Using Cluster Computing. An algorithm is implemented to correlate asynchronous tick data from the market using cluster computing. Each asset generates a unique number of ticks distributed over a given time frame, with some assets being more active and others less so, reflecting varying levels of volatility and activity.

Challenges Addressed

  • Asynchronous Nature: Each asset's ticks arrive at its own unique pace.
  • Varied Volatility: Different assets exhibit varying levels of activity and fluctuation.
  • Achieving Ultra-Low Latency Through Static Memory Allocation: High-frequency trading systems rely heavily on optimized memory management to achieve ultra-low latency. ExSan employs clusters instantiated with static memory declarations, ensuring that memory remains pre-allocated and readily accessible for subsequent operations, thus eliminating the overhead associated with dynamic allocation. By leveraging effective key management within Red-Black tree nodes, ExSan achieves precise control over memory usage for each cluster during iterative computations. This architecture minimizes latency, reduces computational overhead, and maximizes throughput by streamlining memory allocation and resource reuse.

    Performing some kind of extreme test under strict timing.
    Total Number of assets allocated: 40     clusters: 20 per asset(stock)     time lapse: 3333 microseconds
    OLD Version Cluster NOT DECLARED STATIC
    xsnPortfolio_0222 Elapsed Time: 161 sec
    xsnPortfolio_0627 Elapsed Time: 30 sec
    xsnPortfolio_0906 Elapsed Time: 748 sec
    xsnPortfolio_3115 Elapsed Time: 484 sec
    xsnPortfolio_4504 Elapsed Time: 403 sec

    New Version Cluster DECLARED STATIC !
    xsnPortfolio_2903 Elapsed Time: 1.40 sec
    xsnPortfolio_2927 Elapsed Time: 2.93 sec
    xsnPortfolio_2951 Elapsed Time: 4.42 sec
    xsnPortfolio_3020 Elapsed Time: 2.75 sec
    xsnPortfolio_3045 Elapsed Time: 2.79 sec
    xsnPortfolio_4022 Elapsed Time: 4.24 sec
    xsnPortfolio_4112 Elapsed Time: 12.01 sec
    xsnPortfolio_4304 Elapsed Time: 6.21 sec

  • Pseudo Code

    tau <- Set time lag

    startChrono

    while endChrono - startChrono < tau

        feed Data Market to ExSan into current cluster

    endChrono

    ExSan Abstract Structure

    Clusters

    ExSan + Clusters

    Remark: All clusters are implemented as Red-Black Trees to ensure consistency with the earlier description of ExSan. This implementation leverages a single C++ master template, designed and implemented only once, eliminating the need for additional coding. The master template manages all cluster-related functionality, ensuring uniformity, efficiency, and maintainability across the system, which is central to ExSan's architecture.

    ExSan was conceived 35 years ago, when it first started as a coding project. The original version was written in C and was later rewritten in C++. From the very beginning, the project was based on Red-Black Trees.

    This LinkedIn post highlights the significance of Red-Black Trees as a foundational component in a series of articles focused on Quantitative Finance. During ExSan’s conception and development, it was not evident that similar concepts utilizing Red-Black Trees were being explored by others. This underscores the independent and innovative thought process behind ExSan’s creation.

    Output

          1     |ExSan| C++  |ExSan|                    Sun Dec 15 08:51:29 2024

         2    JOB:  xsnPortfolio_5129        

         3    <--------e-x-s-a-n---------->

         4     Generate Exsan ( 23 ,  24 )

         5    Total Number of assets allocated:  22  Lapse Microseconds:  7  

         6    |<--------e-x-s-a-n---hft------->|

         7    :2291: Catching Clusters This round ExSan(stocks: 22, 2 :clusters)

         8    :2292: Selected Stocks |aryStockAux| Weighted Vals in Clusters ppDataIn: 9

         9    WORKSHEET 9  I[5, 2] FLOAT

         10                              A     B 

         11                              >--------------<

         12     0           0.00  ATLU    2:272.95 278.50 

         13     0           0.00  ARNA    4: 62.00  63.20 

         14     0           0.00  ANRA    5: 11.50  11.50 

         15                              <-------------->

         16                                   1      2

         17    :2321: CATCHING CLUSTERS Clocking - Time Lapse Range  

         18    ATLU    1 [10.99 <-> 10.99]2 [11.30 <-> 12.03]

         19    ARNA    1 [11.07 <-> 11.07]2 [11.42 <-> 11.42]

         20    ANRA    1 [11.12 <-> 11.12]2 [12.00 <-> 12.00]

         21 

         22    *** The time range of Cluster j, defined as [min, max], falls within the overall time window *** 

         23            [10.99 <-> 11.12]   [11.30 <-> 12.03]

         24       

         25    ENDS  xsnPortfolio_5129   Elapsed Time: 0.04  sec

         26    Version BOOST: 1.83.0   EXSAN @ MS VSC 2022 (64b) - 17.11.5 -toolSet(v143)

         27    EXIT FROM EXSAN 

         28    

         29    *************************************************************************   

         30    |ExSan| C++  |ExSan|                                 Sun Dec 15 08:55:56 2024

         31    JOB:  xsnPortfolio_5556

         32    <--------e-x-s-a-n---------->

         33     Generate Exsan ( 23 ,  24 )

         34    Total Number of assets allocated:  22  Lapse Microseconds:  10  

         35    |<--------e-x-s-a-n---hft------->|   

         36    :2291: Catching Clusters This round ExSan(stocks: 22, 3 :clusters)

         37    :2292: Selected Stocks |aryStockAux| Weighted Vals in Clusters ppDataIn: 9

         38    WORKSHEET 9  I[14, 3] FLOAT

         39                              A      B      C 

         40                              >---------------------<

         41     0           0.00  ATHN    5: 27.76  31.13  31.37 

         42     0           0.00  AKSH    6: 97.88 103.79 106.30 

         43     0           0.00  ARNA    7: 74.60  73.40  71.70 

         44     0           0.00  ANRA    8: 13.40  11.50  11.90 

         45     0           0.00  ADVN   10:139.33 144.56 151.75 

         46     0           0.00  ARAC   12: 12.93  12.47  12.84 

         47     0           0.00   ALV   13: 58.05  55.07  55.22 

         48     0           0.00  ANUL   14: 10.90  10.88  10.78 

         49                              <--------------------->

         50                                        1     2     3

         51 

         52    :2321: CATCHING CLUSTERS Clocking - Time Lapse Range  

         53    ATHN    1 [ 10.43  <-> 10.55]2 [ 11.31  <->  12.23 ]3 [12.81 <-> 12.81]

         54    AKSH    1 [10.51 <-> 10.51]2 [11.56 <-> 12.04]3 [13.13 <-> 13.13]

         55    ARNA    1 [10.59 <-> 11.16]2 [11.89 <-> 11.89]3 [12.50 <-> 12.92]

         56    ANRA    1 [10.72 <->  11.23 ]2 [11.68 <-> 11.68]3 [12.74 <-> 12.96]

         57    ADVN    1 [10.84 <-> 10.84]2 [11.75 <-> 11.75]3 [ 12.43  <-> 12.84]

         58    ARAC    1 [10.96 <-> 10.96]2 [12.08 <-> 12.08]3 [12.47 <-> 13.10]

         59    ALV     1 [11.02 <-> 11.19]2 [12.01 <-> 12.01]3 [12.67 <->  13.16 ]

         60    ANUL    1 [11.07 <-> 11.13]2 [11.79 <-> 11.98]3 [12.56 <-> 13.03]

         61 

         62    *** The time range of Cluster j, defined as [min, max], falls within the overall time window *** 

         63             [10.43 <-> 11.23]   [11.31 <-> 12.23]   [12.43 <-> 13.16]

         64    

         65    ENDS  xsnPortfolio_5556   Elapsed Time: 0.04  sec

         66    Version BOOST: 1.83.0   EXSAN @ MS VSC 2022 (64b) - 17.11.5 -toolSet(v143)

         67    EXIT FROM EXSAN 

          1     |ExSan| C++  |ExSan|                    Sun Dec 15 08:51:29 2024

         2    JOB:  xsnPortfolio_5129        

         3    <--------e-x-s-a-n---------->

         4     Generate Exsan ( 23 ,  24 )

         5    Total Number of assets allocated:  22  Lapse Microseconds:  7  

         6    |<--------e-x-s-a-n---hft------->|

         7    :2291: Catching Clusters This round ExSan(stocks: 22, 2 :clusters)

         8    :2292: Selected Stocks |aryStockAux| Weighted Vals in Clusters ppDataIn: 9

         9    WORKSHEET 9  I[5, 2] FLOAT

         10                              A     B 

         11                              >--------------<

         12     0           0.00  ATLU    2:272.95 278.50 

         13     0           0.00  ARNA    4: 62.00  63.20 

         14     0           0.00  ANRA    5: 11.50  11.50 

         15                              <-------------->

         16                                   1      2

         17    :2321: CATCHING CLUSTERS Clocking - Time Lapse Range  

         18    ATLU    1 [10.99 <-> 10.99]2 [11.30 <-> 12.03]

         19    ARNA    1 [11.07 <-> 11.07]2 [11.42 <-> 11.42]

         20    ANRA    1 [11.12 <-> 11.12]2 [12.00 <-> 12.00]

         21 

         22    *** The time range of Cluster j, defined as [min, max], falls within the overall time window ***    

         23            [10.99 <-> 11.12]   [11.30 <-> 12.03]

         24       

         25    ENDS  xsnPortfolio_5129   Elapsed Time: 0.04  sec

         26    Version BOOST: 1.83.0   EXSAN @ MS VSC 2022 (64b) - 17.11.5 -toolSet(v143)

         27    EXIT FROM EXSAN 

         28    

         29    

         30    *************************************************************************   

         31    |ExSan| C++  |ExSan|                                 Sun Dec 15 08:55:56 2024

         32    JOB:  xsnPortfolio_5556

         33    <--------e-x-s-a-n---------->

         34     Generate Exsan ( 23 ,  24 )

         35    Total Number of assets allocated:  22  Lapse Microseconds:  10  

         36    |<--------e-x-s-a-n---hft------->|   

         37    :2291: Catching Clusters This round ExSan(stocks: 22, 3 :clusters)

         38    :2321: CATCHING CLUSTERS Clocking - Time Lapse Range  

         39    ATHN    1 [10.43 <-> 10.55]2 [11.31 <-> 12.23]3 [12.81 <-> 12.81]

         40    AKSH    1 [10.51 <-> 10.51]2 [11.56 <-> 12.04]3 [13.13 <-> 13.13]

         41    ARNA    1 [10.59 <-> 11.16]2 [11.89 <-> 11.89]3 [12.50 <-> 12.92]

         42    ANRA    1 [10.72 <-> 11.23]2 [11.68 <-> 11.68]3 [12.74 <-> 12.96]

         43    ADVN    1 [10.84 <-> 10.84]2 [11.75 <-> 11.75]3 [12.43 <-> 12.84]

         44    ARAC    1 [10.96 <-> 10.96]2 [12.08 <-> 12.08]3 [12.47 <-> 13.10]

         45    ALV     1 [11.02 <-> 11.19]2 [12.01 <-> 12.01]3 [12.67 <-> 13.16]

         46    ANUL    1 [11.07 <-> 11.13]2 [11.79 <-> 11.98]3 [12.56 <-> 13.03]

         47 

         48    *** The time range of Cluster j, defined as [min, max], falls within the overall time window ***    

         49            [10.43 <-> 11.23]  [11.31 <-> 12.23]  [12.43 <-> 13.16]

         50    

         51    ENDS  xsnPortfolio_5556   Elapsed Time: 0.04  sec

         52    EXIT FROM EXSAN 

         53    

         54    

         55    *************************************************************************

         56    |ExSan| C++  |ExSan|                                 Sun Dec 15 08:55:56 2024

         57    JOB:  xsnPortfolio_5556

         58    :2321: CATCHING CLUSTERS Clocking - Time Lapse Range  

         59    ANUL    1[ 9.74 <-> 10.04] 2[10.43 <-> 11.01] 3[11.66 <-> 11.96] 4[12.96 <-> 13.19] 5[13.88 <-> 13.88]

         60    ASCMA   1[ 9.89 <-> 9.89]  2[11.25 <-> 11.25] 3[11.80 <-> 11.80] 4[13.16 <-> 13.16] 5[13.39 <-> 13.72]

         61    ADVN    1[ 9.96 <-> 9.96]  2[10.46 <-> 10.99] 3[11.47 <-> 12.23] 4[12.63 <-> 12.63] 5[13.50 <-> 13.93]

         62    AMRN    1[10.13 <-> 10.19] 2[11.05 <-> 11.05] 3[12.13 <-> 12.13] 4[12.86 <-> 12.90] 5[14.19 <-> 14.19]

         63 

         64    *** The time range of Cluster j, defined as [min, max], falls within the overall time window ***    

         65            [9.74  <-> 10.19]  [10.43 <-> 11.25]  [11.47 <-> 12.23]  [12.63 <-> 13.19]  [13.39 <-> 14.19]

         66    ENDS  xsnPortfolio_4449   Elapsed Time: 0.04  sec

         67    

         68    

         69    ----MORE RESULTS---       

         70    *************************************************************************   

         71    :2321: CLUSTERS CATCHING Clocking - Time Lapse Range  

         74 

         75    *** The time range of Cluster j, defined as [min, max], falls within the overall time window ***    

         77    

         78    EXIT FROM EXSAN 

         79    *************************************************************************   

         80    :2321: CLUSTERS CATCHING Clocking - Time Lapse Range  

         81    ASCMA 4[215.40 <-> 215.40] 5[216.37 <-> 216.37] 1[217.81 <-> 217.81] 2[218.35 <-> 218.95] 3[219.88 <-> 219.88]

         82    CAR   2[215.83 <-> 216.02] 3[216.70 <-> 216.70] 4[217.33 <-> 217.41] 5[218.50 <-> 218.62] 1[220.01 <-> 220.01]

         83    ADVN  3[215.24 <-> 215.24] 4[216.95 <-> 216.95] 5[217.38 <-> 217.38] 1[218.87 <-> 218.87] 2[219.96 <-> 219.96]

         84    BMY   1[215.28 <-> 215.28] 2[216.42 <-> 216.58] 3[217.78 <-> 217.78] 4[218.43 <-> 218.69] 5[219.39 <-> 219.39]

         85 

         86    *** The time range of Cluster j, defined as [min, max], falls within the overall time window ***    

         87            [215.24 <-> 216.02]  [216.37 <-> 216.95]  [217.33 <-> 217.81]  [218.35 <-> 218.95]  [219.39 <-> 220.01]

         88    EXIT FROM EXSAN 

         89    *************************************************************************

         90    :2321: CLUSTERS CATCHING Clocking - Time Lapse Range  

         91    CAR  5[21671.61 <-> 21671.61] 1[21672.59 <-> 21672.59] 2[21673.81 <-> 21673.81] 3[21674.74 <-> 21674.74] 4[21676.42...]

         92    BF   2[21671.70 <-> 21671.70] 3[21673.39 <-> 21673.39] 4[21674.21 <-> 21674.21] 5[21675.02 <-> 21675.02] 1[21675.65...]

         93    AKS  4[21671.77 <-> 21671.97] 5[21672.56 <-> 21672.89] 1[21673.65 <-> 21673.65] 2[21675.35<->21675.35] 3[21676.05<->...]

         94    ARNA 1[21672.09 <-> 21672.09] 2[21672.70 <-> 21673.10] 3[21674.29 <-> 21674.29] 4[21674.94 <-> 21674.94] 5[21675.86<...]

         95    AAL  5[21672.18 <-> 21672.18] 1[21672.77 <-> 21672.77] 2[21674.25 <-> 21674.25] 3[21674.55 <-> 21675.32] 4[21676.29<...]

         96    BLGS 5[21672.28 <-> 21672.32] 1[21673.18 <-> 21673.18] 2[21673.78 <-> 21673.78] 3[21674.63 <-> 21674.63] 4[21676.13<...]

         97    C    3[21671.66 <-> 21671.66] 4[21673.01 <-> 21673.01] 5[21674.33 <-> 21674.33] 1[21674.90 <-> 21675.27] 2[21675.82<...]

         98 

         99    *** The time range of Cluster j, defined as [min, max], falls within the overall time window ***    

         100       [21671.61 <-> 21672.32]  [21672.56 <-> 21673.39]  [21673.65 <-> 21674.33]  [21674.55 <-> 21675.35]  [21675.65...

        101     NO OVERLAPPING TIME FRAMES, ALL CLUSTER FIT PROPERLY

        101    EXIT FROM EXSAN 

        102    ***************************  E  N   D  *****************************************

        103    


    Traversing data for each cluster

          1 

         2    |ExSan| C++  |ExSan|                                 Mon Dec 16 07:27:53 2024

         3 

         4    JOB:  xsnPortfolio_2753

         5    <--------e-x-s-a-n---------->

         6     Generate Exsan ( 7 ,  8 )

         7    CLUSTERING ENABLE

         8    microSecTimeLapse:   1000  Lapse Microseconds:  1000   minTics:  77777  maxTics:  77777   

         9    |<--------e-x-s-a-n---hft------->|

         10 

         11     I[6, 3] *Matrix of Weighted Clusters*

         12                                    A      B      C 

         13                              >---------------------<

         14     0           0.00  TFSM    2: 71.77  69.80  71.21 

         15     0           0.00  MSFT    3: 24.40  23.09  23.47 

         16     0           0.00  AAPL    4: 22.30  21.45  21.18 

         17     0           0.00  XLFN    6:158.75 146.25 158.02 

         18                              <--------------------->

         19                                     1     2     3

         20 

         21    :2321: CLUSTERS CATCHING Clocking - Time Lapse Range  

         22    TFSM 1[9.95 <-> 10.65] 2[10.98 <-> 11.74] 3[11.90 <-> 13.56]

         23    (2  ,1  ):

         24    pp: 9  71.77   -> 

         25       1   2024-Dec-16 07:27:53.294270   pnt: 0  71.77  

         26       2   2024-Dec-16 07:27:53.294270   pnt: 0  71.15  

         27       4   2024-Dec-16 07:27:53.294270   pnt: 0  69.99  

         28       6   2024-Dec-16 07:27:53.294270   pnt: 0  69.98  

         29       8   2024-Dec-16 07:27:53.294270   pnt: 0  69.46  

         30 

         31    (2  ,2  ):

         32    pp: 9  69.80   -> 

         33       1   2024-Dec-16 07:27:53.295271   pnt: 0  68.57  

         34       3   2024-Dec-16 07:27:53.295271   pnt: 0  69.08  

         35       5   2024-Dec-16 07:27:53.295271   pnt: 0  68.17  

         36       7   2024-Dec-16 07:27:53.295271   pnt: 0  68.93  

         37       9   2024-Dec-16 07:27:53.295271   pnt: 0  68.49  

         38       11   2024-Dec-16 07:27:53.295271   pnt: 0  69.80  

         39 

         40    (2  ,3  ):

         41    pp: 9  71.21   -> 

         42       1   2024-Dec-16 07:27:53.296276   pnt: 0  69.21  

         43       3   2024-Dec-16 07:27:53.296276   pnt: 0  70.53  

         44       5   2024-Dec-16 07:27:53.296276   pnt: 0  71.21  

         45       7   2024-Dec-16 07:27:53.296276   pnt: 0  70.26  

         46       9   2024-Dec-16 07:27:53.296276   pnt: 0  70.27  

         47       11   2024-Dec-16 07:27:53.297269   pnt: 0  69.91  

         48       13   2024-Dec-16 07:27:53.297269   pnt: 0  70.87  

         49       15   2024-Dec-16 07:27:53.297269   pnt: 0  70.00  

         50       17   2024-Dec-16 07:27:53.297269   pnt: 0  69.90  

         51 

         52    MSFT 1[10.00 <-> 10.28] 2[11.38 <-> 11.78] 3[11.99 <-> 13.74]

         53    (3  ,1  ):

         54    pp: 9  24.40   -> 

         55       1   2024-Dec-16 07:27:53.294270   pnt: 0  24.40  

         56       2   2024-Dec-16 07:27:53.294270   pnt: 0  24.10  

         57       4   2024-Dec-16 07:27:53.294270   pnt: 0  24.02  

         58       6   2024-Dec-16 07:27:53.294270   pnt: 0  23.45  

         59       8   2024-Dec-16 07:27:53.294270   pnt: 0  22.99  

         60 

         61    (3  ,2  ):

         62    pp: 9  23.09   -> 

         63       1   2024-Dec-16 07:27:53.295271   pnt: 0  23.00  

         64       3   2024-Dec-16 07:27:53.295271   pnt: 0  22.68  

         65       5   2024-Dec-16 07:27:53.295271   pnt: 0  22.92  

         66       7   2024-Dec-16 07:27:53.295271   pnt: 0  23.09  

         67       9   2024-Dec-16 07:27:53.295271   pnt: 0  22.66  

         68 

         69    (3  ,3  ):

         70    pp: 9  23.47   -> 

         71       1   2024-Dec-16 07:27:53.296276   pnt: 0  23.11  

         72       3   2024-Dec-16 07:27:53.296276   pnt: 0  23.12  

         73       5   2024-Dec-16 07:27:53.297269   pnt: 0  23.47  

         74       7   2024-Dec-16 07:27:53.297269   pnt: 0  22.92  

         75       9   2024-Dec-16 07:27:53.297269   pnt: 0  22.46  

         76       11   2024-Dec-16 07:27:53.297269   pnt: 0  22.40  

         77       13   2024-Dec-16 07:27:53.297269   pnt: 0  22.19  

         78       15   2024-Dec-16 07:27:53.297269   pnt: 0  22.06  

         79 

         80    AAPL 1[10.04 <-> 10.80] 2[11.17 <-> 11.26] 3[11.87 <-> 13.60]

         81    (4  ,1  ):

         82    pp: 9  22.30   -> 

         83       1   2024-Dec-16 07:27:53.294270   pnt: 0  22.30  

         84       2   2024-Dec-16 07:27:53.294270   pnt: 0  22.17  

         85       4   2024-Dec-16 07:27:53.294270   pnt: 0  21.31  

         86       6   2024-Dec-16 07:27:53.294270   pnt: 0  21.46  

         87       8   2024-Dec-16 07:27:53.295271   pnt: 0  20.90  

         88 

         89    (4  ,2  ):

         90    pp: 9  21.45   -> 

         91       1   2024-Dec-16 07:27:53.295271   pnt: 0  21.45  

         92       3   2024-Dec-16 07:27:53.295271   pnt: 0  20.52  

         93 

         94    (4  ,3  ):

         95    pp: 9  21.18   -> 

         96       1   2024-Dec-16 07:27:53.296276   pnt: 0  20.92  

         97       3   2024-Dec-16 07:27:53.296276   pnt: 0  19.92  

         98       5   2024-Dec-16 07:27:53.296276   pnt: 0  20.27  

         99       7   2024-Dec-16 07:27:53.296276   pnt: 0  20.63  

         100       9   2024-Dec-16 07:27:53.297269   pnt: 0  20.51  

        101       11   2024-Dec-16 07:27:53.297269   pnt: 0  20.21  

        102       13   2024-Dec-16 07:27:53.297269   pnt: 0  19.77  

        103       15   2024-Dec-16 07:27:53.297269   pnt: 0  20.73  

        104       17   2024-Dec-16 07:27:53.297269   pnt: 0  21.18  

        105       19   2024-Dec-16 07:27:53.297269   pnt: 0  21.10  

        106 

        107    XLFN 1[10.33 <-> 10.71] 2[11.36 <-> 11.36] 3[12.05 <-> 13.78]

        108    (6  ,1  ):

        109    pp: 9  158.75  -> 

        110       1   2024-Dec-16 07:27:53.294270   pnt: 0  158.75 

        111       2   2024-Dec-16 07:27:53.294270   pnt: 0  154.33 

        112       4   2024-Dec-16 07:27:53.294270   pnt: 0  152.67 

        113       6   2024-Dec-16 07:27:53.294270   pnt: 0  150.18 

        114 

        115    (6  ,2  ):

        116    pp: 9  146.25  -> 

        117       1   2024-Dec-16 07:27:53.295271   pnt: 0  146.25 

        118 

        119    (6  ,3  ):

        120    pp: 9  158.02  -> 

        121       1   2024-Dec-16 07:27:53.296276   pnt: 0  147.61 

        122       3   2024-Dec-16 07:27:53.296276   pnt: 0  146.17 

        123       5   2024-Dec-16 07:27:53.296276   pnt: 0  149.41 

        124       7   2024-Dec-16 07:27:53.296276   pnt: 0  150.09 

        125       9   2024-Dec-16 07:27:53.296276   pnt: 0  153.41 

        126       11   2024-Dec-16 07:27:53.297269   pnt: 0  151.03 

        127       13   2024-Dec-16 07:27:53.297269   pnt: 0  157.50 

        128       15   2024-Dec-16 07:27:53.297269   pnt: 0  158.02 

        129       17   2024-Dec-16 07:27:53.297269   pnt: 0  154.89 

        130       19   2024-Dec-16 07:27:53.297269   pnt: 0  155.03 

        131       21   2024-Dec-16 07:27:53.298268   pnt: 0  152.05 

        132 

        133 

        134    *** The time range of Cluster j, defined as [min, max], falls within the overall time window ***    

        135            [9.95  <-> 10.80]  [10.98 <-> 11.78]  [11.87 <-> 13.78]

        136       

        137    ENDS  xsnPortfolio_2753   Elapsed Time: 0.05  sec   

        138    EXIT FROM EXSAN 


    + + C   E x S a n   C + +
    D o   N o t   A c c e p t   D e f a u l t s
    T h i n k   D i f f e r e n t

    *Link to More CLUSTER Clocking and Traversing*

    Some Pseudo Code of ExSan Cluster

    IF loadNtimeLapse == 1 THEN
        // Use auxiliary tree to process data
        Initialize ndptrAry[0] and ndptrAry[1] with ptrAry[0]'s ntHead
        Find minimum value in the tree and assign to ndptrAry[0]
        Find maximum value in the tree and assign to ndptrAry[1]
    
        Calculate spreadCenter as the average of minimum and maximum data
        IF ntCounter is odd THEN
            Calculate kth as middle index of the tree
            Find kth node using InOrderFindKth_nt
            Set data and time from the kth node's data
        ELSE
            Calculate kth for left and right midpoints
            Find nodes for left and right midpoints using InOrderFindKth_nt
            Set data and time as the average of left and right midpoint nodes
        ENDIF
    
        Discard the auxiliary tree to free resources
        Validate tree cleanup and output results if required
    ELSE
        // Handle new version without deleting nodes
        Initialize ndptrAry[0] and ndptrAry[1] to null
        Find minimum and maximum keys using rangeKeyFindMinMax_nt
    
        Calculate spreadCenter as the average of minimum and maximum data
        IF key_index is odd THEN
            Find the middle node using rangeKeyFind_nt
            Set data and time from the middle node's data
        ELSE
            Find left and right midpoint nodes using rangeKeyFindPair_nt
            Set data and time as the average of the two midpoint nodes
        ENDIF
    ENDIF
        

    Some ExSan Cluster Code

          1 

         2 

         3 /*Some ExSan Code Clocking Clusters*/

         4 fout << "\n\t:2321: CATCHING CLUSTERS Clocking - Time Lapse Range  ";

         5 stockPtr = net->goto_row(net, ppDataIn, firstRow, 'f'); 

         6 for (i = firstRow; i <= lastRow; ++i) {

         7    if (!aryStockAux[i]) { stockPtr = stockPtr->get_down_ptr();  continue; }   

         8    ptr = stockPtr->get_forward_ptr();

         9    

         10    cout << "\n\t" << setw(5) << left  << stockPtr->get_stock_name()  << "\t";

         11 

         12    for (j = 1; j <= net->get_cols_in_page(ppDataIn, 'f'); j++) { /             

         13       if (loadNtimeLapse == 1) {          

         14          ndptrAry[0] = ndptrAry[1] = nullptr;         

         15          ptrAry[0]->get_ntHead()->rangeKeyFindMinMax_nt(  ... /* some parameters*/... ); 

         16          cout  << setw(2) << ptrAry[0]->get_col() << "[" <<  ...

         17 

         18          if (ndptrAry[0]->get_nt_data(ppnt_time) < ptrAry[0]->get_data(ppTime))  

         19             ptrAry[0]->set_data(ppTime,  ndptrAry[0]->get_nt_data(ppnt_time));

         20          if (ndptrAry[1]->get_nt_data(ppnt_time) > ptrAry[0]->get_data(ppRTime)) 

         21             ptrAry[0]->set_data(ppRTime, ndptrAry[1]->get_nt_data(ppnt_time));

         22       }

         23       else {/                

         24          ndptrAry[0] = ndptrAry[1] = nullptr;

         27                << " <-> " << setw(7) << ndptrAry[1]->get_nt_data(ppnt_time) << "]"

         28       }      

         29       ptrAry[0] = ptrAry[0]->get_next_ptr();

         30       if (ptrAry[0]->get_col() > net->get_cols_in_page(ppDataIn, 'f')) ptrAry[0] =  ....;

         31    }   

         32 }                     

         33 

         34 ptr   = net->net_point_to(net, net->get_net_rows(), 1);                         

         35 

         36 for (j = 1; j <= net->get_cols_in_page(ppDataIn, 'f'); j++) { /                    

         37    ptr->set_data(ppTime, ptrAry[0]->get_data(ppTime));

         38    ptr->set_data(ppRTime, ptrAry[0]->get_data(ppRTime));   

         39    ptrAry[0] = ptrAry[0]->get_next_ptr();

         40    if (ptrAry[0]->get_col() > net->get_cols_in_page(ppDataIn, 'f')) 

         41       ptrAry[0] = stockPtr->get_forward_ptr();

         42    ptr = ptr->get_next_ptr();

         43 }

         44 cout << endl;

         45                      

         46 stockPtr = net->goto_row(net, ppTime, firstRow, 'f');  /                        

         48    if (!aryStockAux[i]) { 

         49       stockPtr = stockPtr->get_down_ptr();  

         50       continue; 

         51    }

         52 

         53    ptrAry[0] = stockPtr->get_ptrLasTick();  /                                

         54    ptr = net->net_point_to(net, net->get_net_rows(), 1);

         55    for (j = 1; j <= net->get_cols_in_page(ppTime, 'f'); j++) { /              

         56       

         57       if(ptrAry[0]->get_data(ppTime)  < ptr->get_data(ppTime))  { 

         58          ptr->set_data(ppTime,  ptrAry[0]->get_data(ppTime)); 

         59       }

         60       if(ptrAry[0]->get_data(ppRTime) > ptr->get_data(ppRTime)) { 

         61          ptr->set_data(ppRTime, ptrAry[0]->get_data(ppRTime)); 

         62       }                              

         63       

         64       ptrAry[0] = ptrAry[0]->get_next_ptr();

         65       if (ptrAry[0]->get_col() > net->get_cols_in_page(ppDataIn, 'f')) 

         66          ptrAry[0] = stockPtr->get_forward_ptr();

         67       ptr = ptr->get_next_ptr();

         68    }   

         69    stockPtr = stockPtr->get_down_ptr();

         70 }

         71 

         73 for (j = 1; j <= net->get_cols_in_page(ppTime, 'f'); ++j) { /                   

         75    ptr = ptr->get_next_ptr();

         76 }

         77 cout endl;


    + + C   E x S a n   C + +
    D o   N o t   A c c e p t   D e f a u l t s
    T h i n k   D i f f e r e n t

    °| Not Afraid Of Pointers |°
    © 2025 ExSan Inc. All rights reserved.

    Comments

    Popular posts from this blog

    About ExSan

    iExSan