class MovingSortino(StatefulValueHolder): def __init__(self, window, dependency=('ret', 'riskFree')): super(MovingSortino, self).__init__(window, dependency) self._mean = MovingAverage(window, dependency='x') self._negativeVar = MovingNegativeVariance(window, dependency='x') def push(self, data): value = super(MovingSortino, self).push(data) if value is None: return ret = value[0] benchmark = value[1] data = {'x': ret - benchmark} self._mean.push(data) self._negativeVar.push(data) def result(self): return self._mean.result() / math.sqrt(self._negativeVar.result())
def __init__(self, window, dependency=('ret', 'riskFree')): super(MovingSortino, self).__init__(window, dependency) self._mean = MovingAverage(window, dependency='x') self._negativeVar = MovingNegativeVariance(window, dependency='x')