Подсчитывает сезонное среднее для каждой





void SeasonalAvg (float *a, float *v, float *dt, int mode,
int m, int n) {
// Подсчитывает сезонное среднее для каждой календарной даты,
// основанное на предыдущих и (в некоторых случаях) на последующих
// годах. Работает на всех сериях данных.
// а — вне: значений [1..n] сезонных средних
// v — в: оригинальных сериях данных [1..n]
// dt — в: сериях [1..n] соответствующих дат
// mode — в: методе анализа:
// 1 = складной нож в пределах выборки, все
последние годы вне выборки
// 2 = фиксированный период анализа, выраженный в
// годах
// m — в: дата (режим = 1) или период анализа (режим = 2)
// n — в: число дней во всех рядах данных
static int i, j, cnt;
static unsigned long k;
static float sum, sdate;
if(mode == 1) { // режим складного ножа
for(i = 1; i <= n; i++) { // для каждой текущей даты
sum = 0.0; cnt = 0;
for{j = 1; j < 100; j++) { // двигаемся назад к
sdate = f(int)dt[i] - 10000 * j); // исходной дате
if (sdate < dt[3]) break; // переход к началу
k = max(0, (int){i- 260.893*j)); // приблизительный индекс
hunt(dt, n, sdate, &k) ; // находим точный индекс
if(sdate > dt[k]) k++;
if(sdate = dt[k]) continue;
cnt++; sum += v[k]; // накапливаем среднее
)


for(j = 1; j < 100; j++) { // двигаемся вперед
sdate = ((int)dt[i] + 10000 * j); //к исходной дате
if(sdate > m) break; // избегаем данных вне выборки
k = min(n, (int)(i+260.893*j); // приблизительный индекс
hunt(dt, n, sdate, &k); // находим точный индекс
if(sdate > dt[k]) k++;
if(sdate = dt[k]) continue;
cnt++; sum += v[k]; // накапливаем среднюю
}
a[i] = sum / (cnt + l.OE- 20); // заканчиваем среднюю
} // следующая текущая дата
}
else if(mode == 2) { // режим фиксированного периода
// анализа
for {i = 1; i <= n; i++) { // для каждой текущей даты
sum = 0.0; cnt = 0;
for(j = 1; j < 100; j++) ( // идем вперед
if(cnt >= m) break; // достаточность лет для теста
sdate = ((int)dt[i] - 10000 * j); // исходная дата
if (sdate < dt[3]) break; // идем к началу
k = max(0, (int)(i- 260.893*j)); // приблизительный индекс
hunt(dt, n, sdate, &k) ; // находим точный индекс
if(sdate > dt[k]) k++;
if(sdate = dt[k]) continue;
cnt++; sum += v[k]; // накапливаем среднюю
}
for(j = 1; j < 100; j++) ( // идем вперед
if (cnt >= m) break; // достаточность лет для теста
sdate = ((int)dt[i] + 10000 * j); // исходная дата
k = min(n, (int)(i+26Q.893*j)); // приблизительный индекс
hunt(dt, n, sdate, &k); // находим точный индекс
if(sdate > dt[k]) k++;
if(sdate = dt[k]) continue;
cnt++; sum += v[k]; // накапливаем среднюю
}
a[i] = sum / cnt; // заканчиваем среднюю
} // следующая текущая дата
}
static void Model (float *parms, float *dt, float *opn, float *hi,
float *lo, float *cls, float *vol, float *oi, float *dlrv, int nb,
TRDSIM &ts, float *eqcls) {

Содержание раздела