算法
計算上限指數權重的算法
我正在嘗試建立一個加密貨幣的上限指數基金。正如Investopedia解釋的那樣,“上限指數是一種股票指數,它對任何單一證券的權重都有限制。因此,上限指數設定了由其市值決定的成分的相對權重的最大百分比。基本原理上限指數的背後是防止任何單一證券對指數施加不成比例的影響。”
我需要一個算法或電子表格來計算貨幣的上限權重。Morningstar Index Calculation Methodology的第 6 頁似乎討論了計算上限權重所需的公式,但我無法將這些公式轉換為程式碼。
當我考慮所需的算法時,似乎某種嵌套或遞歸循環是必要的。每次限制一種貨幣的權重時,其餘貨幣的權重都需要按比例上升。也許這可以通過遞歸呼叫剩餘貨幣的上限算法來實現,並為每個遞歸呼叫修改上限。或者,也許我很困惑,想多了。
這是基於我第一次嘗試解決此問題的電子表格。
是否有人知道一些範常式式碼或電子表格可以完成此操作?有人想把破解當作一些虛擬碼嗎?
非常感謝。
我想到了!請參閱我的電子表格的第二個選項卡以獲取解決方案。
值得一提的是,這是我的 Java 程式碼。不需要遞歸!
final double totalMarketCap = filteredTickers.stream().mapToDouble(ticker -> ticker.getMarketCapUSD().doubleValue()).sum(); double cappedRemaining = 1d; double marketRemaining = 1d; for (CoinMarketCapTicker ticker : filteredTickers) { double marketPercentage = ticker.getMarketCapUSD().doubleValue() / totalMarketCap; double uncappedPercentage = marketPercentage * cappedRemaining / marketRemaining; double cappedPercentage = Math.min(uncappedPercentage, _indexCap); _indexTickers.add(new IndexTicker(ticker, marketPercentage, cappedPercentage)); marketRemaining -= marketPercentage; cappedRemaining -= cappedPercentage; }