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)