h1

Crear una curva spot: ejemplo mediante hoja de cálculo

19/07/2017

Nota editorial (octubre de 2026): este artículo remite a una hoja de cálculo utilizada para construir una curva de tipos spot, pero no explica el método empleado. La construcción depende del tipo de instrumentos, convenciones de fechas, frecuencia de cupón, interpolación y técnica de bootstrap. Comprueba esas hipótesis en el archivo antes de reutilizar sus resultados. No se ha verificado aquí el funcionamiento del Excel ni se afirma que represente una curva de mercado actual.

Relacionado: valoración de bonos y ajustes de mercado.


Para crear una curva spot se puede utilizar la lógica presente en el siguiente excel:

excel.iconocrear.matriz.spot

 

h1

ALM, curvas de escenarios en gestión de activos y pasivos (ALM)

13/07/2017

Inicio una serie de artículos sobre ALM (Asset Liabilities Management, gestión de activos/pasivos en entornos financieros), orientado exclusivamente para informáticos que entran en este mundo.

En ALM se calculan todas las posibles estrategias de inversión de una entidad para maximizar su beneficio. Esto comprende evaluar una gran combinatoria de activos y hacer hipótesis de cómo el mundo real va a evolucionar (por ej. si subirán los tipos de interés, o si habrá una burbuja en el ladrillo, o si algún sector quebrará como la crisis de las .com como ocurrió en el año 2000), etc. Por eso se utilizan escenarios: conjuntos de datos (tablas) que dibujan curvas que representan la evolución de sectores. Estas tablas son calculadas por un conjunto de economistas, estadísticos, matemáticos, actuarios, informáticos, etc, y según el acierto o error en ellas de las estimaciones de estos profesionales en la gestión ALM de inversiones se obtendrán mejores o peores resultados. En ALM estas curvas son provistas por terceros y se utilizan para realizar cálculos.

Esas curvas pueden ser representadas mediante distintos criterios:

  • Tipos de interés: la rentabilidad que va a dar un activo desde hoy (t=0) hasta la fecha que elijamos. Esta rentabilidad es anual.
    ALM.escenario.curva.precios.tipos
    Para calcular la rentabilidad total de una inversión, se aplica la siguiente fórmula:RentabilidadTotal = ((1+tipoInt)^T) -1Así, para una inversión de 1€ hecha a un plazo de 7 años se obtendrían (1+0,345)^7 -1= 7,24%.La rentabilidad, a medida que pasa el tiempo, es mayor. Significa la incertidumbre por el «riesgo de crédito» (si prestas 1M a alguien para que te los devuelva en 10 años, hay más probabilidad de que en 10 años le suceda una catástrofe y no pueda devolvértelos, que si establecéis que el plazo de devolución sea sólo un año).
  • Precios: esta forma de expresar una curva de escenario indica cuánto has de invertir hoy (t=0) para obtener 1€ en el plazo que elijas. Viendo la tabla anterior, si quieres ganar un euro en 6 años, hoy deberías invertir 0,98681109€. Sigue la misma filosofía que los tipos de interés, pero se representa de manera inversa, pues como cuánto más tiempo pase mayor es el tipo de interés (condiciones) que vas a imponer a quien prestas dinero, menos capital inicial necesitas invertir ahora (t=0).

La conversión entre tipoInterés y Precio se calcula de la siguiente manera:

  • tipoInterés = (1/Precio)^(1/T)-1  (siendo T el correspondiente plazo).
  • Precio = 1/(1+tipoInterés)^T

Estas curvas suelen ser provistas en formato anual, de modo que se pueden hacer los cálculos utilizando esta frecuencia. Si se desease mayor precisión, mayor granularidad, sería necesario interpolarlas. Para ello se utilizan los siguientes métodos de interpolación:

  • Curva de tipos: interpolación lineal.
  • Curva de precios: interpolación exponencial.

En este excel se puede ver con mayor detalle:

excel.iconoALM_blog_tipos_vs_precios_interpolación

