2 votos

Algoritmo de cálculo de las ponderaciones del índice con límite

Estoy tratando de construir un fondo de índice limitado de criptomonedas. Como Investopedia explica que "un índice con límite es un índice de acciones que tiene un límite en la ponderación de cualquier valor. Así, un índice con límite establece un porcentaje máximo en la ponderación relativa de un componente que se determina por su capitalización de mercado. La razón de ser de un índice con límite es evitar que un solo valor ejerza una influencia desproporcionada en un índice."

Necesito un algoritmo o una hoja de cálculo que calcule las ponderaciones máximas de las monedas. Página 6 de Metodología de cálculo del índice Morningstar parece discutir las fórmulas que necesito para calcular los coeficientes de ponderación de los topes, pero estoy teniendo problemas para traducirlos en un código.

Al pensar en el algoritmo necesario, parece que sería necesario algún tipo de bucle anidado o recursivo. Cada vez que la ponderación de una moneda se limita, las ponderaciones de las demás monedas deben aumentar proporcionalmente. Tal vez esto podría lograrse llamando recursivamente al algoritmo de limitación en las monedas restantes con un límite modificado para cada llamada recursiva. O tal vez estoy confundido y lo estoy pensando demasiado.

Aquí hay un hoja de cálculo basado en mi primer intento de resolver esto.

¿Alguien conoce algún código de ejemplo o una hoja de cálculo que logre esto? ¿Alguien quiere probar algún pseudocódigo?

Muchas gracias.

2voto

SocoM Puntos 101

¡Lo he descubierto! Ver la segunda pestaña de mi hoja de cálculo para la solución.

Y por si sirve de algo, aquí está mi código Java. No se necesita recursividad.

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;
}

0 votos

¿podría responder con el enlace a la metodología de cálculo de índices Morningstar? El enlace en una pregunta me lleva a la página web de los índices Morningstar. Gracias

0 votos

Hmm. Supongo que fue eliminado. Podrías probar con un sitio de archivos como Wayback Machine.

0 votos

¿Cómo se calcula el valor base del índice?

0voto

David Rickman Puntos 2787

Creo que se puede hacer de forma iterativa.

Para cada seguridad se necesita una variable booleana Tapado que es 1 si el valor está actualmente en su tope o 0 en caso contrario. Inicialmente Capped[i]=0 para todos los valores i e inicialmente Weight[i]=el peso basado en el valor de mercado del valor i. del valor de mercado del valor i.

Luego se pasa a un bucle:

Se establece el valor de Terminado en TRUE

Primero se examinan todos los valores sin tope y si Peso[i]> Cap se se establece Weight[i]=Cap; Capped[i]=1 y Finshed=FALSE

En segundo lugar, se calcula la ponderación libre (o sin límite), que es igual a 1 menos la suma de las ponderaciones de los valores con límite.

En tercer lugar, para todos los valores sin tope, se les asigna un peso proporcional a su valor de mercado y tal que su suma sea igual a el peso libre calculado en el paso 2.

Si FINSHED=FALSE (lo que significa que alguna seguridad fue tapada en esta iteración) se vuelve al principio de este bucle, sino se sale de este bucle.

(Una palabra de advertencia, sin embargo, este pseudocódigo no ha sido depurado).

0 votos

Gracias por la sugerencia. Creo que eso funcionaría. Pero me gusta mi solución :)

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X