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


Глава 1 Глава 2 Глава 3
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) {
Содержание раздела