The code below tries to solve the following task: "Find the maximum price change over any 5-day rolling window, over 1000-day period".
By "any 5-day rolling window", I don't just mean "t_i + 5", but rather "t_i + j", where "i" varies from 1 to 1000 and "j" varies from 1 to 5.
I have tried to use Numpy native functions, but I still ended up using a "for-loop" for the inner iteration. Here goes the code:
prices = npr.random([1000,1])*1000
max_array = np.zeros([(prices.size-5),1])
for index, elem in np.ndenumerate(prices[:-5,:]):
local_max = 0.0
for i in range(1,6,1):
price_return = prices[(index[0] + i),0] / elem
local_max = max(local_max, price_return)
max_array[index[0]] = local_max
global_max = np.amax(max_array)
Can I somehow eliminate the inner for loop and use Numpy vectorization (somehow) instead?
Also, I don't particularly like using "index[0]" to extract the actual index of the current loop from the tuple object that is returned into the variable "index" via the call:
for index, elem in np.ndenumerate(prices[:-5,:]):
Can that be also imporved?