Kailan Daig ng Equal Weight ang Optimization
Daig ng equal weight ang optimized position sizing sa maikling sample. Ipinapakita ng seeded Python simulation ang crossover, bago ito magsara habang lumalaki ang sample.
Mas mahusay ang equal weight kaysa sa optimized position sizing kapag masyadong maikli ang sample para matukoy nang maaasahan ang expected returns. Karaniwang ganito ang sitwasyon, hindi ito eksepsiyon. Ang optimizer ay wastong arithmetic na inilapat sa input na hindi nasusukat nang maayos ng sinuman. Walang tinatayang anuman ang 1/N portfolio na naka-equal weight. Kaya naman nananatili itong matatag kapag hindi maaasahan ang mga estimate.
Talaga bang daig ng equal weight ang optimization?
Sa isang partikular na kondisyon, oo. Isa-isahin natin ang mga termino. Ang equal weight, na isinusulat bilang 1/N, ay pantay na naghahati ng capital sa N positions at hindi nangangailangan ng anumang forecast. Kinakalkula ng mean variance optimization ang mga weight na may pinakamataas na inaasahang return bawat unit ng estimated variance. Kinakalkula naman ng Kelly criterion ang mga weight na nagma-maximize sa long-run compound growth; sa mga uncorrelated asset, nagiging proporsyonal ang resulta nito sa expected excess return ng bawat asset na hinati sa variance nito. Ipinaliliwanag nang detalyado ng aming gabay sa position sizing gamit ang Kelly criterion ang formula na ito.
Parehong nangangailangan ng iisang input ang dalawang optimizer: isang expected return para sa bawat asset. Ito ang quantity na pinakamahina ang pagtatantya batay sa sample. Ang volatility ay maaaring makuha mula sa maikling window nang may sapat na precision. Hindi ito totoo sa mean, at sapat ang laki ng agwat ng dalawa para makita ito sa anumang price history. Sinusuri ng panel sa ibaba ang anim na malawak na hawak na pangalan, kinakalkula nang hiwalay ang bawat calendar year mula 2015 hanggang 2024, at ipinapakita kung gaano kalaki ang agwat sa pagitan ng pinakamataas at pinakamababang yearly estimate. Dalawang beses itong ginagawa para sa bawat pangalan: una, para sa annualized average daily return; at ikalawa, para sa annualized volatility.
Ang eksaktong SQL sa likod ng bawat numero
WITH prices AS
(
SELECT
ticker,
date,
toFloat64(max(close)) AS c
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'SPY', 'KO', 'JNJ')
AND date >= '2015-01-01'
AND date < '2025-01-01'
GROUP BY ticker, date
),
rets AS
(
SELECT
ticker,
date,
c / lagInFrame(c, 1) OVER (PARTITION BY ticker ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) - 1 AS ret
FROM prices
),
yearly AS
(
SELECT
ticker,
toYear(date) AS yr,
avg(ret) * 252 * 100 AS mean_pct,
stddevPop(ret) * sqrt(252) * 100 AS vol_pct
FROM rets
WHERE isFinite(ret)
GROUP BY ticker, yr
HAVING count() >= 200
)
SELECT
ticker,
round(max(mean_pct) - min(mean_pct), 1) AS mean_estimate_range_pct,
round(max(vol_pct) - min(vol_pct), 1) AS vol_estimate_range_pct
FROM yearly
GROUP BY ticker
ORDER BY mean_estimate_range_pct DESCPara sa NVDA, umaabot sa 184.7 percentage points ang saklaw ng yearly mean estimate sa loob ng sampung taon, kumpara sa 28.6 points na range sa volatility estimate ng parehong pangalan sa parehong mga taon. Ang pinakastable na pangalan sa panel, KO, ay nagkaroon pa rin ng galaw na 23.9 points sa yearly mean estimate nito. Anumang scheme na ginagamit ang average return noong nakaraang taon bilang expected return ngayong taon para sa isang optimizer ay binibigyan ito ng numerong may ganito kalaking pagbabago.
Gaano kahabang sample ang kailangan para matantiya ang expected return?
Ang standard error ng tinantiyang mean return ay volatility ng asset na hinati sa square root ng haba ng sample sa mga taon. Sa mga taon ito sinusukat, hindi sa dami ng observations: walang dagdag na halaga ang pag-sample sa parehong labindalawang buwan kada oras sa halip na kada araw. Kung 20 percent ang volatility ng isang asset, ipinapakita ng formula na iyon na ang isang taong history ay nagbibigay ng standard error na 20 percentage points kada taon. Sa apat na taon, kalahati ito at nagiging 10. Para bumaba ito sa isang point—ang precision na gugustuhin mo bago paghambingin ang dalawang asset na dalawang points ang agwat sa kanilang tunay na mean—kailangan ng apat na siglo ng data.
Iba ang volatility. Mas gumaganda ang precision nito batay sa dami ng observations, hindi sa haba ng panahon sa kalendaryo. Kaya sapat na ang ilang buwan ng daily data upang mailagay ito sa loob ng ilang points. Hinahati ng panel sa ibaba ang dalawampung taon ng daily returns ng isang index fund sa magkakahiwalay na blocks na may nakatakdang haba. Kinukuwenta nito ang parehong estimates sa bawat block at ipinapakita kung gaano kalaki ang pagkalat ng mga estimate mula sa isang block patungo sa iba.
Ang eksaktong SQL sa likod ng bawat numero
WITH prices AS
(
SELECT
date,
toFloat64(max(close)) AS c
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
AND date >= '2005-01-01'
AND date < '2025-01-01'
GROUP BY date
),
rets AS
(
SELECT
date,
c / lagInFrame(c, 1) OVER (ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) - 1 AS ret
FROM prices
),
numbered AS
(
SELECT
ret,
row_number() OVER (ORDER BY date ASC) AS i
FROM rets
WHERE isFinite(ret)
),
sweep AS
(
SELECT
arrayJoin([21, 63, 126, 252, 504]) AS n,
i,
ret
FROM numbered
),
blocks AS
(
SELECT
n,
intDiv(i - 1, n) AS blk,
avg(ret) * 252 * 100 AS mean_pct,
stddevPop(ret) * sqrt(252) * 100 AS vol_pct
FROM sweep
GROUP BY n, blk
HAVING count() = n
)
SELECT
concat(toString(n), ' sessions') AS sample_length,
round(stddevPop(mean_pct), 1) AS mean_estimate_spread_pct,
round(stddevPop(vol_pct), 1) AS vol_estimate_spread_pct,
count() AS window_count
FROM blocks
GROUP BY n
ORDER BY n ASCSa mga block na may habang 21 sessions, kumakalat ang mean estimate sa 53.7 percentage points, kumpara sa 10.9 points para sa volatility estimate na sinukat sa kaparehong mga block. Kapag pinahaba ang block sa 504 sessions, lumiit ang mean scatter sa 10.6 points. Lumiliit ito ayon sa square root: bawat paghahati sa error ay nangangailangan ng apat na beses na mas maraming data.
Isang seeded simulation na maaari mong patakbuhin mismo
Hindi pa rin nito pinatutunayan na sapat ang laki ng estimation error para ibigay ang panalo sa 1/N. Ito ang makapagpapatunay. Python install lang ang kailangan ng recipe; wala nang iba: walang data files, downloads, o third-party packages. Gumagawa ito ng sarili nitong returns mula sa mga parameter na pipiliin mo, kaya alam ang tunay na sagot at maaaring i-score ang dalawang allocation laban dito.
- Mag-import ng dalawang module,
import randomatimport statistics, kasama angfrom math import log. Itakda ang seed sa susunod na linya gamit angrandom.seed(20260816). - Magtakda ng limang asset na may true annual expected returns na 5, 6, 7, 8 at 9 percent, bawat isa ay may true annual volatility na 20 percent at walang correlation sa isa’t isa. I-convert ito sa daily step gamit ang
mu_d = mu_a / 252atsd_d = sd_a / (252 ** 0.5). - Pumili ng sample length na T mula sa sweep na
[60, 125, 250, 500, 1000, 2500, 5000]. - Gumuhit ng T daily returns para sa bawat asset gamit ang
random.gauss(mu_d, sd_d). Ang draw na iyon ang buong history na makikita ng manager. - I-estimate ang mean ng bawat asset gamit ang
statistics.meanat ang volatility nito gamit angstatistics.stdev. Ang dalawang estimate na ito lang ang alam ng optimizer. - Buuin ang equal weight portfolio sa pamamagitan ng paglalaan ng 0.2 sa bawat isa sa limang asset. Wala itong ginagamit na alinman sa mga estimate.
- Buuin ang optimized portfolio sa pamamagitan ng pagtatakda ng bawat raw weight sa
mu_hat / (sd_hat ** 2), pagkatapos ay hatiin ang bawat weight sa kabuuan ng absolute raw weights. Sa ganitong paraan, pareho ang gross exposure ng dalawang portfolio. - Gumuhit ng bagong out-of-sample path na may 2520 daily returns bawat asset mula sa true parameters. Wala sa dalawang allocation ang nakakita sa path na ito.
- I-score ang dalawa sa path na iyon gamit ang average ng
log(1 + r), kung saan ang r ay weighted sum ng returns ng limang asset sa araw na iyon. - Ulitin ang steps 4 hanggang 9 para sa 2000 independent trials sa bawat T, at itala ang share ng trials kung saan mas mataas ang score ng equal weight kaysa sa optimized weights.
Basahin ang sweep mula sa maikling T hanggang sa mahabang T. Sa maikling dulo, nananalo ang equal weight sa malinaw na majority ng trials. Patuloy na bumababa ang share habang lumalaki ang T, at sa mahabang dulo, mas madalas namang nananalo ang optimized weights. Sa bandang gitna, nagkakapalit ang dalawa. Nagbabago ang crossover point depende sa seed at sa spread ng true means. Hindi nagbabago ang direksiyon: mas maraming data ang pumapabor sa optimizer, habang mas kaunting data ang pumapabor sa 1/N. Para i-replicate ito, palitan ang integer sa loob ng random.seed(20260816) at patakbuhin muli ang sweep.
Bakit pinalalaki ng optimizer ang maling estimate ng mean
Tingnan kung saan pumapasok ang mga estimate sa weight. Nasa numerator ang estimated mean at nasa denominator ang estimated variance. Kapag dinoble ang estimate ng mean, dumodoble rin ang weight. Kapag binawasan ng isang-kapat ang estimate ng variance, tumataas ng isang-katlo ang weight. Sa isang mapalad na sample, parehong nagtutulak sa iisang direksiyon ang dalawang error: pinapataas ng sunod-sunod na magagandang draw ang nasusukat na mean at kadalasan ay pinapababa rin ang nasusukat na variance sa parehong window. Itinuturing ng optimizer ang asset na iyon bilang pinakamalakas sa grupo at ina-adjust ang laki ng posisyon batay rito. Sa out-of-sample period, ordinaryong miyembro na lamang ulit ito ng grupo. Hindi nakita ng equal weight ang mapalad na sample.
Ang simulation ang mas banayad na bersiyon ng problemang ito. Ang limang uncorrelated asset ay nag-iiwan ng diagonal covariance matrix na walang kailangang i-invert. Correlated ang mga real portfolio, at ang sample covariance matrix na nabuo mula sa halos kapantay lamang na bilang ng observations at assets ay malapit sa singular. Kapag in-invert ito, napapalaki ng maliliit na error sa inputs ang weights, kaya nakararating ang optimizer sa posisyong ilang ulit ang halaga kumpara sa capital sa isang pangalan, kasabay ng offsetting short sa malapit nitong substitute. Tinatalakay sa aming note tungkol sa concentration risk sa isang portfolio kung ano ang epekto ng ganitong weight sa drawdown.
Hindi rin nananatiling pareho ang input. Sinusubaybayan ng panel sa ibaba ang rolling one-year average daily return, annualized at kinukuha buwan-buwan, para sa isang malawak na index fund at isang malaking pangalan sa consumer staples.
Ang eksaktong SQL sa likod ng bawat numero
WITH prices AS
(
SELECT
ticker,
date,
toFloat64(max(close)) AS c
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('SPY', 'KO')
AND date >= '2015-10-01'
AND date < '2025-01-01'
GROUP BY ticker, date
),
rets AS
(
SELECT
ticker,
date,
c / lagInFrame(c, 1) OVER (PARTITION BY ticker ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) - 1 AS ret
FROM prices
),
trailing AS
(
SELECT
ticker,
date,
avg(ret) OVER (PARTITION BY ticker ORDER BY date ASC ROWS BETWEEN 251 PRECEDING AND CURRENT ROW) * 252 * 100 AS trailing_mean_pct,
row_number() OVER (PARTITION BY ticker ORDER BY date ASC) AS i
FROM rets
WHERE isFinite(ret)
)
SELECT
toString(toStartOfMonth(date)) AS month,
round(avgIf(trailing_mean_pct, ticker = 'SPY'), 1) AS spy_trailing_mean_pct,
round(avgIf(trailing_mean_pct, ticker = 'KO'), 1) AS ko_trailing_mean_pct
FROM trailing
WHERE i >= 252
AND date >= '2017-01-01'
GROUP BY month
ORDER BY month ASCAng bawat punto sa dalawang linyang iyon ay numerong maaaring tinanggap ng isang optimizer bilang expected return sa petsang iyon. Ang unang monthly reading para sa SPY ay 17.7% at ang huli ay 25.8%, na may 96 readings sa pagitan. Nagsisimula ang KO sa parehong window sa -0.4%. Ang weighting scheme na kumokonsumo sa series na ito buwan-buwan ay minamana ang bawat pagbabago nito.
Nakakatulong ba ang half Kelly at shrinkage?
Pinapalambot nila ang problema. May apat na patch na karaniwang ginagamit, at bawat isa ay isinasakripisyo ang bahagi ng theoretical optimum kapalit ng mas mababang sensitivity sa estimate.
- Hinahati ng half Kelly ang bawat weight. Patag ang Kelly growth curve malapit sa peak nito at matarik sa ibaba nito. Kaya maliit lamang ang isinusukong bahagi ng theoretical growth rate sa half stake, habang mas malaki ang nababawas sa pinsalang dulot ng overstated edge. Volatility targeting Ginagamit nito ang parehong prinsipyo sa denominator: nagse-size batay sa tanging input na kayang ibigay ng maikling sample.
- Hinihila ng shrinkage ang bawat estimated mean patungo sa cross-sectional average ng mga estimate, at lumalaki ang adjustment habang lumiliit ang sample. Kapag itinulak ito sa sukdulan, pare-pareho ang expected return ng bawat asset. Kung pare-pareho rin ang volatility, awtomatikong nagbabalik ang optimizer ng equal weight. Ang equal weight ang fully shrunk portfolio.
- Nililimitahan ng constraints, gaya ng pagbabawal sa shorting at pagtatakda ng cap sa bawat position, kung gaano kalaki ang maitutulak ng isang masuwerteng estimate sa isang weight. Damage control ang mga ito, hindi pagpapahusay sa estimate.
- Kapag tuluyang inalis ang expected returns, natitira ang minimum variance at risk parity, na covariance lamang ang ginagamit. Ito ang input na aktuwal na kayang ibigay ng sample.
Wala sa apat ang lumilikha ng impormasyong wala sa sample. Ang binabago lamang nila ay kung gaano kalaking bahagi ng portfolio ang nakasalalay sa impormasyong maaaring wala sa iyo.
Kapag nagbubunga ang optimization
Gumagana ang crossover sa parehong direksiyon. Kapag naging malaki ang T kumpara sa spread sa pagitan ng tunay na means, mauungusan ng optimized allocation ang equal weight at mananatili itong lamang. Kung mas malawak ang spread, mas maaga itong nangyayari. Ang optimization din ang tamang tool kapag ang input ay nagmumula sa data: mas mahusay na na-e-estimate ang covariance at hedge ratios kaysa sa expected returns.
May sariling kapalit ang equal weight. Binabalewala nito ang impormasyong tunay mong taglay, at sa maliit na universe, maaari itong mag-concentrate nang kasinglaki ng anumang optimizer. Ituring ito bilang baseline na kailangang lampasan ng anumang kandidatong weighting gamit ang data na hindi nakita ng weights. Ang pag-fit ng weights at pag-score sa mga ito gamit ang parehong sample ay look-ahead bias sa backtesting na may ibang anyo, at palagi nitong pinapaboran ang optimizer. Para sa isang makatotohanang range sa paligid ng nasukat na edge sa halip na iisang point estimate, ang bootstrapped confidence intervals ang standard tool.
Mga Madalas Itanong
Talaga bang nalalampasan ng equal weight ang mean variance optimization?
Sa maiikling sample, madalas na oo. Kailangan ng optimizer ng estimate ng expected return ng bawat asset, at ang estimate na iyon ay may standard error na humigit-kumulang katumbas ng volatility ng asset na hinati sa square root ng haba ng sample sa mga taon. Habang mas malaki ang error na iyon kaysa sa tunay na pagkakaiba ng mga asset, ingay ang pinagkakahanay ng optimizer. Walang estimate na maaaring magkamali ang equal weight.
Ilang observation ang kailangan para ma-estimate ang expected return?
Mas marami kaysa sa halos kayang makuha ng sinuman. Para sa asset na may 20 percent volatility, ang isang taon ng daily data ay nag-iiwan ng standard error na malapit sa 20 percentage points bawat taon. Para mahati sa kalahati ang error na iyon, kailangan ng apat na beses na mas mahabang calendar span. Hindi nakatutulong ang pagdaragdag ng intraday observations sa loob ng parehong taon. Sa kabilang banda, magagamit na ang volatility kahit mula sa ilang buwan ng data.
Ang half Kelly ba ay mas maliit na bet lamang?
Mas maliit itong bet sa mas paborableng terms. Patag ang Kelly growth curve malapit sa peak nito. Kaya ang paghahati sa stake ay nagsasakripisyo lamang ng maliit na bahagi ng theoretical growth rate, habang humigit-kumulang hinahati ang volatility ng path at binabawasan ang cost ng overstated edge.
Ano ang 1/N portfolio?
Ito ang portfolio na naglalaan ng pantay na bahagi ng capital sa bawat isa sa N positions at nagre-rebalance ayon sa iskedyul. Hindi nito kailangan ng return forecast o covariance estimate. Dahil dito, ito ang standard benchmark para sa bawat weighting scheme na nangangailangan ng mga iyon.
Paano binuo ang mga panel
Binabasa ng lahat ng tatlong panel ang daily closes at kinukuwenta ang simple close-to-close returns. Pinagsasama ang duplicate rows upang magkaroon ng isang close lamang bawat ticker sa bawat petsa. Ina-annualize ang means sa pamamagitan ng pag-multiply sa average daily return ng 252 sessions. Ina-annualize naman ang volatilities sa pamamagitan ng pag-multiply sa daily standard deviation sa square root ng 252. Isinasama ng yearly panel ang isang calendar year lamang kung may hindi bababa sa 200 sessions. Gumagamit ang block panel ng non-overlapping blocks at itinatapon ang huling partial block sa bawat haba. Ipinapakita ng window count column nito kung ilang block ang nalikha sa bawat haba. Walang dividend na isinasama saanman. Kaya ang mga ito ay price returns, at understated ang level ng anumang mean para sa mga dividend payer. Ang spread ng mga estimate ang mahalagang punto ng mga panel, hindi ang level.
Taglay ng bawat panel dito ang eksaktong SQL sa ilalim ng chart, at may seed ang simulation. Para patakbuhin ang parehong estimate stability check sa sarili mong listahan ng mga pangalan, hilingin ito sa plain English sa Strasmore terminal.