Skip to content

Instantly share code, notes, and snippets.

@StuartGordonReid
Created June 12, 2015 11:37
Show Gist options
  • Save StuartGordonReid/833d2f37cc604f5a1382 to your computer and use it in GitHub Desktop.
Save StuartGordonReid/833d2f37cc604f5a1382 to your computer and use it in GitHub Desktop.
Lower and Higher Partial Moments
import numpy
import numpy.random as nrand
def lpm(returns, threshold, order):
# This method returns a lower partial moment of the returns
# Create an array he same length as returns containing the minimum return threshold
threshold_array = numpy.empty(len(returns))
threshold_array.fill(threshold)
# Calculate the difference between the threshold and the returns
diff = threshold_array - returns
# Set the minimum of each to 0
diff = diff.clip(min=0)
# Return the sum of the different to the power of order
return numpy.sum(diff ** order) / len(returns)
def hpm(returns, threshold, order):
# This method returns a higher partial moment of the returns
# Create an array he same length as returns containing the minimum return threshold
threshold_array = numpy.empty(len(returns))
threshold_array.fill(threshold)
# Calculate the difference between the returns and the threshold
diff = returns - threshold_array
# Set the minimum of each to 0
diff = diff.clip(min=0)
# Return the sum of the different to the power of order
return numpy.sum(diff ** order) / len(returns)
# Example Usage
r = nrand.uniform(-1, 1, 50)
print("hpm(0.0)_1 =", hpm(r, 0.0, 1))
print("lpm(0.0)_1 =", lpm(r, 0.0, 1))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment