Treasury & Corporate Finance
Miller-Orr Stochastic Cash Control Bands: Return Point and Upper Limit
Compute the Miller-Orr cube-root cash control spread Z, asymmetric one-third return point RP = L + Z/3, and upper sweep threshold H = L + Z for volatile daily cash flows.
Avoid the midpoint trap in Miller-Orr cash band design
When daily net cash inflows and outflows fluctuate randomly with standard deviation sig_day, Baumol-Tobin steady depletion does not apply. Miller and Orr (1966) let cash wander untouched between a lower safety floor L and an upper ceiling H = L + Z, intervening only at the boundaries to reset cash to a target return point RP = L + Z/3 — one-third of the band above L, NOT the halfway midpoint L + Z/2.
Test clean hand-checkable inputs: minimum safety balance L = 50,000 (B2), transfer cost b = 45 (B3), daily cash-flow SD sig_day = 10,000 (B4, so variance = 10^8), and daily yield r_day = 0.000125 (B5, i.e., 4.5% / 360). Inside the cube root, (3 * 45 * 10^8) / (4 * 0.000125) = 27 * 10^12, whose exact cube root is 30,000! Thus spread Z = 3 * 30,000 = 90,000, optimal return point RP = 50,000 + 30,000 = 80,000 (whereas a naive midpoint gives 95,000), and upper ceiling H = 140,000.
| Control Band Metric | Miller-Orr Formula | Exact Output |
|---|---|---|
| One-Third Step (Z / 3) | (3 * b * sig_day^2 / (4 * r_day))^(1/3) | 30,000 |
| Total Control Spread Z | 3 * (Z / 3) | 90,000 |
| Optimal Return Point RP | L + Z / 3 (NOT midpoint L + Z / 2) | 80,000 (vs 95,000 trap) |
| Upper Sweep Limit H & Avg Cash | H = L + Z; Avg = L + (4/9)*Z | H = 140,000; Avg = 90,000 |
Miller-Orr Return Point RP Formula
Raise (3 * b * sig_day^2) / (4 * r_day) to the 1/3 power and add directly to the minimum floor L.
=IF(OR(B3 <= 0, B4 <= 0, B5 <= 0), "Invalid Policy Input", ROUND(B2 + ((3 * B3 * B4^2) / (4 * B5))^(1 / 3), 2))Total Spread Z, Upper Limit H & Volatility Stress Test
Because Z scales with the cube root of variance (power 2/3 of standard deviation), multiplying daily cash-flow volatility sig_day by 8 (from 10,000 to 80,000) multiplies variance by 64 and widens Z by 64^(1/3) = 4x (from 90,000 to 360,000), raising RP to 170,000 and H to 410,000.
=LET(l_min, B2, b_fee, B3, sig_d, B4, r_day, B5, IF(OR(b_fee <= 0, sig_d <= 0, r_day <= 0), "Invalid Policy Input", ROUND(l_min + 3 * ((3 * b_fee * sig_d^2) / (4 * r_day))^(1 / 3), 2)))Try the example
Use the original values or change them to test your understanding.