diff --git a/README.md b/README.md index f5b3889..0c1c4ba 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ console.log(series.maxDrawdown()); // Max drawdown ## Features - **OpenTimeSeries**: Single timeseries with risk metrics - (CAGR, volatility, VaR, CVaR, Sortino ratio, max drawdown, etc.) + (CAGR, volatility, VaR, CVaR, Sortino ratio, max drawdown, autocorrelation, etc.) - **OpenFrame**: Multi-series comparison, correlation, portfolio construction, rebalancing - **ReturnSimulation**: Monte Carlo with reproducible seeds @@ -47,6 +47,9 @@ console.log(series.maxDrawdown()); // Max drawdown - `valueToRet()`, `toCumret()` - Convert price ↔ returns - `geoRet()`, `arithmeticRet()`, `vol()`, `varDown()`, `cvarDown()` - `sortinoRatio()`, `retVolRatio()`, `maxDrawdown()`, `maxDrawdownBottomDate()`, `downsideDeviation()` +- `autocorr(lag?, opts?, squared?)` — lag-k autocorrelation of demeaned returns +- `acf(lags, opts?, squared?)`, `pacf(lags, opts?, squared?)`, `partialAutocorr(lag?, opts?, squared?)` +- `ljungBox(lags, opts?, squared?)` — Ljung–Box test `(statistic, pvalue, lags)` - `ewmaVolFunc()`, `ewmaVarFunc()` - EWMA risk measures ### OpenFrame @@ -55,6 +58,7 @@ console.log(series.maxDrawdown()); // Max drawdown - `toDrawdownSeries()` - Convert aligned columns to drawdown (value/peak - 1) - `makePortfolio()` - Weighted portfolio (eq_weights, inv_vol, max_div, min_vol_overweight) - `correlMatrix()`, `trackingError()`, `infoRatio()`, `beta()`, `jensenAlpha()` +- `autocorr(lag?, squared?)` — per-constituent lag-k autocorrelation (`number[]`) - `maxDrawdown()`, `maxDrawdownBottomDate()` - Per-column drawdown metrics - `captureRatio(ratio, baseColumn?, opts?)` - CAGR-based capture vs benchmark (`opts.freq` optional; when omitted, uses frame data as-is) diff --git a/docs/assets/navigation.js b/docs/assets/navigation.js index f119d9e..6ed8c96 100644 --- a/docs/assets/navigation.js +++ b/docs/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "eJyV1l1v0zAUBuD/kuuJsokN2N3aroC0saqtQIC4OCQnjUViZ8cn0wriv09JRr7snHS3Oa8fxx9x/ONvwPjIwWXwBdICd4ccg5MgB06CywB1kdlZU3iVcJYGJ8FvpaPg8t2/k6btEhivUrXXGWq+JjLUImEK1qKduZm+d3rWFT/p0BBhyFe0L8oWC5P9MiO0EJb7UKwgrcb3HWlc98Qk91Y9YlTF+ZCjHWF9KUn9bL6i2ic85vXrknSXo14RZOgiTWmq/U5luEVSaP1IW5ekDVrI8hSXwHBj7NjQvDHZ5YL0VmVFCqyM9pH9hKRdx7EKFWpekdGskNZGaW5NpRkphhDtzB/t42fnF93JpOgGwfL2vgBCu0FbpH7bm5TodWq4XoO7vByj9bJOSiI3mBtiieslJGqbAOVY9i5xTuo4cnyFBhmRq3cHRmtDHJtUGb/oxCR0ATkbqid8gzY32na+w+oomPkyA/P1+7en52dd1xSa6bAwkcu1pSmlPKQ3oPforElNDetT3o1iJEjn6s8SDivC+yHoBI4Um7muDz2l9867jien+tiAjkz2ATUScPdAquFBeVJ7Pr18w+/WppwIGFfqsSXiQofVKsyeS33h4s2g8c5smcaaV0UBwOHJ5oOckADGyGHS3ek+0Am9BJwDh8lRapWUaJUy0rywSqO1Szj4X9ZJTZI7cxzazwnsvt6VuIAUdQTUfLA+ezQsdsBrwgdlCtt5pTnGhnBnIjj4O5poJHSouk18eC8gQClY7iTv4luj2bs//MmX0N8QvB+INyjAGYL2OeVzoZmJY4s8tbXclEDmIS+SsY3UFCWguWd4haZ6FPGxzghMmZAowhyougeUt0qv1Y/I2MPEJh1EBOy+AM0q9c7z/5rQnMb+Xa1C0v+rj1WXubHJbqsiUf/hdmaNpEx0rSO/5cQE1FaXuHKxfVZbPYoYG14/IVHPF8DmpuHd4W5KItk7S5alWWGVoa02/yIB5T03BhEH+/kEVjafww==" \ No newline at end of file +window.navigationData = "eJyV1t9v0zAQB/D/Jc8TZRMbsLe1XQGpo1VbgQDxcCSXxJDY2fkytSD+d9Sk5Kdz6V5zX3/sOLbjb388xj17t94nSHLcHTL0LrwMOPZuPdR5aidV4UXMaeJdeL+UDrzbN38vqrZzYLxLVKRT1HxPZKhG/ASsRTvpZ9re5VVT/KB9Q4Q+31GUH1vMTPrDDNBCWO5DsYKkeL+vSMO6Iya5D2qPQRHnQ4Z2gHWlJPWj+YwqinnIa9claZWhXhCk2Eeq0lj7nUpxi6TQupG6LkkbtJBmCc6BYWns0Ks5Y7LLOemtSvMEWBntItsJSbsPQ+Ur1Lwgo1khrY3SXJtKM1IIPtqJO9rGr65vGvgSou48NryqKhErCpYIlrePORDaDdo8cQ/PmZTodWK4HMAqO06Te5S9lERuMDPEEtdKSNQ2Bsrw2LvE9VLnkcMfuZMRuXKBYbA2xKFJlHGLvZiEziBjQ+WEb9BmRtvGVi5Ok4kr0zFfvn19eX3VdE2umQ4zE/S5ujSmHM/5DegIe9+kpLr1MW+pGAmSqfo9h8OC8LEL9gJnitVcl+em0lFvrMPJ0T5+5jqamn13M57cVnXM2oAOTPoONRJw83wssU55VDsdpq6pbNbGnAAYF2pfE2Gu/eKLTk6ltnDzqtN4Z7ZMQ82LogBg96B1Qb2QAIbIftzcNS6wF3oOOAX247PUIinRKmGkaW6VRmvncHAPtpcaJXfmPLSdE9ioXJU4gwR1AFRtfpc9GBY74DXhkzK5bQxpiqEh3JkADu6ORhoJHapmExfeCghQApYbyVX4YDQ714c7+Rz6C4JzgziDApwiaJdzfC40M2FokceWVj8lkJnPs3hoIVVFCajuLE6hqp5FvC8zAnNMSBRhBlTcKY6XXKfVjsjY08gi7UQE7DEHzSpxzvP/mtCchv5dtULS/6uNFRfDocmuqyJR/uF2Zo2kTHCvA7fViwmoLS6Ex4/tsurqWcTQ67UTEnW6TFa3FucK76ckkp2zZFmaFVYp2mLxz2JQznOjE+lh3/8B983PwQ==" \ No newline at end of file diff --git a/docs/assets/search.js b/docs/assets/search.js index 95c93c7..daa45a3 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -window.searchData = "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"; \ No newline at end of file +window.searchData = "eJytXWuP27iS/S+er42MinrnWx6Tu1l0JoNONhe7jcFAbdOOJrLkK8mdF+a/L0hJdpEsSSW7PyVok1V8HBbJcyjy56quvjar5/c/V1/ycrN6ntysymwvV89Xn7LiKD9+P8jVzepYF6vnK1ke982vp78/+9zui9XNal1kTSOb1fPV6p+bwQ5EJ0O//fvdi78+vbibtPOL/LrP/nrMatPgzeqQ1bJsjfJMeHl/y/FSFZd6+ePu7avfpl0c6nwtL7V/99vt3ce736c91LKo27q82Mf729uXv318MeOkKooH2WbXeHn1/m6m15WXdVVf3Ovayyy2tJcrsKW8vP39zfu7Fx/fvp93lZfbqs7avLrGHwMGVXE1DlhNd2XLzQ5K7ePyMcloqcWtJM5x8HXWyhdFviv3smx/q+uqPjnrDf7qJpmMjSGIk/V1VTZtfVy3fLO/mHnoWhGlpqv3tlTjT67bF/XuqBK/qvYPFV3PibRPUuE5+6yaT1VorAnyNs8KDYT/k/Vo5YlUT1TtMcvMClPFp6v6Lv8mNzpl+/0gG7qmVKInqeioYVY9ybLT1fy9+rfMd5/bkQqaPz9J1QiTrEpZJaWr8/4gyze1+r/t9vTLk1TCtMYq/7loqOieCJC/4rgvb7MHWTTzDlXaYkh7sceyafP2KMuW4dFIe7HHY9nWuWS4Oye80FfbbLZzbvo0F3r42gFyzsk5Gd+PiAQEZ0/bvG7at5tvc650ulynu9hX3sr9K9X8c85UwnWf8GJvRcaqmEp2Zb0KWe7az7OOhlQX+znIOq82b8sX/yuz2cjRJc7L7LucWDuSXr3gHPeyzeZjvpeN5IytbLNpceJLfR7bqt+RTLs7p7vQU7+7mvQyuQOb9bDODu2xlnf9XmQ6NHVpp/ct8x7V0qt4l7V1Pgv+Lu1+SHuhx21etLL+WL08Nnkpm+Z19n0WKl2etnro82y6PBeWQG33WE08vy+c9fW3LBtZvigOn2eh0yXN+qQX+ttnX+QfVd1uq2K+firxASW+2Oe313X2dVN9Lec9ftuck17v72XVttVe7Z0WeH7QmTZdpkvLIOud/MCKczrptVGuqje3MmvaD/85ZrVs3uSz02JVbwqVo+lybPOF8yP2Xssm2x8K+bH6Q08Uv5WbOfdDlrbq5haps1zsvz3W5Su92pxt7y7x+pT4Qp9tNYCM181tNeDr2r5u62z9JS939F7Idtsnln3ii30eyzVny/KLTrntUy5YsVrbI7VOmGjY889PtlGyTLJ3S6ikF20nXL+cPQXD67GuZbn+znN6TnyNTxU0ebUcUl7jLdcdpCiht3S8sZ2eM+TT0Wbet97UspwOKa/yVq2z4hWzL3Xi9dV9uc/qL3Jk22i7PKe9xmM5Fl5sd+VcdJn3dd5aMLFzznA1dka3/I7PuX3/vK9Hxa/xOvGU9Gp/LVYZZ132qRd6XUI92G5Z/APH6xQt4MaBJ/I5ThA4LudZAo7HboXWTHEFtuc+C4cx4JSgOWTl++3oVtD2rpJX29ldIMezKv62ztYsvyjxUq8GZbHmhYcu3VWe6rz9vJdtvr6T9I7B8XnKUcvpHQPD+xQ14zjm8DPzPpVs/HpsJ+qsih6zenYvOu9TL/rzjXwtH3NFF/CcD7k2KNc1pVBHJT5l9ZtjyQOzSv+Y1dsu/dWeq2KZ56p4As9sMsmdIRYySoyy1NX+tZSHdXXgreNUhs05wzW+d7LiDvCdrK4f2TvZfmw229fs7cBOtmqxc+GugPL9ib/w6Z1fuv4xvH851m3V5DzHKPE1Pou/j+XuZcVchqjED9Ul65AlpJ67Q+Axe4s8z9B7E2VgcnzzpTlwJ+vD9bP1IavVwYAXS6bNPs8TzZ6Hqsnb/FF++JzVvDYfcjR9jmu8c2lGuwxLuUZOSdpPVTEuErglaB+rYl4rmPfcyPZ3+fWWzT40si3l1ws5CNPzF/mV57JLeJWvqm7zckKFcXx2GZ6ihdvq1XFfM2fLtloPia/zySCTXd8LGOX5Mujpj7tK0Imvr7c285G9NunogidYnyzZBDzNHqA7D8nwNnFuku3pTV3tPzF36mqhXVf7qTOhPL9fq7rhdeOQ8mpv76qSyYTo5Ps++TV+f3xYV8yp70fTJ7121/Cirtn7lrraZ0Pyq3crWSunRDVyw5K1kqOt8Urw/uFvueaBSiWvhuRLGUwkPt31i4XXWZvdVs3IiUMy1ZNIUeOWWYoUXfyxqiol9EO+PxY0LWEneKIKEkaZdbPKO6ZCbUmhkna8mdYquT7/Pu4PzW2237jnOGi/OkPRZ3gC3++OSxzvj0/j9UO+2y+qcdNnuM73Xmbli7I8ZkWXg1kClS3T2eoh21OV4xMxv88VYmqu55agPO4fZP1++yHfu0GaLkCXpdo2XZbr/DdSupsw2m+f9Dp/bZ1t8nJHEnm02z7HJIN3gfe3JSmGzJYhLycVkYmSWMpELbMi/yE372RWLhoFQ0YFxMvHwUhp+ONgyHHhKHD8N8eCUKvHfA+pl/u19m0Ta6QRLFScNRK3BGrZ86+HPdO3Sr3Tqa/3elvtyqreZ9z+VnkKlOf6ErxTDH3538f9YVkL7HU+NR09VVv8vrQhrmiFEH0ju93m61yW7Zu6Kttc1n9UOToQn5etrLfZWja/0ikn13NG4MN8CM/sL1O79JGCj80xn7MaHShg+j/lepIitBv5uLgEfaanKID9EQezCHMfdcwWAsPtNttZ9BQqxelHPqiKbMcw9UufjK7AuUy8AzDjbmbkH8oRbpz35gncOz3DUG7JhPxGW1dy6LNl1n8xc45skclajJ6/a2W9loelBcH5nqAYdXeEebOwFCjbZYXAvf9HUbUdPN4fVMAmAeck4vd6ttncVruKb1V9PlN0OejauSUec904Qh/DezOr9vELcGwrRd0scX9sq6rLcqXzbV5I41zivHOU5UrnqgP/py4W+FY5jvX4woLtus3bYkmlh/TL3eJhdKe/N5kYQkaCJxk+rsXZoWOWcnnfES7n+o3lcrTPCIfT/TXmDvfVB72+Uj070V9OoifpM9rqbL+5JR4NeY1srU+cGe5VrpmPnflFmAh6Y/7ngh7b+VTQG3E+G/TYzicGzojvucHDdj06gEYcTw+iKbf0QBrdvllJliyx8UGBGYsznyrY5Vy2VSQdTu0Rme5Gd2akw+ktGdPlxF6MdDq3CRt3a8CkYwPkxv1+ExfASXX1Jn/E5HTnuYVdvLkf8zuzsV/gehQ6Y56n0cN2PAWgEdezGJpyLrw0hvAsz73KDm1VdwuyO9kcqrI594C+jOVXKsmCTar97dmM0fnvz8gis75Cm3M9feZ0id98w3Y68Q3REo/mhDXndHq6WuLXIlXmHM9QKzOeHfTqDyS/v6o2TtXPv0xi1baoSPy7rNxJeyXbmbV/5o+D4RQFx+Dp+MRoOznFHFMl1TmXRh0Cus3QkZwp310WTdFnE2dzuCU4fTGkNLI3+Tdpjwy6FKevhvSHNH2260rSKTQs750wc4lHG0+3eSvrrHiZ/3idfX9Ty/9Y/p3fF6G1z30K9N2FU3m5s3E7nnCZv/54uUVp9j6MHxfZvcvKTbX/lyzVJSXooEhn2Pp1meX+EAzR9PinSZuROZ+8QfefqA9TNAR+7X9ZYuhj9aGtR0zp37jGpE3dE0adNFzjW9muP+O4TBh30lxs/GXWrj9zPOiEbDf6Gx7y0x/kwkm0zPzIt0W2AzMZ18WuQ798lRWy3GT1KQQRfkbT8p21f9TyMa+ODSrrS7mtavmx2mTfSaczebjOc5yfcGT8zjWqpjKU7f3WPC96tk4nvNiNcTBkwotKx3WiDmsQNtWfuSaq7baR7Qxc3URc84d1++rzCDhPv7GNnQhjytrpx+Xm/qvLMG5SJWCbraVaHqiduzpvSdk1Uyww/Dg9IKwUXMP/OWZlmxdUHw0/cU3VI9P32WK9YArHhjX5PNJR5x/55sa/GsJ2nVRcBx0foRBE2D3/uNzcSBOYCdhme4LgtBqkRpabiG2+pVq1admteL5f49XnLKdinZWCMvznzSovN/Lb6vnP1aOsG3V05vlKPPOfpaub1TaXxUZdjr8amGp1Fkgzrhv1HY/67599sk9SHUVWibvUv3qrm3vvJgieRYn488+b+yGz/kH/YbBx/ovOCKube7gJ0mdxauQDJx8Y+cTq5l4Q+YSTTxj5/NXNvU/k8518vpEvWN3cB0S+wMkXGPnC1c19SOQLnXyhkS9a3dxHRL7IyRcZ+eLVzX1M5IudfLGRL1nd3CdEvsTJlxj50tXNfUrkS518qdnvCgbgUT3vQgYszGjQkKghYGPiBhQcgEIOuNABEzugIAEUesCFD5j4AQULCG58eOb75hABF0NggggUNoCCEbg4AhNIEI07dsEEJppAgQQoHIILKDARBcm4YxdVYMIKFFqAAjK4yAITWsIbdSxcbAkTW0JjixoJwsWWsGKSGHdMxCUTXEKDixpKwgWXMMElxsElXHAJE1xC4UVQI1G44BImuISCi6BGonCxJUxsCQUXIahJQ7jgEia4hIKL8MnMLriECS6h8CKCGz95lniBmdlFlzDR5Su8iJDy7Lvo8k10+QowghpPvosu30SXr6e8mHTsosu3pj0FGJGQmYmpz4SXrwAjKGj6Lrp8E12+AoxPoct30eWb6PIVYHwgC+3Cyzfh5SvA+FSg9110+Sa6fIUXn1wmuODyTXD5Ci4+tVTwXWz5JrYChRY/vAngmQ+xuc5wsRWY2AoUXHwKW4GLrcDEVqDQ4lPhNnChFZjQCvSSioqYgYuswFpVKbD4KdXDAbGyMqEVKLQE5KozcLEVmNgKFFoCKnIFLrQCE1qBQktAQStwoRWY0AoUWgKf7GIXW4GJrUDBJSCXoS62AhNboUJLQMat0MVWaGIrVHAJKGyFLrZCE1uhgktAYSt0sRWa2AoVXAIKW6GLrdDEVjg+KYYutkJr2R6OTk4hsXQ3sRVqbJGoDl1whSa4QoWXkER16KIrNNEVKryEFKpDF1yhCa5Q4SWkq+yiKzTRFSm8hFTEjFxwRSa4IoWXkEJ15IIrMsEVKbyE1Mo4csEVmeCKFF5CcpPlgisywRUFo+uPyAVXZIIr0pvCmIoBkQuuyNoYRmNb7YjYG5rYiuLRtUvkYisysRUlo+uPyAVXZIIrSkfXH5ELrsgEV6zBRUWB2AVXbIIr1uCi1i6xC67YBFes8BJRa5fYBVdsgitWeImokRi74IpNcMUKLhE1v8QutmITW3E4umaKXWzFJrZizTpQozh2sRVbxINCS0SN4pjgHkxoxQosETWKYxdZsYmsWGElokZx7AIrNoGVjK+3EhdZiYmsRIEloua1xEVWYiIr0cgi+RYXWYmJrEQji0J04iIrMZGVKLDEFKITF1mJiaxEYSWmEJ24wEpMYCUKKzGF6MQFVmICK4lH14iJi6zEorWS0TViQlBbJrQShZaYGg6JC63EhFaqwBJTwyF1kZWayEoVWGJqOKQuslITWakYXV+mLrRSE1qpQktMjaXUhVZqQivV0KKGQ+pCKzWhlWpoUcMhdaGVmtBKNbRICtKFVmpCK1VgSajhkLrISk1kpcnoejp1kZVarKkCS0KNpZQgTm3mVKElISlMj+JOLfLUU4BJSBbTI+hTz+JPPQWZhAJ295Od3aJQPYWahKQyPYJE9SwW1VPASUhC0iNoVM/iUT2FnYSkFT2CSfUsKtVT8EkonHY/2dktMtXTcKOg2v1kZ7f4VE9hKKUpc4JQ9SxG1dNUPcmaewSn6lmo0xx8SqKOYuwdyh7G2WCStbdgp6n4lEQtRdzbzH1H3Y+4J3Bns/eakE9J1FP0vc3fa04+JVFPMfg2ha9Z+ZREPcXh2yS+JuZTEvUUjW/z+JqaT0nUU0S+zeRrdj4lUU9x+RaZDx2b75GwJ+h8sPh86Ah9j8Q9QemDxelDR+p7tGJESUYW8jpe3yORSzD7YFH70HH7Hgk9gtwHi90HzdiDR2KPIPjBYvhBs/bgkeAjSH6wWH7QxD14JPoInh8soh80dw8eCT+C6geL6wdN34NH4o9g+8Gi+0Ez+EArlQThDxbjD34nVpL4I0h/sFh/0EQ+0IolwfuDRfyD5vIByBUhENw/WOQ/aEIfIKBWOkAIAGApAKBZfQBymwWECgCWDACa2af1GiCEALCUANDsPtAyJiEGgKUGgGb4gVYjCUEALEUANMtP8z1AiAJgqQIQdBAkhwChC4AlDEDQQZAcAoQ2AJY4AEGnmZNDgNAHwBIIQJP+QMqEQGgEYIkEoHl/EOQQIGQCsHQC0NQ/CHoIEFIBWFoBaP4fBBmDCbkALL0AtAYANPEGhGYAlmgAWgcAJRxSBggIWsIBaDEABI1BQjwASz0ALQio6xGpQUgICGApCKBVASBVRCBEBLBUBAjFRCcSSgJYUgKE/kQTEHICWHoCdILCWBMQOLQ0BdAyAZBiKBCqAliyAoTRVBMQOLSkBdBqAfjkQCTEBbDUBQiTCRwTCgNYEgOE6QSOCZUBLJkBIm+iEwmpASytASKY6ERCbwBLcAAtIgApLAOhOYAlOkCnOpAyCxC6A1jCA0TBxHxOaA9giQ8QTU3HhP4AlgAB0cR0TGgQYIkQEHUoJFfEhAwBlg4BUTLVAgQKLS0CtLwwtqIh5Aiw9AiIvYkmJDQJsEQJ0ELDSBMSugRYwgTEHQjJCYnQJsASJ0ALDrRCCYQ+AZZAAVp0oEVKIDQKsEQKiLtISG5KCJkCLJ0C4mhiFBNaBVhiBWgBYmRJRugVYAkWoEUIIE9bAKFZgCVagBYigDxxAYRuAZZwAVqLAPLUBRDSBVjaBWg9AnxyNibkC7D0C0i6o27kVEZIGGBpGJB0fAw5ExEyBlg6BiSduE9GYULKAEvLAK1PQEDGIELOAEvPgKQ7VUkOQELSAEvTAC1TAE0fAyFrgKVrQNKdriQBSCgbYEkboOUKII9lAKFugCVvQNodsiQBSCgcYEkckHZ8IAlAQuUAS+YArVxASAKQEDrAUjpAqxdAHpUAQuwAS+0ArWCoryqp/AQALcUDtIpBS49AiB5gqR6glQwgT1wAIXyApXyAVjOAPHUBhPgBlvoBWtAA8uQFEPoHWAIIaFEDyNMXQGggYIkgQqsaEFL4FYQKIiwVRGhZA8hDBYKQQYQlgwivwx95XpfQQYSlgwgtbAB5uEAQQoiwhBChlQ0gDxgIQgkRlhIitLQB5CEDQUghwpJChNY2gDwrIAgtRFhaiPC6k+UU/gQhhghLDBFa3QDyzIAg1BBhqSHCS8cDsCD0EGHpIaL7gIE8eCAIQURYgojQAgct1ApCEBGWICK6DxnI8weCUESEpYiIThEhzyAIQhERliIiug8ayHMIgpBEhCWJiO6bBvIsgiA0EWFpIqL7roE8jyAIUWT4m/4G6lHWrdy87b6Fur/vnhT9ufqr/zoqguG7q5+r2F89//nPP+evoZ7//Ad9EKV+U35Ol6udraiN+smMopR0TkVL9P+JuJbPn3Zh+753Nu+HPFvm86SoxgLVOODZQndY4koHuNLMKuKr4ZAtH/WD4iJYtk5PuaGWQnb8qMsYM1vsdGscrmOI6xgP/ZmwLD5I9SksKhxqep9Xx7X+5r9DRH26oAg3HO6EWLCNHmvZvxGGyodQ7POqaFyli4oFKW43YNpSN8G74BAI/YLXl/oRlbw9yrI1TSF4CB5ijfdYUA0N8Pe46AEHSfev8Pp/+zgg+nThkB5g+A8v9Ci0y2KftbW6hAN1HCqMnzJNqRuCrDgjEEBFD/aQ2+L6xqG1vosI4zPC+GSC6nQH1tlQgAAVDu3MjNjn14tRGERYj3lIUBeTZEW+K9VfZfcaEq4pqiivXMrg1uxJtU07m0l4fans1OpSgWq4tQkXCxuM+QYNKyEaguEQBZmzhzLWVk1rDZ8EFSv1eJb6F4rOZlI8CoFZHvc5aQQLZDDmhehTANyerp/B9cSBMOUFQsfiobsOE8dXgdHGC/vqNem/9PN2yBAys8CIeqkEhQ0UNdhGTi9qo8ZHky0zVBgvZCNLKOowMa+v2MHTrdFMeAAoguEiiw/d7T7YLG7/lBc1zhfM4nUKDrNBMqxTmFXXN/OYL3zjQmKspbxBRj8bjmYs1NVBP00m/b+KAOH5qJs23xjxE6/X/N5exBvH+MXAs8EEj1+Pb6m7QQ3HYRzwEl7Ac94RRJEPA9LjDRbzHXU0WtAUkfDCwOn9HFRDD9dQ8IuE3sLB1nDDCyaQ3TdtcMzETebze4AoHOBx6/ObbHiXEfUjtuTxqjnccLXub7g6zf/msMULkpS3xNn1b94jbKBOTXhxbyfbQ38XFhr+D/ourLa7PwsXE0/hKW+A9e/UO8uUCGEm4UVT68n7s60YoSXhBT11lyke8XjvyNyE5qVe46/brN7pX9bV/qFyF5vYNNfytnJ3fGjaYO7S8jJX76jrBvsha6JsxoqfaVNtsdSfzCbE0yNzz42eVMHTIx76AQ/GOUav2fi49VNmuVq513skY7ZCTcWMIn/LspFlVhw+m9QCCuHM+uF3N1E8wnVjQuv0kCYyg0EAvOCDn8VElvD+hYmnL8e6rZrcHM8ISwmvXv0t8AiPaCXUra3Upp8XaLrHm/AcgivGpFuUEXdxaow4JrGk7uBD+K62/ZvQGObYbMqbmhyz3RuP2CqqtpJquFbthR4y4/f8SsRsRFnuzKoKNMn5fm+MWeHuatmH/Mcm+77V16zi3R9eOjNnkd7iYbh57Cu61RabxtM7F9DqjtqHymjIGBUx4Q3UwUzd34OLS4Vnc665ap0Va5PuwYuXiAmS4fELHPfxGAuGERv6w9DlWd5nX+Th/NYAiroINwEvDOyz+os0SUm8Aop4s8A++0ZR8j5a/wQ9yZjw4gGy+FC1rbuBCdAUOigcCW/AdVd24hiQ4BjArLLzZDGaI/DOA/iFQq8PI2N44wG8KLCX9Y7QbQI05zAFkr267FsvrvQ1ze7qCiOaWTjrSnO8RMV1ZW79bO4Br4Yi3tKj7IMaUT2MDGZ5jFec8Q4SL/oEb6h3t76OUyEpBi6vskpTcohLrI8IXuRQdmh5EHOpIdNYvSnUk37d03/NNjdwgaetgBc/LIPE1IC7FgJedxwsuTZG0wKTHD9ktdqvUGJhjAIvk4I+rNv1Z2erHWGFyuP1QHfFf15m9gpJIGj4vCXD6bkAxxiOtDGzisTbA3iGx6OKyQioK1qJdSsW39WplWWmultPsTnMQ3u8FdHZHKWdYD0MAmYBqyZv80epLqc1UBKjOMkUAvpLk1UhN5mpJQMWsNSRG6a9x7FNLVY+BJPoPNT52qgjFpBZFs7XMOOihLgovOm8u2J5d76EGUMW72mTXr4STLKNeiQeTzJ4wSt4EDEefMe2cDmZSncti7o1y4RKxC2PWt264ynCczEveHSmyLGElxohD//DXdQK/EXVuMuFFA9QdhE7o+5mDe93mUvbwVhbdWFTlka0xJu0QZVJh9MAwG6EY9FaSxtcVOZBBovYBVOwPm2JTmcZuA2ghgQhUOCdYMAdaspWc37sHfc0Li3wpp1ato9V4ZCeMWo8puZWV0Vhn+ZBg5U5VKuisJcgqCjMXlRGLBEXbQl4cVsZIflgTPazLdnxBw10Zr9XRWHr0oa8xbdiRVQsrjBH2+kxbBy7sB3mRt9uFUOx5+G3kVY5PFwO5vaokW0pvzpUZoxAw9R0h+cGcfvi2c8/hQ5et+PnAvC0gwlCbkudTLmzmLGj5PXd2Rx5ogZjk3k86mzRPcuBjwUCcwc9vE+wIXkpwCf5gKl/DyYP6F0E3I54x8o8atN8kV8N0KG+YIr8TVW3eelGqhhHGV7obA5ZWW3tPT3e0sfMIdWawxJLhYKpmfQvaOKxhFd//nCGOBr+w9y9nRmCdfd6BC4n3m8xRZmzPUuawzMXb1T1ry7ikIgpgXA4/nE6HhkNxyOZB/Ra9QdrmZOgvmGqy8Pzd3hpiAMvU1nuzBArI3VDCgrj7EL19CzB/+ClSN+KTFmyrbP1l7zcOStrvBhmrtbbOtvk5c4hzTxj5uPFN2SrIyJMizi8Memztj6Wa4eHw8ctQ2bRmo3BSeGz/6Jf40e8+Kh5XhuwCGpM0c09vIBFtlME8Qf9g3mwsWOh7QMhCe5Npn534rOxITQwh4NavGFOnOZNMCCYgoK1VkzwUoZJ7aqTh3W1t9auCQ7kTDbw9KoxwhUmZIauG75pgOh0BppX269VbXL/Cd5CMsk3bcQRihMczpi8m+YW68w8tIkQwfyS4UezrkyWLcFTCocW+/NmdcgPsshLuXp+/+c///w/6jcV/w=="; \ No newline at end of file diff --git a/docs/classes/DateAlignmentError.html b/docs/classes/DateAlignmentError.html index 2446d1f..5198072 100644 --- a/docs/classes/DateAlignmentError.html +++ b/docs/classes/DateAlignmentError.html @@ -1,11 +1,11 @@ -
OptionalstackStaticstackThe Error.stackTraceLimit property specifies the number of stack frames
collected by a stack trace (whether generated by new Error().stack or
Error.captureStackTrace(obj)).
The default value is 10 but may be set to any valid JavaScript number. Changes
diff --git a/docs/classes/IncorrectArgumentComboError.html b/docs/classes/IncorrectArgumentComboError.html
index 4d3cef6..b30719b 100644
--- a/docs/classes/IncorrectArgumentComboError.html
+++ b/docs/classes/IncorrectArgumentComboError.html
@@ -1,11 +1,11 @@
-
OptionalstackStaticstackThe Error.stackTraceLimit property specifies the number of stack frames
collected by a stack trace (whether generated by new Error().stack or
Error.captureStackTrace(obj)).
The default value is 10 but may be set to any valid JavaScript number. Changes
diff --git a/docs/classes/InitialValueZeroError.html b/docs/classes/InitialValueZeroError.html
index e96f402..e51a109 100644
--- a/docs/classes/InitialValueZeroError.html
+++ b/docs/classes/InitialValueZeroError.html
@@ -1,11 +1,11 @@
-
OptionalstackStaticstackThe Error.stackTraceLimit property specifies the number of stack frames
collected by a stack trace (whether generated by new Error().stack or
Error.captureStackTrace(obj)).
The default value is 10 but may be set to any valid JavaScript number. Changes
diff --git a/docs/classes/MixedValuetypesError.html b/docs/classes/MixedValuetypesError.html
index 91be40c..f139f72 100644
--- a/docs/classes/MixedValuetypesError.html
+++ b/docs/classes/MixedValuetypesError.html
@@ -1,11 +1,11 @@
-
OptionalstackStaticstackThe Error.stackTraceLimit property specifies the number of stack frames
collected by a stack trace (whether generated by new Error().stack or
Error.captureStackTrace(obj)).
The default value is 10 but may be set to any valid JavaScript number. Changes
diff --git a/docs/classes/NoWeightsError.html b/docs/classes/NoWeightsError.html
index 32afa32..e046d15 100644
--- a/docs/classes/NoWeightsError.html
+++ b/docs/classes/NoWeightsError.html
@@ -1,11 +1,11 @@
-
OptionalstackStaticstackThe Error.stackTraceLimit property specifies the number of stack frames
collected by a stack trace (whether generated by new Error().stack or
Error.captureStackTrace(obj)).
The default value is 10 but may be set to any valid JavaScript number. Changes
diff --git a/docs/classes/OpenFrame.html b/docs/classes/OpenFrame.html
index 5ed9915..112a463 100644
--- a/docs/classes/OpenFrame.html
+++ b/docs/classes/OpenFrame.html
@@ -1,5 +1,5 @@
Collection of aligned timeseries with portfolio and correlation methods.
-Optionaloptions: { countries?: string | string[] }Country code(s) for business calendar (holidays, resampling). Used when adapting data to business days.
-CAGR-based capture ratio vs benchmark column. +
Optionaloptions: { countries?: string | string[] }Country code(s) for business calendar (holidays, resampling). Used when adapting data to business days.
+Lag-k autocorrelation per constituent. Matches Python OpenFrame.autocorr_func.
+CAGR-based capture ratio vs benchmark column. Matches Python openseries capture_ratio_func behavior: uses frame data as-is (no resample) with dynamic time_factor = observations / (span_days/365.25).
"up" | "down" | "both" (up/down or both = up/down)
Benchmark column index (-1 = last)
Optionalopts: { freq?: ResampleFreq }Optionalfreq?: ResampleFreqIf set, resample to period-end before computing (e.g. "ME" for monthly). When omitted, uses frame data as-is to match Python default.
-Filters tsdf to retain only business days. Mutates in place.
-OptionalweightStrat: LiteralPortfolioWeightingsMax drawdown per column (price series). Returns array of max drawdowns.
-Date when max drawdown bottom occurs per column. +
Filters tsdf to retain only business days. Mutates in place.
+OptionalweightStrat: LiteralPortfolioWeightingsMax drawdown per column (price series). Returns array of max drawdowns.
+Date when max drawdown bottom occurs per column. Returns array of date strings (or undefined when no drawdown).
-Ordinary Least Squares fit of y on x. +
Ordinary Least Squares fit of y on x. Regresses tsdf column yColumn (dependent) on xColumn (explanatory). Matches Python openseries ord_least_squares_fit.
Column index of dependent variable y
Column index of exogenous variable x
Optionalopts: { fittedSeries?: boolean }OptionalfittedSeries?: booleanIf true, add fitted values as new column (default true)
Object with coefficient (slope), intercept, and rsquared
-Resamples all constituents to business period-end frequency, then re-merges. +
Resamples all constituents to business period-end frequency, then re-merges. Throws if any constituent is a return series.
-Returns return columns (first element 0). Throws if mixed PRICE/RTRN.
-Converts each column to drawdown series (value / running peak - 1). +
Returns return columns (first element 0). Throws if mixed PRICE/RTRN.
+Converts each column to drawdown series (value / running peak - 1). Operates on the frame's aligned tsdf. Call after mergeSeries and truncate so drawdown is computed on the truncated date range.
-Optional_opts: { fromDate?: string; toDate?: string }Optional_opts: { fromDate?: string; toDate?: string }Truncates frame and constituents to a common date range.
Truncation options
OptionalendCut?: stringNew last date (default: earliest last date if where includes 'after')
OptionalstartCut?: stringNew first date (default: latest first date of all constituents if where includes 'before')
Optionalwhere?: "before" | "after" | "both"Which end(s) to truncate when cuts not provided
-Timeseries of dates and values with methods for risk metrics.
-Country code(s) for business calendar (holidays, resampling). Default "SE".
-ReadonlydatesReadonlyinstrumentReadonlynameReadonlytimeseriesReadonlyvaluesFilters tsdf to retain only business days. Mutates in place.
-Returns the date when the max drawdown bottom occurs (the date of the lowest point +
Country code(s) for business calendar (holidays, resampling). Default "SE".
+ReadonlydatesReadonlyinstrumentReadonlynameReadonlytimeseriesReadonlyvaluesAutocorrelation function for specified lags. +If lags is an int, compute ACF from lag 0 through that value (inclusive).
+Lag-k autocorrelation of demeaned returns. +For price series, returns are derived via pct_change; for return series, +values are demeaned. Matches Python openseries autocorr_func.
+Filters tsdf to retain only business days. Mutates in place.
+Ljung-Box test for autocorrelation at the given lags.
+Returns the date when the max drawdown bottom occurs (the date of the lowest point relative to the preceding peak). Returns undefined if no drawdown occurs.
-Resamples to business period-end frequency (week, month, quarter, year). +
Partial autocorrelation function for specified lags. +If lags is an int, compute PACF from lag 0 through that value (inclusive).
+Partial autocorrelation at a given lag.
+Resamples to business period-end frequency (week, month, quarter, year). Mutates tsdf. Throws on return series (use price series).
-OptionallvlZero: stringOptionallvlOne: ValueTypeWorst single calendar month return (business-month-end based). +
OptionallvlZero: stringOptionallvlOne: ValueTypeWorst single calendar month return (business-month-end based). Uses filterToBusinessDays + resampleToPeriodEnd(ME) + min of monthly returns.
-StaticfromCreates an OpenTimeSeries from a name, dates array, and values array.
-Optionaloptions: {StaticfromCreates an OpenTimeSeries from simulation dateColumns by column index.
-Optionaloptions: { columnIndex?: number; countries?: string | string[]; valuetype?: ValueType }StaticfromCreates an OpenTimeSeries from a record or array of {date, value}.
-StaticfromCreates an OpenTimeSeries from a name, dates array, and values array.
+Optionaloptions: {StaticfromCreates an OpenTimeSeries from simulation dateColumns by column index.
+Optionaloptions: { columnIndex?: number; countries?: string | string[]; valuetype?: ValueType }StaticfromCreates an OpenTimeSeries from a record or array of {date, value}.
+OptionalstackStaticstackThe Error.stackTraceLimit property specifies the number of stack frames
collected by a stack trace (whether generated by new Error().stack or
Error.captureStackTrace(obj)).
The default value is 10 but may be set to any valid JavaScript number. Changes
diff --git a/docs/classes/ReturnSimulation.html b/docs/classes/ReturnSimulation.html
index f56b51a..192775f 100644
--- a/docs/classes/ReturnSimulation.html
+++ b/docs/classes/ReturnSimulation.html
@@ -1,5 +1,5 @@
Monte Carlo return simulation with optional seed for reproducibility.
-ReadonlydframeReadonlyjumpsReadonlyjumpsReadonlyjumpsReadonlymeanReadonlymeanReadonlynumberOptional ReadonlyseedReadonlytradingReadonlytradingOptionaloptions: { asReturns?: boolean; end?: string; start?: string }StaticfromOptionalseed: numberStaticfromOptionalseed: numberStaticfromOptionalseed: numberStaticfromOptionalseed: numberReadonlydframeReadonlyjumpsReadonlyjumpsReadonlyjumpsReadonlymeanReadonlymeanReadonlynumberOptional ReadonlyseedReadonlytradingReadonlytradingOptionaloptions: { asReturns?: boolean; end?: string; start?: string }StaticfromOptionalseed: numberStaticfromOptionalseed: numberStaticfromOptionalseed: numberStaticfromOptionalseed: numberComputes the mean-variance efficient frontier using analytic QP.
-Fetches a single timeseries from the Captor Open API.
The timeseries ID (e.g. "638f681e0c2f4c8d28a13392")
The timeseries data with dates and values arrays
-Fetches multiple timeseries from the Captor Open API.
Array of timeseries IDs
Array of timeseries data
-Array of date strings (YYYY-MM-DD)
Country code(s) for holiday calendar, e.g. "SE", "US", ["SE", "NO"]
Array of business-day date strings (subsequence of input, preserving order)
-Filters (dates, columns) to retain only rows where the date is a business day. Preserves alignment across all columns.
-Optionaloptions: { end?: string; start?: string }Returns the most recent business day strictly before today. Uses the given country code(s) for holiday calendar (e.g. "SE" for XSTO/Stockholm).
-
The
Error.stackTraceLimitproperty specifies the number of stack frames +