@@ -20,8 +20,8 @@ class Interval(Enum):
2020
2121@frozen
2222class MinimalConditionsConfig :
23- lower_percentile = 0.995
24- upper_percentile = 1.005
23+ ftso_median_band_bips = 50
24+ ftoo_median_threshold_bips = 8000
2525 threshold = 0.8
2626
2727
@@ -43,34 +43,43 @@ def calculate_ftso_anchor_feeds(
4343 ) -> Sequence [Message ]:
4444 mb = Message .builder ()
4545 messages = []
46- total_rounds = len (medians )
47- if total_rounds == 0 :
48- return messages
49- for i in range (len (medians [0 ])):
50- rounds_in_interval = 0
51- for median_list , vote_list in zip (medians , votes ):
52- if len (vote_list ) < i + 1 or vote_list [i ] is None :
46+
47+ total , total_hit = 0 , 0
48+
49+ for median_list , vote_list in zip (medians , votes ):
50+ for i in range (len (median_list )):
51+ total += 1
52+
53+ if len (vote_list ) <= i or vote_list [i ] is None :
5354 continue
55+
56+ median = median_list [i ]
5457 vote = vote_list [i ]
55- assert vote
56- if (
57- MinimalConditionsConfig .lower_percentile * median_list [i ].value
58- <= vote
59- <= MinimalConditionsConfig .upper_percentile * median_list [i ].value
60- ):
61- rounds_in_interval += 1
62- success_rate = rounds_in_interval / total_rounds
63- if success_rate < MinimalConditionsConfig .threshold :
64- messages .append (
65- mb .build (
66- MessageLevel .WARNING ,
67- (
68- "Not meeting minimal condition for FTSO anchor feed "
69- f"in the latest interval, feed index: { i } , "
70- f"success rate: { success_rate } "
71- ),
72- )
58+
59+ assert vote is not None
60+
61+ band = MinimalConditionsConfig .ftso_median_band_bips
62+ low = median .value * (10_000 - band ) / 10_000
63+ high = median .value * (10_000 + band ) / 10_000
64+
65+ if low <= vote <= high :
66+ total_hit += 1
67+
68+ if not total :
69+ return messages
70+
71+ success_rate_bips = (total_hit * 10000 ) // total
72+
73+ if success_rate_bips < MinimalConditionsConfig .ftoo_median_threshold_bips :
74+ messages .append (
75+ mb .build (
76+ MessageLevel .WARNING ,
77+ (
78+ "not meeting minimal condition for FTSO anchor feeds in past "
79+ f"two hours - success rate: { success_rate_bips / 100 :.2f} %"
80+ ),
7381 )
82+ )
7483
7584 return messages
7685
0 commit comments