Igualmente se utilizan otras curvas:

  • Curva spot: Indica cuánto has de invertir ahora para obtener 1€ en el plazo que se elija. Va de 0 al vencimiento. Ej: 1, 0.98, 0.96, 0.95, etc. Se interpreta «para ganar 1€ en tres años he de invertir hoy (t=0) 0.95€». En t=0 siempre es «1» pues es lo que inviertes y recuperas sin dejar pasar tiempo.
  • Curva de rendimientos: Es la inversa de la curva spot, se interpreta como «si invierto 1€, cuánto tengo en 3 años?». ej. de curva: 1, 1.04, 1.05, etc…
  • Curvas forward y yield, curvas internas (se desarrollará en otro artículo).

más conocimientos complementarios se pueden encontrar en este artículo de Pablo Montero en el blog de Mirai. (Mirror en PDF).

h1

Dolphin sin opción de comprimir ficheros

19/02/2016

En las últimas versiones de KDE (como la incluída en Kubuntu 15.10)  Dolphin viene sin la opción de comprimir ficheros en el menú contextual del ratón.

Para incluirlo, es tan sencillo como ejecutar lo siguiente desde shell:

sudo ln /usr/share/kde4/servicetypes/konqpopupmenuplugin.desktop /usr/share/kservicetypes5/konqpopupmenuplugin.desktop

dolphin.con.menu.comprimir

 

Fuente: AskUbuntu

h1

Compilación C: error «curses.h: No such file or directory»

10/01/2016

Revisión técnica (octubre de 2026): La ausencia de curses.h suele significar que faltan las cabeceras de desarrollo ncurses o la ruta de inclusión correcta. En Debian/Ubuntu revisa el paquete de desarrollo apropiado, como libncurses-dev en versiones donde esté disponible. El paquete del ejemplo original puede llevar otro nombre.

Se conserva a continuación la solución histórica original.


 

PROBLEM

carlos@shirley:~/egg/64$ make gcc -g -ansi -Wall -DLinux -DUSLEEP -D_GNU_SOURCE -DUSB_SERIAL -DALT_UI -DNO_UI -DPACKETDUMP -DHEXDUMP -DREPORT=1 -DEGG_DYNAMIC   -c -o eggui.o eggui.c
eggui.c:39:20: fatal error: curses.h: No existe el archivo o el directorio
#include <curses.h>
compilation terminated.
make: *** [eggui.o] Error 1

SOLUTION

carlos@shirley:~/egg/64$ sudo apt-get install libncurses5-dev

h1

Genymotion en Ubuntu: errores de bibliotecas Qt y SSL en versiones antiguas

07/01/2016

Nota de compatibilidad (octubre de 2026): este artículo trata de Ubuntu 14.04 y Genymotion 2.5.2. Las bibliotecas libssl0.9.8 y las rutas indicadas corresponden a sistemas antiguos, sin soporte estándar de seguridad; no conviene instalarlas para resolver errores en un Ubuntu moderno.

En sistemas actuales, descarga una versión de Genymotion compatible con tu distribución y consulta sus requisitos oficiales. Revisa el registro de errores y la biblioteca que falta antes de cambiar dependencias del sistema.

Relacionado: otros tutoriales de virtualización.


Some common problems and their solutions while installing Genymotion on Ubuntu Trusty 14.04:

PROBLEM
carlos@WhenIGrewUp:~/apps/genymotion$ sudo ./genymotion
./genymotion: error while loading shared libraries: libQt5Script.so.5: cannot open shared object file: No such file or directory

SOLUTION
carlos@WhenIGrewUp:~/apps/genymotion$ sudo apt-get install libqt5scripttools5  libqt5qml5  qt5-qmake


 

PROBLEM
carlos@WhenIGrewUp:~/apps/genymotion$ sudo ./genymotion
ene. 6 19:52:15 [Genymotion] [Warning] QSslSocket: cannot resolve SSLv2_client_method

SOLUTION
carlos@WhenIGrewUp:~/apps/genymotion$ sudo apt-get install libssl0.9.8


 

PROBLEM
carlos@WhenIGrewUp:~/apps/genymotion$ sudo ./genymotion
ene. 6 19:52:15 [Genymotion] [Warning] QSslSocket: cannot resolve SSLv2_client_method

SOLUTION
carlos@WhenIGrewUp:~/apps/genymotion$ sudo apt-get install libssl0.9.8


