montecarlo / app.py
subhash494's picture
Upload 3 files
e76457a
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)