@@ -81,7 +81,8 @@ static pc_qset_t *qset_new( int expo )
81
81
}
82
82
83
83
static void upd_ema (
84
- pc_ema_t * ptr , pd_t * val , pd_t * conf , int64_t nslot , pc_qset_t * qs )
84
+ pc_ema_t * ptr , pd_t * val , pd_t * conf , int64_t nslot , pc_qset_t * qs
85
+ , pc_price_t * prc_ptr )
85
86
{
86
87
pd_t numer [1 ], denom [1 ], cwgt [1 ], wval [1 ], decay [1 ], diff [1 ], one [1 ];
87
88
pd_new ( one , 100000000L , -8 );
@@ -102,8 +103,15 @@ static void upd_ema(
102
103
pd_add ( decay , decay , one , qs -> fact_ );
103
104
104
105
// compute numer/denom and new value from decay factor
105
- pd_load ( numer , ptr -> numer_ );
106
- pd_load ( denom , ptr -> denom_ );
106
+ if ( prc_ptr -> drv1_ ) {
107
+ pd_load ( numer , ptr -> numer_ );
108
+ pd_load ( denom , ptr -> denom_ );
109
+ }
110
+ else {
111
+ /* temporary upgrade code */
112
+ pd_new_scale ( numer , ptr -> numer_ , PD_EMA_EXPO );
113
+ pd_new_scale ( denom , ptr -> denom_ , PD_EMA_EXPO );
114
+ }
107
115
pd_mul ( numer , numer , decay );
108
116
pd_mul ( wval , val , cwgt );
109
117
pd_add ( numer , numer , wval , qs -> fact_ );
@@ -117,6 +125,7 @@ static void upd_ema(
117
125
ptr -> val_ = val -> v_ ;
118
126
pd_store ( & ptr -> numer_ , numer );
119
127
pd_store ( & ptr -> denom_ , denom );
128
+ prc_ptr -> drv1_ = 1 ;
120
129
}
121
130
122
131
static inline void upd_twap (
@@ -125,8 +134,8 @@ static inline void upd_twap(
125
134
pd_t px [1 ], conf [1 ];
126
135
pd_new_scale ( px , ptr -> agg_ .price_ , ptr -> expo_ );
127
136
pd_new_scale ( conf , ( int64_t )( ptr -> agg_ .conf_ ), ptr -> expo_ );
128
- upd_ema ( & ptr -> twap_ , px , conf , nslots , qs );
129
- upd_ema ( & ptr -> twac_ , conf , conf , nslots , qs );
137
+ upd_ema ( & ptr -> twap_ , px , conf , nslots , qs , ptr );
138
+ upd_ema ( & ptr -> twac_ , conf , conf , nslots , qs , ptr );
130
139
}
131
140
132
141
// compute weighted percentile
0 commit comments