Quant researcher and incoming Operations Research PhD at the University of Toronto, working on multi-period portfolio optimization. By day, a full-stack software and ML engineer building recommendation systems at scale. Also a guqin player and calligraphy practitioner.

Ing Tian

Quant Researcher · Portfolio Optimization

Incoming PhD · University of Toronto  ·  Full-stack SDE / MLE

A researcher by day, an artist by night,
and a mathematician at heart.

scroll

An OR quant in multi-period
portfolio optimization

deciding, and deciding again, under constraints

A quant who reasons in structure,
an engineer who makes the math run.

1 / 3

What is multi-period portfolio optimization?

$100, split four ways

  • $40 a chipmaker NVDA
  • $25 a phone maker AAPL
  • $20 a bank BAC
  • $15 gold XAUUSD

That is a portfolio. Nothing more — a decision about where money sits.

Then one Tuesday the chipmaker misses. Its shares fall a fifth; gold ticks up.

  • your split $92
  • All in on one $80 the most upside, and the most to lose
  • Even quarters $95 simple, and it ignores that they differ
  • Mostly safe $99 sleeps at night, gives up the upside

Same hundred dollars, same news, and it is worth anywhere from $80 to $99 afterwards. Choosing the split is the optimisation.

And then you choose again

  • Jan
  • Feb
  • Mar
  • Apr
  • May

Every month the world has moved and the split is wrong again — and every change costs you something to make. That is the multi-period part: not one decision, but a sequence of them, each one starting from wherever the last one left you.

One year, five ways of running the same four things

  • Retail
  • Buys once, never looks $123 -21% 100%
  • Sells after the fall $114 -17% 89%
  • Trades it at 2x $131 -42% 200%
  • Institutional
  • Rebalances on schedule $129 -19% 100%
  • Sizes to a risk budget $122 -18% 83%

The tallest line is the 2x account — and it is not the answer: it paid $8 to borrow and fell -42%, while rebalances on schedule reached $129 on a -19% fall. Two answers, not one — that is what there is to optimise.

Illustrative: the names are real, the numbers are invented to show how the choice works.

2 / 3 · the difficulty

Now imagine it is not your money.

The same decision, at four sizes Four kinds of rule, all binding at once 80 possible outcomes — for one holding Interlocking rules, and a table that cannot be filled

  • your savings $5,000
  • a rich family $10m $508
  • a fund $1bn $418,248
  • a big fund $10bn $13.0m

Cost of moving a fifth of the book at once. Price impact grows as the square root of your share of the day's volume, so the DOLLAR cost grows as m1.5 — ten times the size is thirty times the cost. Bars are log-scaled: the span is 7 orders of magnitude, so a linear axis would draw one bar and three slivers.

  • Mandate Max drawdown 8%, measured peak-to-trough on a rolling basis Breach it and investors redeem, which forces selling at exactly the wrong moment.
  • Regulatory Position disclosure above 5% of a company’s shares outstanding Crossing it publishes your hand and constrains how you can exit.
  • Liquidity No more than 10% of a name’s 20-day average volume per day At $1B, your own order moves the price against you — the cost of trading grows with size.
  • Operational Turnover budget, and settlement and borrow availability for shorts A trade you cannot settle or borrow is not a trade, however good the idea.

One holding, 52 weeks, 80 of the outcomes it could reach. Three drawn in ink so the individual threads are visible; the dotted line is where you started.

Solve it the exact way — dynamic programming, working backward from the horizon:

