Spaces:
Runtime error
Runtime error
from hmmlearn import hmm | |
import plotly.graph_objects as go | |
import streamlit as st | |
original_map = {'max': 2, 'mid': 1, 'low': 0} | |
def GetMood(indval): | |
if indval <= 1/3: | |
return "Greed" | |
elif 1/3 < indval < 2/3: | |
return "Holding Steady" | |
else: | |
return "Fear" | |
def ProcessVixData(vix_df): | |
X = vix_df[['Close']].copy() | |
model = hmm.GaussianHMM(n_components=3, covariance_type="full", n_iter=100) | |
model.fit(X) | |
res = X.copy() | |
res['Class'] = model.predict(X) | |
resmap = res.groupby('Class').agg({'Close': 'mean'}).sort_values(by='Close') | |
resmap = dict(zip(resmap.index, ['low', 'mid', 'max'])) | |
res['Class_name'] = res.Class.apply(lambda x:resmap[x]) | |
res['Class_proc'] = res.Class_name.apply(lambda x:original_map[x]) | |
res['Norm_Class'] = (res['Class_proc']-res['Class_proc'].min())/(res['Class_proc'].max()-res['Class_proc'].min()) | |
return res | |
def GetIndicatorChart(res): | |
value = res.Norm_Class[-30:].mean() | |
fig = go.Figure(go.Indicator( | |
domain={'x': [0, 1], 'y': [0, 1]}, | |
value=value, | |
mode="gauge+number", | |
title={'text': f"VIX Analysis\nMood : {GetMood(value)}"}, | |
gauge={'axis': {'range': [None, res.Norm_Class.max()]}, | |
'steps': [ | |
{'range': [0, 1/3], 'color': "green"}, | |
{'range': [1/3, 2/3], 'color': "gray"}, | |
{'range': [2/3, 1], 'color': "red"}], | |
'threshold': {'line': {'color': "black", 'width': 4}, 'thickness': 0.75, 'value': value}})) | |
return fig | |