Spaces:
Runtime error
Runtime error
import streamlit as st | |
from io import StringIO | |
import pandas as pd | |
from returns_gen import returns_set | |
#from plot_simulations import plot_sims,histogram | |
from maximum_dd import max_dd | |
import numpy as np | |
st. set_page_config(page_title='Monte Carlo Simulator ',layout="centered") | |
st.header('Monte Carlo Simulator for 10000 iterations') | |
from matplotlib import pyplot as plt | |
def plot_sims(sims_list): | |
global generated_plots | |
# sims_list=sims_list[:10] | |
fig, ax = plt.subplots() | |
for sl in sims_list: | |
ax.plot(sl) | |
number_of_sims=len(sims_list) | |
ax.set_title(f'Monte Carlo Paths of Nifty returns for {number_of_sims} simulations') | |
ax.set_ylabel('returns %') | |
ax.set_xlabel('count') | |
st.pyplot(fig) | |
def histogram(lis): | |
lis.sort() | |
print(min(lis),max(lis)) | |
print(int(min(lis)),int(max(lis))) | |
bin_width=0.5 | |
max_val=int(max(lis))+1 | |
min_val=int(min(lis))-1 | |
bins=[min_val+k*bin_width for k in range(int((max_val-min_val)/bin_width))] | |
fig,ax=plt.subplots() | |
ax.hist(lis,bins=bins,align='left') | |
#ax.xlim(max_val,min_val) | |
ax.axis(xmin=min_val,xmax=max_val) | |
ax.set_title('Drawdown from Monte Carlo iterations') | |
ax.set_ylabel('count') | |
ax.set_xlabel('Maxx DD %') | |
st.pyplot(fig) | |
def clean_returns(ret_lis): | |
return [float(str(k).replace(',','').replace('%','').replace(' ','')) for k in returns_list] | |
uploaded_file=st.file_uploader('DataFile', type=['csv']) | |
if uploaded_file: | |
stringio = StringIO(uploaded_file.getvalue().decode("utf-8")) | |
df=pd.read_csv(stringio) | |
df_cols=df.columns | |
default_col=0 | |
for i in range(len(df_cols)): | |
dcol=df_cols[i] | |
if 'return' in dcol.lower(): | |
default_col=i | |
break | |
returns_column=st.selectbox('returns column', df_cols,index=default_col) | |
returns_list=df[returns_column].tolist() | |
returns_list=clean_returns(returns_list) | |
returns=returns_set(returns_list) | |
cum_rets_dd=[max_dd(k) for k in returns] | |
cum_rets=[k[0] for k in cum_rets_dd] | |
dd_list=[k[1] for k in cum_rets_dd] | |
percentile_95=np.percentile(dd_list,95) | |
st.write(f'95 percentile Max DD is {percentile_95} %') | |
plot_sims(cum_rets) | |
histogram(dd_list) | |