Vt(x)  =  maxuU(x){r(x,u)  +  E[Vt+1(x)]}V_t(x) \;=\; \max_{u \in U(x)} \Big\{\, r(x,u) \;+\; \mathbb{E}\big[\,V_{t+1}(x')\,\big] \Big\}

The max is the problem. It runs over every legal holding, so the table you would have to fill has one entry per state:

X  =  mN\lvert \mathcal{X} \rvert \;=\; m^{N}

At just 10 levels per name, you pass the atoms in the observable universe at 80 names. A real book holds 3,000 — a table of 103,000 states, every month.

So nobody fills it. You approximate V instead — and choosing how is the research.

Square-root impact, calibrated so that trading a full day's volume moves the price by one daily standard deviation — the published rule of thumb. Volumes are a mega-cap's: the friendliest case there is. Every category is real and every reason is the actual reason. The thresholds are typical rather than any one fund's, and a real mandate runs to hundreds of pages. Illustrative paths from a fixed seed — identical on every build. A real book's names also move TOGETHER, which no single fan can show, and their correlation rises exactly when you need it not to. 28 rules standing for 2,000; 10 levels per name is a deliberately crude discretisation, and the blowup is exponential in N regardless of it.

That is the job. Not picking a winner — choosing a whole sequence of positions that stays legal and stays affordable, whichever of those futures actually arrives.

3 / 3 · where to start

Still an open problem.

No one has a method for the whole of it at this size — one that runs at three thousand names and still tells you how far from optimal it is. What follows is not a plan and not a full toolbox: a few of the general families any attempt would be assembled from.

You cannot optimise against a future you have not described.

Before any solver there has to be a model of how prices and risk move: drift, volatility, how names move together, and how all of that changes through time. Everything else here is built on top of whatever goes in that slot. Choosing it is a modelling decision, not a technical one, and it is rarely the part that gets argued about.

The model has to be fitted, and that is where most of the damage happens.

A full covariance over three thousand names carries about four and a half million free parameters, and needs more observations than there are names before it can even be inverted — roughly twelve years of daily data. Shrinkage, factor structure and Bayesian priors are how that is made usable at all. Expected returns are worse: they matter most and are estimated least well.

Where the problem is convex, the answer comes with a proof attached.

For a single date, thousands of names and thousands of convex rules, this part is settled and industrial: a global optimum, exact feasibility, and a price for every constraint that binds. Position counts, minimum sizes and round lots break convexity and turn it into an integer problem, which is where the guarantees stop and the search begins.

The decisions are a sequence, and the sequence is what makes it hard.

Dynamic programming is the frame for weighing a trade now against what it costs later. At this size it cannot be solved as written, so what is usable are its approximations: roll a short horizon forward and re-solve, or fit a policy from simulated experience rather than tabulating one, which is what reinforcement learning is doing here. Both buy scale and give up the bound on how far from optimal you are.

value surface 29 candidate policies the optimum

A world small enough to solve exactly…

9 exposure levels at 12 dates — 108 decisions, 972 comparisons, and 912 = 2.8×1011 exposure paths the recursion never visits. It is solvable exactly because the world was handed over complete: the tilt is written down in advance (risk is cut at t3, t4, t8), the transition is deterministic so no expectation is taken anywhere, the objective is additive by construction, there is one number of risk instead of three thousand, and there is no rule book. The real problem withholds all five.

Directions, not results, and not a complete list. What has actually been built is further down, under the work.

A descent, with one climb

Years in engineering, and a pivot to quantitative research.

The deepest point on that surface is not marked, because I do not know where it is. What I know is the direction, and that the descent is still running.

A contour map of a non-convex loss surface with a career path crossing a ridge between two basins. The list below carries the same information.

  1. 2019 — 23B.Eng · McGill. Engineering first, because it was the visible path.
  2. 2021SDE Intern · TikTok. Shipping is a skill of its own, and I was good at it.
  3. 2022SDE Intern · Amazon. Pipelines move data; they do not ask what the data means.
  4. 2022 — 23Ericsson AI Lab. The modelling half held my attention far longer than the plumbing.
  5. 2023 — 25Senior SWE · TikTok. A comfortable minimum: 50k QPS, real scale, and still not the question I wanted.
  6. 2026 —Electronic Arts. A bridge, chosen deliberately: enough room to keep the research moving.
  7. 2023 —Independent quant. Built the trading system to test whether the interest was real. It was.
  8. Fall 2027 —PhD · Operations Research. Portfolio optimization under Kwon — the first step down the side I actually want.

Why the climb

The local minimum

Most of my career has been spent as a full-stack engineer, and I was good at it.

Nine roles, four companies, systems that held at fifty thousand requests a second. By every visible measure that is a good place to stand, and the field around it is flat: every direction out looks like more of the same, slightly worse.

That flatness is the trap, and it is measurable rather than poetic. In the engineering basin the surface bends almost equally in every direction, so no step tells you much — the gradient there is a thousandth of what it is on the research side. Years can pass without a signal strong enough to argue with.

Why the climb

What I learned by moving was not the shape of the landscape. It was the shape of my own preferences.

The modelling half of every job held my attention and the plumbing did not. Written down once, that is a sentence about taste. Written down eight times across eight years, it is data — and the direction it points is mathematics, structured argument, and problems where the feedback is direct enough to be worth arguing with.

A gradient method cannot leave a basin; it has no move that goes uphill. So leaving was not an optimisation, it was a decision: a paper written on my own time, a trading system built to test whether the interest survived contact with real money, and a doctorate in the thing itself. The climb is the honest part of the picture.

Appendix

Publications

RL-BHRP

q-fin.PM · Portfolio Management · arXiv preprint · arXiv:2508.11856

~120%

wealth compounded · OOS ’20–’25

0.90

Sharpe · vs 0.85 / 0.76

Self-Attention on RNN-based Text Classification

CNSSE / SPIE, vol. 12290 · 2022

Read the research

Writing

Favourite quotes

Miscellaneous · August 2026

Read the writing

Projects

witness

A Claude Code / OpenCode plugin that keeps a person-centric archive of how you think and grow — not what your code did.

manifold

This site's hero terrain, ported to a native macOS screen saver and live wallpaper — a mountain rendered as breathing points of light.

All projects

I am not a source of alpha.

IT
for those who understand