From my experience, it’s fully recommended upgrading to any later Ubuntu (if possible) to make Genymotion work.

 

ALTERNATIVE: download a previous version of Genymotion (2.5.2),

 

h1

Chromium lento en Linux: diagnóstico antes de optimizar bases SQLite

04/09/2015

Revisión de octubre de 2026: el método original, documentado en 2015, propone descargar y ejecutar un script de terceros que modifica las bases de datos del perfil de Chromium y Firefox. No se debe ejecutar sin inspeccionar el contenido y verificar su procedencia. Una limpieza periódica de SQLite no está demostrada como remedio general contra la navegación lenta.

Antes de intervenir, comprueba consumo de CPU, memoria y extensiones, actualiza el navegador y prueba un perfil temporal. Cierra todas las instancias del navegador antes de manipular sus archivos, y conserva una copia íntegra del perfil para poder revertir los cambios.

Relacionado: trabajar con SQLite.


Si se sufre una navegación ralentizada en los navegadores Chrome/Chromium, esto puede deberse, entre otros factores, a una alta fragmentación en la base de datos que utiliza internamente. Es recomendable limpiarla periodicamente (semestralmente para un uso particular es suficiente). Para ello, se pueden aplicar los siguientes pasos:
1º) Hacer backup del directorio de configuración:

carlos@WhenIGrewUp:~$  cp -R /home/carlos/.config/chromium /home/carlos/config/chromium_BACKUP

2º) Instalar Sqlite3:

carlos@WhenIGrewUp:~$ sudo apt-get install sqlite3

 3º) Descargar el siguiente script:

carlos@WhenIGrewUp:~$ wget  https://raw.githubusercontent.com/skydrome/random/master/shell/browser-vacuum.sh

y darle permisos:
carlos@WhenIGrewUp:~$ chmod 755 browser-vacuum.sh
3º) Ejecutarlo

carlos@WhenIGrewUp:~/.config$ ./browser-vacuum.sh
[carlos] Scanning for firefox                 [found]
[default]
Cleaning  permissions.sqlite                  done ∘
 Cleaning  cookies.sqlite                      done - 1056 KB
 Cleaning  content-prefs.sqlite                done ∘
 Cleaning  extensions.sqlite                   done ∘
 Cleaning  addons.sqlite                       done ∘
 Cleaning  search.sqlite                       done ∘
 Cleaning  formhistory.sqlite                  done ∘
 Cleaning  signons.sqlite                      done ∘
 Cleaning  webappsstore.sqlite                 done ∘
 Cleaning  places.sqlite                       done - 7680 KB
 Cleaning  cookies.sqlite.bak                  done - 384 KB
 Cleaning  healthreport.sqlite                 done ∘
 Cleaning  urlclassifier3.sqlite               done - 18368 KB
[carlos] Scanning for chromium                [found]
Waiting for chromium to exit....... kill it? [y|n]: y
[Default]
 Cleaning  Favicons                            done - 5060 KB
 Cleaning  Web Data                            done - 930 KB
 Cleaning  Top Sites                           done - 100 KB
 Cleaning  Cookies                             done - 1852 KB
 Cleaning  Network Action Predictor            done - 2254 KB
 Cleaning  Extension Cookies                   done ∘
 Cleaning  QuotaManager                        done - 4 KB
 Cleaning  WebRTCIdentityStore                 done - 2 KB
 Cleaning  Origin Bound Certs                  done ∘
 Cleaning  History                             done - 50840 KB
 Cleaning  Shortcuts                           done - 340 KB
 Cleaning  Login Data                          done ∘
Total Space Cleaned: 88870 KB

defragmentacion.BD.sqlite.Chromium
h1

Subsonic: error DaoHelper al inicializar la base de datos

26/01/2015

Revisión de octubre de 2026. La traza del caso original corresponde a una versión de Subsonic de 2015 y muestra un fallo durante la inicialización de su base de datos. La corrupción es una posibilidad, pero una traza similar no demuestra por sí sola que ese sea el único problema.

No sobrescribas el archivo de la base de datos activa sin detener antes el servicio, identificar el motor y su versión, y disponer de una copia íntegra tanto de la base actual como de la copia que quieras restaurar. El comando cp subsonic.backup subsonic.data del ejemplo histórico no debe ejecutarse sin esas comprobaciones.

Relacionado: copias de seguridad verificables en Linux.


Cuando ocurre un error del servidor web «jetty» de Subsonic ó Madsonic, y tras comprobar el log:

root@shirley:/var/subsonic# cat /var/subsonic/subsonic.log

Si se produce este error:

[2015-01-26 14:38:57,352] INFO DaoHelper - Checking database schema.
[2015-01-26 14:38:59,489] ERROR DaoHelper - Failed to initialize database.
org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: error in script file line: 62 S1000 General error java.lang.NullPointerException in statement [SET TABLE SHARE INDEX'9290275 9290275 9290275 9290275 1']
        at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:382)
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:429)
        at net.sourceforge.subsonic.dao.schema.Schema25.execute(Schema25.java:38)
        at net.sourceforge.subsonic.dao.DaoHelper.checkDatabase(DaoHelper.java:115)
        at net.sourceforge.subsonic.dao.DaoHelper.<init>(DaoHelper.java:72)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:100)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:61)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:877)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:839)

es debido a que la base de datos está corrupta. Para solucionar, es necesario restaurar un backup:

carlos@shirley:~# cd /var/subsonic/db/
root@shirley:/var/subsonic/db# cp subsonic.backup subsonic.data

y rearrancar Subsonic:

carlos@shirley:/var/subsonic/db# /etc/init.d/subsonic restart
* Restarting Subsonic Daemon subsonic Started Subsonic [PID 4093, /var/subsonic/subsonic_sh.log]

h1

Bajar todos los videoclips y mp3 de una playlist de Youtube en Ubuntu

25/01/2015

Para bajar todos los videoclips y mp3 de una playlist de Youtube en Ubuntu es necesario instalar el script Youtube-dl (última versión, a fecha de redacción de este artículo la v. «2015.01.23.4») y el paquete ffmpeg (descatalogado en Ubuntu Trusty, es necesario instalarse unos repositorios auxiliares), ejecutando lo siguiente:

$ youtube-dl -citk --max-quality FORMAT --extract-audio --audio-format mp3 http://www.youtube.com/playlist?list=XXXXXXXXXXX

Si ocurre el siguiente error:

carlos@shirley:~/temp/yt$ youtube-dl -citk --max-quality FORMAT --extract-audio --audio-format mp3 https://www.youtube.com/playlist?list=PLc6GzkmQ1nEscjVMc6OcD1kz-O4JO2FE0
[youtube:playlist] PLc6GzkmQ1nEscjVMc6OcD1kz-O4JO2FE0: Downloading page #1
WARNING: [youtube:playlist] PLc6GzkmQ1nEscjVMc6OcD1kz-O4JO2FE0: Playlist page is missing OpenGraph title, falling back ...
ERROR: Unable to extract title; please report this issue on https://yt-dl.org/bug . Be sure to call youtube-dl with the --verbose flag and include its complete output. Make sure you are using the latest version; type youtube-dl -U to update.

es necesario actualizar la última versión de Youtube-dl.

Fuente: xmodulo.

h1

Pydio, MCrypt is required by all security functions

04/01/2015

 

 
Si al instalar Pydio, sucede este mensaje de error en la web de instalación:

MCrypt enabled ERROR
MCrypt is required by all security functions.

Se soluciona activando el módulo de Mcrypt y reiniciando Apache:

carlos@shirley:/etc/php5/mods-available$ sudo php5enmod mcrypt
carlos@shirley:/etc/php5/mods-available$ sudo /etc/init.d/apache2 restart
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
* Restarting web server apache2

h1

ERROR: Site pydio does not exist! en Apache

04/01/2015

Si ocurre el siguiente error:

carlos@shirley:~/downloads$ sudo a2ensite pydio
ERROR: Site pydio does not exist!

renombrar el fichero «pydio» por «pydio.conf» y repetir:

carlos@shirley:~/downloads$ mv pydio pydio.conf
carlos@shirley:/etc/apache2/sites-available$ a2ensite pydio
Enabling site pydio.
carlos@shirley:/etc/apache2/sites-available$ sudo /etc/init.d/apache2 restart
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
* Restarting web server apache2