Home Implementing a for loop of share prices

Implementing a for loop of share prices

J. Smith
1#
J. Smith Published in 2018-01-11 22:43:40Z
 I need to work out a value S(n) based on the equation s(n) = (1 + r(1))(1+r(2))...(1+r(n))  The value of S(after N days) = (1+r(after 1 day))*(1+r(after 2 days))...(1+r(after N days))  with r coming from: r = return_daily + sig_daily  but calculated D times (see code below, D is calculated once for each day and is a random value) I'm just not too sure how to implement the equation including a changing variable(r changes daily). Thanks for any help Relevant Code: #import all modules required import numpy as np # using different notation for easier writting import scipy as sp import matplotlib.pyplot as plt #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #collect variables provided by the user period = 63 # can be edited to an input() command for variable periods. Return_annual = np.arange(0.00,0.15,0.05) # creates an array ??? not sure if helpful sig_annual = np.arange(0.01,0.31,0.01) #use .31 as python doesnt include the upper range value. #functions for variables of daily return and risk. Return_daily = (1/252)*R_annual sig_daily = (1/(np.sqrt(252)))*sig_annual D=np.random.normal(size=period) r_i=Return_daily + sig_daily # must be calculated D times 
Cristobal Aguirre
2#
Cristobal Aguirre Reply to 2018-01-11 23:25:14Z
 How do you receive your inputs? you can receive them one by one and append them to a meta list, and then you can use a function where you pass your list of r(n) and output whatever you want. for example if you want geometrically linked returns: rors=[0.4, 0.5, 0.8] #calculate compound return def calc_ror(ror_list): final_value=0 for i in ror_list: final_value=(1+i)*(1+final_value)-1 return final_value calc_ror(rors) Out[35]: 2.7799999999999994  Another cool trick is using variable input arguments, in that case each argument in the function is a different return. #calculate compound return def calc_ror(*args): final_value=0 for i in args: final_value=(1+i)*(1+final_value)-1 return final_value calc_ror(0.4, 0.5, 0.8) Out[37]: 2.7799999999999994  Or finally using pandas import pandas as pd rors=[0.4, 0.5, 0.8] df = pd.DataFrame(rors, columns=['ror']) df_cum=pd.DataFrame((1 + df['ror']).cumprod()-1) df_cum.tail(1) Out[42]: ror 2 2.78  I hope one of these alternatives applies to your case
 You need to login account before you can post.
Processed in 0.317771 second(s) , Gzip On .