Esta métrica es muy utilizada en la industria del trading. Los mejores gestores superan el nivel 1.0 pero no todos los años. En realidad es difícil conseguir rentabilidades por encima de la volatilidad.
Sharpe = rentabilidad_anualizada / volatilidad_anualizada
La fórmula original incluye la tasa libre de riesgo en el numerador, pero eso hoy en día es prácticamente nulo. Dicho de otra forma: sin riesgo, no dan nada por el dinero. A mí me gusta obviar esta parte (tasa libre de riesgo = 0) y así puedo comparar mejor los sistemas independientemente de cómo esté la renta fija ese año.
Para calcular el Sharpe simplificado hay que sacar los retornos diarios y sobre ellos calcular la desviación estándar. Anualizamos multiplicando por 16 ( más o menos la raíz de los días de trading que tiene un año). Calculamos la media de los retornos diarios y anualizamos, multiplicando por 252 días de trading. El cociente es el ratio de Sharpe.
Lo de hacer la raíz cuadrada con la volatilidad pero no con los rendimientos es porque la volatilidad crece como la raíz cuadrada del tiempo mientras que los rendimientos crecen proporcionalmente al tiempo. Por ejemplo, si alguien consigue un 0.1% diario de ganancia media, con una desviación de los retornos del 1% entonces su ratio de sharpe es:
Sh = 0.1*252 / (1*16) = 1.57
He trabajado sobre el código que puse en el post sobre la volatilidad anualizada de la curva de capital y he incluido la media y el cociente de ambos para llegar al ratio de sharpe.
Un comentario respecto al código: la base del cálculo son los retornos diarios. Hay que calcularlos bien. Si estamos probando un sistema con un tamaño fijo de la posición (p.e. 1 contrato) entonces según va creciendo el capital van disminuyendo en magnitud los retornos porcentuales ya que lo que gana o pierde un contrato es cada vez menor respecto del capital acumulado. Esto se soluciona restando la curva de capital de ayer a la de hoy y dividiendo por el capital inicial. Así los retornos tienen la misma magnitud al principio que al final de la curva. Esto es lo que hace el código de debajo. Sirve para calcular el sharpe de un sistema al que no se ha aplicado gestión de capital.
Pero si quisiéramos calcular el sharpe de un sistema cuyo tamaño de la posición va subiendo conforme tenemos ganancias (con gestión de capital) entonces deberíamos coger como retornos los cocientes entre ayer y hoy en la curva de capital, de nuevo para que su magnitud se mantenga constante tanto al principio como al final de la curva. Esto no lo hace el código pero solo habría que modificar poniendo dif_porc = Eq/ref(Eq,-1) - 1 donde se calculan los retornos.
No entender esto y aplicar el modelo de forma incorrecta dará resultados incorrectos. El código de debajo sirve para calcular el ratio de Sharpe simplificado de un sistema de trading al que no se le ha aplicado gestión de capital.
//------------------------------------------
// RATIO DE SHARPE DE LA CURVA DE CAPITAL
// OSCAR G. CAGIGAS
// 11/MAYO/18
// AÑADIR AL FINAL DEL SISTEMA DE TRADING
//------------------------------------------
SetCustomBacktestProc("");
if( Status("action") == actionPortfolio )
{
bo = GetBacktesterObject();
bo.Backtest(); // run default backtest procedure
st = bo.GetPerformanceStats(0); // get stats for all trades
eq = bo.EquityArray;
//media y desviación
dif = eq - Ref(eq,-1);
dif_porc = dif/100000; //todo lo referimos al capital inicial de 100.000
Volat = 100 * StDev( dif_porc, BarCount -2 ) * 16; //anualizado xRaiz(256)
Media = 100 * MA( dif_porc, BarCount -2 ) * 252;
// Here we add custom metric to backtest report
bo.AddCustomMetric( "Volat (%) ", LastValue(Volat) );
bo.AddCustomMetric( "Media Anualizada (%) ", LastValue(Media) );
bo.AddCustomMetric( "Sharpe ", LastValue(Media/Volat) );
bo.AddCustomMetric( "barcount ", BarCount );
}
No hay comentarios:
Publicar un comentario