Created
June 12, 2015 11:37
-
-
Save StuartGordonReid/833d2f37cc604f5a1382 to your computer and use it in GitHub Desktop.
Lower and Higher Partial Moments
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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