-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrun_simulations.py
56 lines (46 loc) · 2.44 KB
/
run_simulations.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import pandas as pd
from tabulate import tabulate
from cadCAD.engine import ExecutionMode, ExecutionContext, Executor
from simulations import dex_exp, days, historical_data, plotting
from rebalancer import formulas, names
import matplotlib.pyplot as plt
exec_mode = ExecutionMode()
# Single Process Execution using a Single System Model Configuration:
local_proc_ctx = ExecutionContext(context=exec_mode.local_mode)
sys_model_simulation = Executor(
exec_context=local_proc_ctx, configs=dex_exp.configs)
sys_model_raw_result, sys_model_tensor_field, sessions = sys_model_simulation.execute()
sys_model_result = pd.DataFrame(sys_model_raw_result)
confs = [(conf.model_id, conf.sim_config["M"], days)
for conf in dex_exp.configs]
final_results = {}
# Count result of simulation
counter = -1
for (id, m, len) in confs:
counter += len + 1
final_results[id] = pd.DataFrame([id])
final_results[id]["interval"] = m[names.UPDATE_INTERVAL]
final_results[id]["cache"] = m[names.POPULARITY_CACHE]
final_results[id]["hedging"] = m[names.HEDGING]
final_results[id]["swap-mean"] = m[names.SWAP]
final_results[id]["arbitrageur"] = sys_model_result.iloc[counter].users[names.ARBITRAGEUR].tx_count
final_results[id]["normal"] = sys_model_result.iloc[counter].users[names.NORMAL].tx_count
final_results[id]["avg loss"] = (sys_model_result.iloc[counter].users[names.NORMAL].profit +
sys_model_result.iloc[counter].users[names.NORMAL].loss) / sys_model_result.iloc[counter].users[names.NORMAL].tx_count
final_results[id]["days"] = sys_model_result.iloc[counter].timestamp.day
final_results[id]["v"] = formulas.compute_V(
sys_model_result.iloc[counter][names.POOL])
final_results[id]["tokens"] = [list(sys_model_result.iloc[counter][names.POOL].keys())]
# for t in sys_model_result.iloc[counter][names.POOL].values():
# final_results[id][t.name] = t.target_ratio
# Print result of simulation
final_results = pd.concat(final_results.values(), axis=0)
final_results.to_csv("output.csv")
print(tabulate(final_results, headers='keys', tablefmt='psql'))
# print(tabulate(sys_model_result, headers='keys', tablefmt='psql'))
# Plot simulation
x = pd.to_datetime(next(iter(historical_data.values()))["snapped_at"])
# plotting.plt_daily_loss(sys_model_result, confs, x)
# plotting.plt_pool_values(sys_model_result, confs, x)
# plotting.plt_pool_distributions(sys_model_result, confs, x)
plt.show()