Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -12,27 +12,59 @@ from Gradio_UI import GradioUI
|
|
12 |
|
13 |
# Below is an example of a tool that does nothing. Amaze us with your creativity !
|
14 |
@tool
|
15 |
-
def
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
"""
|
17 |
-
Calculate
|
18 |
-
|
19 |
Args:
|
20 |
-
|
21 |
-
|
22 |
-
|
|
|
|
|
|
|
23 |
Returns:
|
24 |
-
|
25 |
"""
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
36 |
|
37 |
@tool
|
38 |
def get_current_time_in_timezone(timezone: str) -> str:
|
@@ -73,7 +105,7 @@ with open("prompts.yaml", 'r') as stream:
|
|
73 |
|
74 |
agent = CodeAgent(
|
75 |
model=model,
|
76 |
-
tools=[final_answer,
|
77 |
max_steps=6,
|
78 |
verbosity_level=1,
|
79 |
grammar=None,
|
|
|
12 |
|
13 |
# Below is an example of a tool that does nothing. Amaze us with your creativity !
|
14 |
@tool
|
15 |
+
def calculate_risk_metrics(
|
16 |
+
returns: np.ndarray,
|
17 |
+
var_level: float = 0.95,
|
18 |
+
n_simulations: int = 10000,
|
19 |
+
bootstrap: bool = False,
|
20 |
+
random_seed: Optional[int] = None
|
21 |
+
) -> Tuple[float, float]:
|
22 |
"""
|
23 |
+
Calculate Value at Risk (VaR) and Expected Shortfall (ES) using the historical method, with an option for bootstrapped historical simulation.
|
24 |
+
|
25 |
Args:
|
26 |
+
returns: Array of daily returns. Each value represents the percentage return for a single day.
|
27 |
+
var_level: VaR level (e.g., 0.95 for 95% confidence). Defaults to 0.95.
|
28 |
+
n_simulations: Number of bootstrap simulations. Defaults to 10000.
|
29 |
+
bootstrap: If True, use bootstrapped historical simulation. Defaults to False.
|
30 |
+
random_seed: Seed for random number generation to ensure reproducibility. Defaults to None.
|
31 |
+
|
32 |
Returns:
|
33 |
+
Tuple[float, float]: A tuple containing the VaR and Expected Shortfall (ES) values.
|
34 |
"""
|
35 |
+
if random_seed is not None:
|
36 |
+
np.random.seed(random_seed)
|
37 |
+
|
38 |
+
if bootstrap:
|
39 |
+
# Perform bootstrapped historical simulation
|
40 |
+
simulated_var = np.zeros(n_simulations)
|
41 |
+
simulated_es = np.zeros(n_simulations)
|
42 |
+
|
43 |
+
for i in range(n_simulations):
|
44 |
+
# Resample returns with replacement
|
45 |
+
resampled_returns = np.random.choice(returns, size=len(returns), replace=True)
|
46 |
+
# Sort the resampled returns
|
47 |
+
sorted_returns = np.sort(resampled_returns)
|
48 |
+
# Determine the index for the VaR level
|
49 |
+
index = int((1 - var_level) * len(sorted_returns))
|
50 |
+
# Calculate VaR for this simulation
|
51 |
+
simulated_var[i] = sorted_returns[index]
|
52 |
+
# Calculate ES for this simulation (average of returns below VaR)
|
53 |
+
simulated_es[i] = np.mean(sorted_returns[:index])
|
54 |
+
|
55 |
+
# Calculate the average VaR and ES across all simulations
|
56 |
+
var_value = np.mean(simulated_var)
|
57 |
+
es_value = np.mean(simulated_es)
|
58 |
+
else:
|
59 |
+
# Use the standard historical method
|
60 |
+
sorted_returns = np.sort(returns)
|
61 |
+
index = int((1 - var_level) * len(returns))
|
62 |
+
# Calculate VaR
|
63 |
+
var_value = sorted_returns[index]
|
64 |
+
# Calculate ES (average of returns below VaR)
|
65 |
+
es_value = np.mean(sorted_returns[:index])
|
66 |
+
|
67 |
+
return var_value, es_value
|
68 |
|
69 |
@tool
|
70 |
def get_current_time_in_timezone(timezone: str) -> str:
|
|
|
105 |
|
106 |
agent = CodeAgent(
|
107 |
model=model,
|
108 |
+
tools=[final_answer,calculate_risk_metrics,get_current_time_in_timezone,visit_webpage,web_search], ## add your tools here (don't remove final answer)
|
109 |
max_steps=6,
|
110 |
verbosity_level=1,
|
111 |
grammar=None,
|