{"id":227761,"date":"2025-07-25T12:49:39","date_gmt":"2025-07-25T16:49:39","guid":{"rendered":"https:\/\/ibkrcampus.com\/campus\/?p=227761"},"modified":"2025-07-25T12:48:59","modified_gmt":"2025-07-25T16:48:59","slug":"supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains","status":"publish","type":"post","link":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains\/","title":{"rendered":"Supercharging Quantitative Finance with data.table: New Features and Performance Gains"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\" id=\"h-1-introduction\">1. Introduction<\/h1>\n\n\n\n<p>In the fast-paced world of quantitative finance, data manipulation speed and efficiency can make the difference between profit and loss. R\u2019s data.table package has long been the standard for high-performance data operations, and with the recent releases, including v1.17.0 in April 2025, it\u2019s become even more powerful.<\/p>\n\n\n\n<p><strong>Why data.table matters for quant finance:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Speed<\/strong>: Much faster than base R for large datasets, often 10x faster or more<\/li>\n\n\n\n<li><strong>Memory efficiency<\/strong>: Modify data in-place without copying and efficient algorithms<\/li>\n\n\n\n<li><strong>Concise syntax<\/strong>: Complex operations in concise readable, chainable code<\/li>\n\n\n\n<li><strong>Robust ecosystem<\/strong>: Now a NumFOCUS sponsored project (July 2025) with several talented developers<\/li>\n\n\n\n<li><strong>Careful Development<\/strong>: Prioritized stable dev cycles with minimal breaking changes<\/li>\n<\/ul>\n\n\n\n<p>This post showcases data.table\u2019s newest features through simulated financial examples, demonstrating how modern syntax can streamline your quantitative workflows. Note, for updated speed benchmarks, see <a href=\"https:\/\/duckdb.org\/2023\/04\/14\/h2oai.html\">benchmarks<\/a> along with the notes about the difficulty of doing benchmarks properly.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">2. Setting Up Our Environment<\/h1>\n\n\n\n<p>We are going to start by attaching some libraries (including data.table) that will be used in the examples.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"r\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Load required libraries\nlibrary(data.table)\nlibrary(lubridate)\n\n# Display version info\npackageVersion(\"data.table\")\n\n[1] '1.17.8'<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"h-3-creating-sample-financial-data\">3. Creating Sample Financial Data<\/h1>\n\n\n\n<p>Let\u2019s simulate a realistic financial dataset using data.table\u2019s new rowwiseDT() function for manual data creation (useful for teaching and providing example data easy for humans to read), then expand it.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"r\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Create base stock data to use for examples\nbase_stocks &lt;- rowwiseDT(\n  symbol = , sector = ,    market_cap = , beta = ,\n  \"ACME\",    \"Technology\", 3000,          1.2,\n  \"GLOBEX\",  \"Technology\", 1800,          1.1,\n  \"MEGACO\",  \"Technology\", 2800,          0.9,\n  \"AMAZO\",   \"Consumer\",   1500,          1.3,\n  \"TURBINE\", \"Automotive\", 800,           2.1\n)<\/pre>\n\n\n\n<p>We also take advantage of both CJ() (for cross joining the symbols and dates) and let() (an alias for := allowing modifications to variables in place).<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"r\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Generate time series data\ndates &lt;- seq(as.Date(\"2024-01-01\"), as.Date(\"2024-12-31\"), by = \"day\")\ndates &lt;- dates[!weekdays(dates) %in% c(\"Saturday\", \"Sunday\")] # Remove weekends\n\n# Simulate financial dataset\nset.seed(42)\n\n# cross join of symbol and dates\nfinancial_data &lt;- CJ(symbol = base_stocks$symbol, date = dates)\n\n# join financial_data and base_stocks\nfinancial_data &lt;- financial_data[\n  base_stocks,\n  on = \"symbol\"\n]\n\n# create price, volume, and dividend_yield for each symbol\nfinancial_data[,\n  let(\n    price = 100 + cumsum(rnorm(.N, 0, 2)),\n    volume = rpois(.N, 1000000),\n    dividend_yield = ifelse(\n      month(date) %in% c(3, 6, 9, 12),\n      pmax(0, rnorm(.N, 0.02, 0.005)),\n      0\n    )\n  ),\n  by = symbol\n]\n\n# print simulated data\nfinancial_data\n       symbol       date     sector market_cap  beta    price  volume\n       &lt;char&gt;     &lt;Date&gt;     &lt;char&gt;      &lt;num&gt; &lt;num&gt;    &lt;num&gt;   &lt;int&gt;\n   1:    ACME 2024-01-01 Technology       3000   1.2 102.7419 1000383\n   2:    ACME 2024-01-02 Technology       3000   1.2 101.6125  998148\n   3:    ACME 2024-01-03 Technology       3000   1.2 102.3388  999376\n   4:    ACME 2024-01-04 Technology       3000   1.2 103.6045 1000813\n   5:    ACME 2024-01-05 Technology       3000   1.2 104.4130  999809\n  ---                                                                \n1306: TURBINE 2024-12-25 Automotive        800   2.1 114.0517  999555\n1307: TURBINE 2024-12-26 Automotive        800   2.1 112.3365  999674\n1308: TURBINE 2024-12-27 Automotive        800   2.1 113.0717 1000604\n1309: TURBINE 2024-12-30 Automotive        800   2.1 109.6854  998578\n1310: TURBINE 2024-12-31 Automotive        800   2.1 110.2721 1000283\n      dividend_yield\n               &lt;num&gt;\n   1:     0.00000000\n   2:     0.00000000\n   3:     0.00000000\n   4:     0.00000000\n   5:     0.00000000\n  ---               \n1306:     0.01687586\n1307:     0.02636032\n1308:     0.01503092\n1309:     0.01645781\n1310:     0.01626610\n<\/pre>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"h-4-exploring-some-of-the-new-data-table-features\">4. Exploring Some of the New data.table Features<\/h1>\n\n\n\n<p>Since the 1.15.0 release in January 2024, a lot of new features have been added to the package. I\u2019ll highlight a few below that are useful for quantitative analyses but note there are many others as listed in the <a href=\"https:\/\/rdatatable.gitlab.io\/data.table\/news\/index.html\">NEWS file<\/a> of the package.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-4-1-easier-computation-across-columns\">4.1 Easier Computation Across Columns<\/h2>\n\n\n\n<p>Using the .SD special operator and the .SDcols argument, we can operate on several columns in a single line of code. Note that the following examples are not evaluated so those variables are not altered.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"r\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Example: Log-transform numeric columns for better distribution\nfinancial_data[, names(.SD) := lapply(.SD, log), .SDcols = c(\"price\", \"volume\")]\n\n# More practical example: Standardize multiple columns\nfinancial_data[, paste0(names(.SD), \"_std\") := lapply(.SD, scale), .SDcols = c(\"price\", \"volume\")]<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-4-2-new-filtering-and-performance-features\">4.2 New Filtering and Performance Features<\/h2>\n\n\n\n<p>The %notin% operator provides a convenient alternative to !(x %in% y) for cleaner filtering:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"r\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Filter out weekend trading and low-volume days using %notin%\ntrading_data &lt;- financial_data[weekdays(date) %notin% c(\"Saturday\", \"Sunday\")]\n\n# Recent versions also optimized shift() by group - crucial for time series\n# Calculate lagged returns more efficiently  \ntrading_data[,\n  let(\n    prev_price = shift(price, 1),\n    price_change = price - shift(price, 1),\n    pct_change = (price - shift(price, 1)) \/ shift(price, 1) * 100\n  ),\n  by = symbol\n]\n\n# Filter for Q4 2024 and calculate performance\nq4_performance &lt;- trading_data[\n  between(date, as.Date(\"2024-10-01\"), as.Date(\"2024-12-31\")),\n  .(\n    start_price = first(price),\n    end_price = last(price),\n    avg_volume = mean(volume),\n    total_dividends = sum(dividend_yield),\n    trading_days = .N,\n    q4_return = (last(price) - first(price)) \/ first(price) * 100\n  ),\n  by = symbol\n]\n\nq4_performance\nsymbol start_price end_price avg_volume total_dividends trading_days\n    &lt;char&gt;       &lt;num&gt;     &lt;num&gt;      &lt;num&gt;           &lt;num&gt;        &lt;int&gt;\n1:    ACME    83.94515  85.71580   999856.8       0.4235464           66\n2:  GLOBEX   134.04896 124.77608   999963.7       0.5100190           66\n3:  MEGACO   104.47643  73.17408  1000175.5       0.4330145           66\n4:   AMAZO   132.70457 128.54960  1000051.0       0.4376656           66\n5: TURBINE   123.62506 110.27213   999795.0       0.4315372           66\n    q4_return\n        &lt;num&gt;\n1:   2.109292\n2:  -6.917531\n3: -29.961155\n4:  -3.130994\n5: -10.801154\n<\/pre>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-4-3-additional-useful-features\">4.3 Additional Useful Features<\/h2>\n\n\n\n<p>Several other enhancements make data manipulation more convenient, which I highlight below starting with setcolorder().<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"r\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># %like% operator for pattern matching - useful for filtering symbols\ntech_stocks &lt;- financial_data[symbol %like% \"^(ACME|GLOBEX|MEGACO)$\"]\n\n# setcolorder() for organizing columns logically\nsetcolorder(tech_stocks, c(\"symbol\", \"sector\", \"market_cap\", \"beta\"))\n\ntech_stocks\n     symbol     sector market_cap  beta       date     price  volume\n     &lt;char&gt;     &lt;char&gt;      &lt;num&gt; &lt;num&gt;     &lt;Date&gt;     &lt;num&gt;   &lt;int&gt;\n  1:   ACME Technology       3000   1.2 2024-01-01 102.74192 1000383\n  2:   ACME Technology       3000   1.2 2024-01-02 101.61252  998148\n  3:   ACME Technology       3000   1.2 2024-01-03 102.33878  999376\n  4:   ACME Technology       3000   1.2 2024-01-04 103.60450 1000813\n  5:   ACME Technology       3000   1.2 2024-01-05 104.41304  999809\n ---                                                                \n782: MEGACO Technology       2800   0.9 2024-12-25  66.34812 1001376\n783: MEGACO Technology       2800   0.9 2024-12-26  66.92932 1001331\n784: MEGACO Technology       2800   0.9 2024-12-27  71.61653 1001254\n785: MEGACO Technology       2800   0.9 2024-12-30  72.44912  999712\n786: MEGACO Technology       2800   0.9 2024-12-31  73.17408 1000418\n     dividend_yield\n              &lt;num&gt;\n  1:     0.00000000\n  2:     0.00000000\n  3:     0.00000000\n  4:     0.00000000\n  5:     0.00000000\n ---               \n782:     0.02315329\n783:     0.02376540\n784:     0.01313998\n785:     0.01696442\n786:     0.01819876\n<\/pre>\n\n\n\n<p>For long-running operations on large datasets, showProgress=TRUE provides helpful feedback to track where you are in the calculation.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"r\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Example with large dataset processing (not run)\nlarge_financial_data[,\n  complex_calculation := {\n    # Some computationally intensive operation\n    result &lt;- rep(0, .N)\n    for(i in seq_len(.N)) {\n      result[i] &lt;- sum(price[max(1, i-30):i]) \/ 30  # 30-day moving average\n    }\n    result\n  },\n  by = symbol,\n  showProgress = TRUE  # Shows progress bar for long operations\n]<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"h-5-real-world-financial-analysis-examples\">5. Real-World Financial Analysis Examples<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-5-1-portfolio-risk-analysis\">5.1 Portfolio Risk Analysis<\/h2>\n\n\n\n<p>Let\u2019s demonstrate data.table\u2019s power with a comprehensive portfolio risk analysis. The following code shows:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Calculating the daily return<\/li>\n\n\n\n<li>For those rows with a daily return, we calculate a series of metrics, including a multi-step calculation for max_drawdown and skewness<\/li>\n<\/ol>\n\n\n\n<p>In a handful of lines, we\u2019ve been able to calculate a series of metrics all while making minimal copies of the data.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"r\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Calculate daily returns\nfinancial_data[,\n  daily_return := (price - shift(price)) \/ shift(price) * 100,\n  by = symbol\n]\n\n# Risk metrics by stock\nrisk_metrics &lt;- financial_data[\n  !is.na(daily_return),\n  .(\n    mean_return = mean(daily_return),\n    volatility = sd(daily_return) * sqrt(252), # Annualized volatility\n    sharpe_ratio = mean(daily_return) \/ sd(daily_return) * sqrt(252),\n    max_drawdown = {\n      cumulative_return &lt;- cumprod(1 + daily_return \/ 100)\n      running_max &lt;- cummax(cumulative_return)\n      drawdowns &lt;- (running_max - cumulative_return) \/ running_max\n      max(drawdowns) * 100\n    },\n    var_95 = quantile(daily_return, 0.05),\n    skewness = {\n      n &lt;- length(daily_return)\n      m3 &lt;- mean((daily_return - mean(daily_return))^3)\n      m2 &lt;- mean((daily_return - mean(daily_return))^2)\n      m3 \/ (m2^(3 \/ 2))\n    }\n  ),\n  by = .(symbol, sector)\n]\n\nrisk_metrics\n    symbol     sector mean_return volatility sharpe_ratio max_drawdown\n    &lt;char&gt;     &lt;char&gt;       &lt;num&gt;      &lt;num&gt;        &lt;num&gt;        &lt;num&gt;\n1:    ACME Technology -0.04901349   32.11151   -0.3846408     32.70595\n2:  GLOBEX Technology  0.09748285   26.92756    0.9122875     28.37801\n3:  MEGACO Technology -0.08814513   39.27654   -0.5655430     43.35065\n4:   AMAZO   Consumer  0.09889018   26.97369    0.9238753     24.45278\n5: TURBINE Automotive  0.05255680   29.57278    0.4478549     25.96472\n      var_95    skewness\n       &lt;num&gt;       &lt;num&gt;\n1: -3.170895  0.06985243\n2: -2.465306  0.02992610\n3: -3.660075  0.24828273\n4: -2.759618 -0.10412038\n5: -3.173524 -0.19352530\n<\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-5-2-sector-performance-analysis\">5.2 Sector Performance Analysis<\/h2>\n\n\n\n<p>Using data.table\u2019s grouping capabilities for sector-level analysis, we can quickly and concisely chain a series of calculations leading to a sector analysis.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"r\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Monthly sector performance\nmonthly_sector &lt;- financial_data[,\n  .(\n    date = as.Date(paste(year(date), month(date), \"01\", sep = \"-\"))\n  ),\n  by = .(symbol, sector, date, price)\n][,\n  .(\n    avg_price = mean(price),\n    price_vol = sd(price)\n  ),\n  by = .(sector, date)\n][order(sector, date)]\n\n# Calculate month-over-month growth\nmonthly_sector[,\n  mom_growth := (avg_price - shift(avg_price)) \/ shift(avg_price) * 100,\n  by = sector\n]\n\n# Sector summary for 2024\nsector_summary &lt;- monthly_sector[\n  !is.na(mom_growth),\n  .(\n    avg_monthly_growth = mean(mom_growth),\n    growth_volatility = sd(mom_growth),\n    best_month = max(mom_growth),\n    worst_month = min(mom_growth)\n  ),\n  by = sector\n][order(-avg_monthly_growth)]\n\nsector_summary\n       sector avg_monthly_growth growth_volatility best_month worst_month\n       &lt;char&gt;              &lt;num&gt;             &lt;num&gt;      &lt;num&gt;       &lt;num&gt;\n1:   Consumer         0.09889018          1.699183   4.888692   -4.566203\n2: Automotive         0.05255680          1.862910   5.323167   -6.144570\n3: Technology        -0.01900452          1.110407   2.730407   -2.869947\n<\/pre>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-5-3-advanced-portfolio-optimization\">5.3 Advanced Portfolio Optimization<\/h2>\n\n\n\n<p>We can also demonstrate data.table\u2019s efficiency in portfolio calculations, allowing a correlation matrix directly from our data.table, taking advantage of dcase() making our data.table wide, and running cor() on the manipulated data set (.SD).<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"r\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Calculate correlation matrix efficiently\ncorrelation_matrix &lt;- financial_data[\n  !is.na(daily_return),\n  dcast(.SD, date ~ symbol, value.var = \"daily_return\")\n][, -1][, cor(.SD, use = \"complete.obs\")]\n\nround(correlation_matrix, 3)\n          ACME  AMAZO GLOBEX MEGACO TURBINE\nACME     1.000 -0.043 -0.111 -0.047  -0.057\nAMAZO   -0.043  1.000  0.038 -0.038  -0.011\nGLOBEX  -0.111  0.038  1.000  0.058  -0.042\nMEGACO  -0.047 -0.038  0.058  1.000   0.084\nTURBINE -0.057 -0.011 -0.042  0.084   1.000\n\n# Equal-weight portfolio performance\nportfolio_returns &lt;- financial_data[\n  !is.na(daily_return),\n  .(\n    portfolio_return = mean(daily_return)\n  ),\n  by = date\n][order(date)]\n\n# Portfolio statistics\nportfolio_stats &lt;- portfolio_returns[, .(\n  total_return = (prod(1 + portfolio_return \/ 100) - 1) * 100,\n  annualized_return = mean(portfolio_return) * 252,\n  annualized_volatility = sd(portfolio_return) * sqrt(252),\n  sharpe_ratio = mean(portfolio_return) \/ sd(portfolio_return) * sqrt(252),\n  max_drawdown = {\n    cumulative_return &lt;- cumprod(1 + portfolio_return \/ 100)\n    running_max &lt;- cummax(cumulative_return)\n    drawdowns &lt;- (running_max - cumulative_return) \/ running_max\n    max(drawdowns) * 100\n  }\n)]\n\nportfolio_stats\n   total_return annualized_return annualized_volatility sharpe_ratio\n          &lt;num&gt;             &lt;num&gt;                 &lt;num&gt;        &lt;num&gt;\n1:     5.003739          5.633269              13.58305    0.4147279\n   max_drawdown\n          &lt;num&gt;\n1:      15.0439\n<\/pre>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-6-performance-benchmarking\">6. Performance Benchmarking<\/h2>\n\n\n\n<p>Let\u2019s highlight data.table\u2019s speed advantages using bench::mark() to compare with base R (remember benchmarking is difficult and these values are based on a single computer running MacOS). This is a situation where data.table does well, both in its concise syntax but also speed and memory efficiency\u2013grouped operations in a large data set.<\/p>\n\n\n\n<p>Regardless of the exact numbers, it is clear that data.table is around 4 times faster on this larger sized data and may use much less memory (although that may be due to some memory not being tracked fully in bench::mark()).<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"r\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">library(bench)\n\n# Create moderate sized dataset for benchmarking\nlarge_data &lt;- rbindlist(lapply(1:1000, function(x) {\n  financial_data[, iteration := x]\n}))\n\ndf = as.data.frame(large_data)\n\n# Benchmark: Complex aggregation - data.table vs base R\nbenchmark_comparison &lt;- bench::mark(\n  data.table = {\n    large_data[,\n      .(\n        total_volume = sum(volume),\n        avg_price = mean(price),\n        volatility = sd(price),\n        correlation_with_volume = cor(price, volume)\n      ),\n      by = .(symbol, sector)\n    ]\n  },\n  base_r = {\n    # Equivalent base R operations\n    result_list &lt;- by(df, list(df$symbol, df$sector), function(x) {\n      data.frame(\n        symbol = x$symbol[1],\n        sector = x$sector[1],\n        total_volume = sum(x$volume),\n        avg_price = mean(x$price),\n        volatility = sd(x$price),\n        correlation_with_volume = cor(x$price, x$volume)\n      )\n    })\n    do.call(rbind, result_list)\n  },\n  check = FALSE,\n  iterations = 50\n)\n\nbenchmark_comparison\n# A tibble: 2 \u00d7 6\n  expression      min   median `itr\/sec` mem_alloc `gc\/sec`\n  &lt;bch:expr&gt; &lt;bch:tm&gt; &lt;bch:tm&gt;     &lt;dbl&gt; &lt;bch:byt&gt;    &lt;dbl&gt;\n1 data.table   28.8ms   29.5ms     32.6       20MB     9.12\n2 base_r      128.4ms  136.6ms      7.00     212MB    16.0 <\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-7-conclusion\">7. Conclusion<\/h2>\n\n\n\n<p>Recent releases of data.table represent meaningful steps forward for quantitative finance practitioners. The combination of blazing speed, memory efficiency, and elegant syntax makes it a powerful tool for modern financial analysis.<\/p>\n\n\n\n<p>Whether you\u2019re processing tick data, calculating portfolio metrics, or running complex backtests, data.table provides the performance and flexibility needed for professional quantitative work. With NumFOCUS sponsorship ensuring its continued development, data.table remains a valuable option for high-performance data manipulation in R.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-7-1-next-steps\">7.1 Next Steps<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Explore the <a href=\"https:\/\/rdatatable.gitlab.io\/data.table\/\">official documentation<\/a><\/li>\n\n\n\n<li>Check out the <a href=\"https:\/\/github.com\/Rdatatable\/data.table\">GitHub repository<\/a> for latest developments<\/li>\n\n\n\n<li>Consider contributing to this NumFOCUS sponsored project<\/li>\n<\/ul>\n\n\n\n<p><em>This analysis demonstrates data.table\u2019s capabilities using simulated financial data. Always validate results with real data and consider market conditions in actual trading decisions.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the fast-paced world of quantitative finance, data manipulation speed and efficiency can make the difference between profit and loss. R\u2019s data.table package has long been the standard for high-performance data operations, and with the recent releases, including v1.17.0 in April 2025, it\u2019s become even more powerful.<\/p>\n","protected":false},"author":1660,"featured_media":227237,"comment_status":"open","ping_status":"closed","sticky":true,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[339,343,338,341,342],"tags":[11504,19345,20377,4921,487],"contributors-categories":[20366],"class_list":{"0":"post-227761","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-data-science","8":"category-programing-languages","9":"category-ibkr-quant-news","10":"category-quant-development","11":"category-r-development","12":"tag-data-manipulation","13":"tag-data-table-package","14":"tag-lubridate-package","15":"tag-quantitative-finance","16":"tag-r","17":"contributors-categories-highmark-health"},"pp_statuses_selecting_workflow":false,"pp_workflow_action":"current","pp_status_selection":"publish","acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v27.8) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Supercharging Quantitative Finance with data.table: New Features and Performance Gains<\/title>\n<meta name=\"description\" content=\"R\u2019s data.table package has long been the standard for high-performance data operations.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.interactivebrokers.com\/campus\/wp-json\/wp\/v2\/posts\/227761\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Supercharging Quantitative Finance with data.table: New Features and Performance Gains\" \/>\n<meta property=\"og:description\" content=\"In the fast-paced world of quantitative finance, data manipulation speed and efficiency can make the difference between profit and loss. R\u2019s data.table package has long been the standard for high-performance data operations, and with the recent releases, including v1.17.0 in April 2025, it\u2019s become even more powerful.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains\/\" \/>\n<meta property=\"og:site_name\" content=\"IBKR Campus US\" \/>\n<meta property=\"article:published_time\" content=\"2025-07-25T16:49:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2025\/07\/computer-code-abstract-purple-blue.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1000\" \/>\n\t<meta property=\"og:image:height\" content=\"563\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Tyson Barrett\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tyson Barrett\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\n\t    \"@context\": \"https:\\\/\\\/schema.org\",\n\t    \"@graph\": [\n\t        {\n\t            \"@type\": \"NewsArticle\",\n\t            \"@id\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains\\\/#article\",\n\t            \"isPartOf\": {\n\t                \"@id\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains\\\/\"\n\t            },\n\t            \"author\": {\n\t                \"name\": \"Tyson Barrett\",\n\t                \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#\\\/schema\\\/person\\\/76a11a45e040233e9d7f0db8d3a58f39\"\n\t            },\n\t            \"headline\": \"Supercharging Quantitative Finance with data.table: New Features and Performance Gains\",\n\t            \"datePublished\": \"2025-07-25T16:49:39+00:00\",\n\t            \"mainEntityOfPage\": {\n\t                \"@id\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains\\\/\"\n\t            },\n\t            \"wordCount\": 781,\n\t            \"commentCount\": 0,\n\t            \"publisher\": {\n\t                \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#organization\"\n\t            },\n\t            \"image\": {\n\t                \"@id\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains\\\/#primaryimage\"\n\t            },\n\t            \"thumbnailUrl\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2025\\\/07\\\/computer-code-abstract-purple-blue.jpg\",\n\t            \"keywords\": [\n\t                \"Data Manipulation\",\n\t                \"data.table package\",\n\t                \"lubridate package\",\n\t                \"Quantitative Finance\",\n\t                \"R\"\n\t            ],\n\t            \"articleSection\": [\n\t                \"Data Science\",\n\t                \"Programming Languages\",\n\t                \"Quant\",\n\t                \"Quant Development\",\n\t                \"R Development\"\n\t            ],\n\t            \"inLanguage\": \"en-US\",\n\t            \"potentialAction\": [\n\t                {\n\t                    \"@type\": \"CommentAction\",\n\t                    \"name\": \"Comment\",\n\t                    \"target\": [\n\t                        \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains\\\/#respond\"\n\t                    ]\n\t                }\n\t            ]\n\t        },\n\t        {\n\t            \"@type\": \"WebPage\",\n\t            \"@id\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains\\\/\",\n\t            \"url\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains\\\/\",\n\t            \"name\": \"Supercharging Quantitative Finance with data.table: New Features and Performance Gains | IBKR Campus US\",\n\t            \"isPartOf\": {\n\t                \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#website\"\n\t            },\n\t            \"primaryImageOfPage\": {\n\t                \"@id\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains\\\/#primaryimage\"\n\t            },\n\t            \"image\": {\n\t                \"@id\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains\\\/#primaryimage\"\n\t            },\n\t            \"thumbnailUrl\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2025\\\/07\\\/computer-code-abstract-purple-blue.jpg\",\n\t            \"datePublished\": \"2025-07-25T16:49:39+00:00\",\n\t            \"description\": \"R\u2019s data.table package has long been the standard for high-performance data operations.\",\n\t            \"inLanguage\": \"en-US\",\n\t            \"potentialAction\": [\n\t                {\n\t                    \"@type\": \"ReadAction\",\n\t                    \"target\": [\n\t                        \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains\\\/\"\n\t                    ]\n\t                }\n\t            ]\n\t        },\n\t        {\n\t            \"@type\": \"ImageObject\",\n\t            \"inLanguage\": \"en-US\",\n\t            \"@id\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/ibkr-quant-news\\\/supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains\\\/#primaryimage\",\n\t            \"url\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2025\\\/07\\\/computer-code-abstract-purple-blue.jpg\",\n\t            \"contentUrl\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2025\\\/07\\\/computer-code-abstract-purple-blue.jpg\",\n\t            \"width\": 1000,\n\t            \"height\": 563,\n\t            \"caption\": \"Quant Computer Code\"\n\t        },\n\t        {\n\t            \"@type\": \"WebSite\",\n\t            \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#website\",\n\t            \"url\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/\",\n\t            \"name\": \"IBKR Campus US\",\n\t            \"description\": \"Financial Education from Interactive Brokers\",\n\t            \"publisher\": {\n\t                \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#organization\"\n\t            },\n\t            \"potentialAction\": [\n\t                {\n\t                    \"@type\": \"SearchAction\",\n\t                    \"target\": {\n\t                        \"@type\": \"EntryPoint\",\n\t                        \"urlTemplate\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/?s={search_term_string}\"\n\t                    },\n\t                    \"query-input\": {\n\t                        \"@type\": \"PropertyValueSpecification\",\n\t                        \"valueRequired\": true,\n\t                        \"valueName\": \"search_term_string\"\n\t                    }\n\t                }\n\t            ],\n\t            \"inLanguage\": \"en-US\"\n\t        },\n\t        {\n\t            \"@type\": \"Organization\",\n\t            \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#organization\",\n\t            \"name\": \"Interactive Brokers\",\n\t            \"alternateName\": \"IBKR\",\n\t            \"url\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/\",\n\t            \"logo\": {\n\t                \"@type\": \"ImageObject\",\n\t                \"inLanguage\": \"en-US\",\n\t                \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#\\\/schema\\\/logo\\\/image\\\/\",\n\t                \"url\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2024\\\/05\\\/ibkr-campus-logo.jpg\",\n\t                \"contentUrl\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2024\\\/05\\\/ibkr-campus-logo.jpg\",\n\t                \"width\": 669,\n\t                \"height\": 669,\n\t                \"caption\": \"Interactive Brokers\"\n\t            },\n\t            \"image\": {\n\t                \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#\\\/schema\\\/logo\\\/image\\\/\"\n\t            },\n\t            \"publishingPrinciples\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/about-ibkr-campus\\\/\",\n\t            \"ethicsPolicy\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/cyber-security-notice\\\/\"\n\t        },\n\t        {\n\t            \"@type\": \"Person\",\n\t            \"@id\": \"https:\\\/\\\/ibkrcampus.com\\\/campus\\\/#\\\/schema\\\/person\\\/76a11a45e040233e9d7f0db8d3a58f39\",\n\t            \"name\": \"Tyson Barrett\",\n\t            \"description\": \"Tyson Barrett is an analytics leader at Highmark Health, leading a team of statisticians, epidemiologists, and informaticists within Advanced Analytics. He is also the current maintainer of the data.table R package, working with the talented group of developers to maintain and progress this popular toolset. He is also an adjunct professor teaching analytics courses within the Jon M. Huntsman School of Business at Utah State University. https:\\\/\\\/www.linkedin.com\\\/in\\\/tyson-s-barrett-phd\\\/\",\n\t            \"sameAs\": [\n\t                \"https:\\\/\\\/www.linkedin.com\\\/in\\\/tyson-s-barrett-phd\\\/\"\n\t            ],\n\t            \"url\": \"https:\\\/\\\/www.interactivebrokers.com\\\/campus\\\/author\\\/tyson1barrett\\\/\"\n\t        }\n\t    ]\n\t}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Supercharging Quantitative Finance with data.table: New Features and Performance Gains","description":"R\u2019s data.table package has long been the standard for high-performance data operations.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.interactivebrokers.com\/campus\/wp-json\/wp\/v2\/posts\/227761\/","og_locale":"en_US","og_type":"article","og_title":"Supercharging Quantitative Finance with data.table: New Features and Performance Gains","og_description":"In the fast-paced world of quantitative finance, data manipulation speed and efficiency can make the difference between profit and loss. R\u2019s data.table package has long been the standard for high-performance data operations, and with the recent releases, including v1.17.0 in April 2025, it\u2019s become even more powerful.","og_url":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains\/","og_site_name":"IBKR Campus US","article_published_time":"2025-07-25T16:49:39+00:00","og_image":[{"width":1000,"height":563,"url":"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2025\/07\/computer-code-abstract-purple-blue.jpg","type":"image\/jpeg"}],"author":"Tyson Barrett","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Tyson Barrett","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains\/#article","isPartOf":{"@id":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains\/"},"author":{"name":"Tyson Barrett","@id":"https:\/\/ibkrcampus.com\/campus\/#\/schema\/person\/76a11a45e040233e9d7f0db8d3a58f39"},"headline":"Supercharging Quantitative Finance with data.table: New Features and Performance Gains","datePublished":"2025-07-25T16:49:39+00:00","mainEntityOfPage":{"@id":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains\/"},"wordCount":781,"commentCount":0,"publisher":{"@id":"https:\/\/ibkrcampus.com\/campus\/#organization"},"image":{"@id":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains\/#primaryimage"},"thumbnailUrl":"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2025\/07\/computer-code-abstract-purple-blue.jpg","keywords":["Data Manipulation","data.table package","lubridate package","Quantitative Finance","R"],"articleSection":["Data Science","Programming Languages","Quant","Quant Development","R Development"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains\/","url":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains\/","name":"Supercharging Quantitative Finance with data.table: New Features and Performance Gains | IBKR Campus US","isPartOf":{"@id":"https:\/\/ibkrcampus.com\/campus\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains\/#primaryimage"},"image":{"@id":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains\/#primaryimage"},"thumbnailUrl":"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2025\/07\/computer-code-abstract-purple-blue.jpg","datePublished":"2025-07-25T16:49:39+00:00","description":"R\u2019s data.table package has long been the standard for high-performance data operations.","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.interactivebrokers.com\/campus\/ibkr-quant-news\/supercharging-quantitative-finance-with-data-table-new-features-and-performance-gains\/#primaryimage","url":"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2025\/07\/computer-code-abstract-purple-blue.jpg","contentUrl":"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2025\/07\/computer-code-abstract-purple-blue.jpg","width":1000,"height":563,"caption":"Quant Computer Code"},{"@type":"WebSite","@id":"https:\/\/ibkrcampus.com\/campus\/#website","url":"https:\/\/ibkrcampus.com\/campus\/","name":"IBKR Campus US","description":"Financial Education from Interactive Brokers","publisher":{"@id":"https:\/\/ibkrcampus.com\/campus\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ibkrcampus.com\/campus\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ibkrcampus.com\/campus\/#organization","name":"Interactive Brokers","alternateName":"IBKR","url":"https:\/\/ibkrcampus.com\/campus\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ibkrcampus.com\/campus\/#\/schema\/logo\/image\/","url":"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2024\/05\/ibkr-campus-logo.jpg","contentUrl":"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2024\/05\/ibkr-campus-logo.jpg","width":669,"height":669,"caption":"Interactive Brokers"},"image":{"@id":"https:\/\/ibkrcampus.com\/campus\/#\/schema\/logo\/image\/"},"publishingPrinciples":"https:\/\/www.interactivebrokers.com\/campus\/about-ibkr-campus\/","ethicsPolicy":"https:\/\/www.interactivebrokers.com\/campus\/cyber-security-notice\/"},{"@type":"Person","@id":"https:\/\/ibkrcampus.com\/campus\/#\/schema\/person\/76a11a45e040233e9d7f0db8d3a58f39","name":"Tyson Barrett","description":"Tyson Barrett is an analytics leader at Highmark Health, leading a team of statisticians, epidemiologists, and informaticists within Advanced Analytics. He is also the current maintainer of the data.table R package, working with the talented group of developers to maintain and progress this popular toolset. He is also an adjunct professor teaching analytics courses within the Jon M. Huntsman School of Business at Utah State University. https:\/\/www.linkedin.com\/in\/tyson-s-barrett-phd\/","sameAs":["https:\/\/www.linkedin.com\/in\/tyson-s-barrett-phd\/"],"url":"https:\/\/www.interactivebrokers.com\/campus\/author\/tyson1barrett\/"}]}},"jetpack_featured_media_url":"https:\/\/www.interactivebrokers.com\/campus\/wp-content\/uploads\/sites\/2\/2025\/07\/computer-code-abstract-purple-blue.jpg","_links":{"self":[{"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/posts\/227761","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/users\/1660"}],"replies":[{"embeddable":true,"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/comments?post=227761"}],"version-history":[{"count":0,"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/posts\/227761\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/media\/227237"}],"wp:attachment":[{"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/media?parent=227761"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/categories?post=227761"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/tags?post=227761"},{"taxonomy":"contributors-categories","embeddable":true,"href":"https:\/\/ibkrcampus.com\/campus\/wp-json\/wp\/v2\/contributors-categories?post=227761"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}