Skip to content

etf_trick

Position Sizing and Trade Construction

Backtests must include financing, carry, and contract-roll mechanics to avoid optimistic bias.

NAVt=NAVt1(1+rtct)NAV_t=NAV_{t-1}(1+r_t-c_t)

rtroll=FtnearFtfarFtfarr^{roll}_t=\frac{F^{near}_t-F^{far}_t}{F^{far}_t}

use openquant::etf_trick::{EtfTrick, Table};
// Load open/close/allocation/cost tables from CSV
let etf = EtfTrick::from_csv(
"open.csv", "close.csv", "alloc.csv", "costs.csv", Some("rates.csv"),
).unwrap();
// Generate synthetic ETF NAV series
let series = etf.get_etf_series(252).unwrap();
// Returns Vec<(date_string, nav_value)>
use openquant::etf_trick::{get_futures_roll_series, FuturesRollRow};
let rows: Vec<FuturesRollRow> = vec![/* ... */];
let adjusted = get_futures_roll_series(&rows, "backward", true).unwrap();
  • EtfTrick
  • EtfTrick::from_tables
  • EtfTrick::from_csv
  • EtfTrick::get_etf_series
  • get_futures_roll_series
  • FuturesRollRow
  • Table
  • Verify contract calendar assumptions.
  • Costs and rates should come from the same clock as price data.
  • This module is Rust-only — no Python bindings are currently exposed.