Steven, it's great that you look for alternate solutions. However, you might want to make it simpler. You're scaning the "table" multiple times and using several window functions. If you're looking for something more complete, you can tweak you're code to find prices in any place of the strings.
Could you explain what are you using the RANK function? I know what it does, but it seems to me that you're not using it.