допустим, идет произвольный ряд значений, мы знаем только текущее и предыдущее, но нам нужно примерно определить среднее по всему ряду, например среднюю величину проскальзывания позиций. Но нереально постоянно пересчитывать все значения и копить их, это бред.
можно складывать предыдущее с текущим и делить на 2, потом то что получится опять складывать с новым и делить на 2. При этом естессно получаются отклонения от того среднего, которое бы мы имели зная сразу все значения. и оно со временем будет возрастать (а может и нет)
вопрос естессно нубский, но мб есть способ сделать это точнее? ) т.е. приблизить результат к реальному среднему
{
static int Count = 0;
static double Summ = 0;
Summ += new_value;
++Count;
return Summ/Count;
}
допустим, идет произвольный ряд значений, мы знаем только текущее и предыдущее, но нам нужно примерно определить среднее по всему ряду, например среднюю величину проскальзывания позиций. Но нереально постоянно пересчитывать все значения и копить их, это бред.
можно складывать предыдущее с текущим и делить на 2, потом то что получится опять складывать с новым и делить на 2. При этом естессно получаются отклонения от того среднего, которое бы мы имели зная сразу все значения. и оно со временем будет возрастать (а может и нет)
вопрос естессно нубский, но мб есть способ сделать это точнее? ) т.е. приблизить результат к реальному среднему
А за какой период считаем среднее?
Если есть возможность обратиться к n-му значению (считая с конца, и n - период усреднения), то можно считать так:
MAi = [MAi-1 x n + k1 - kn] / n
И это будет точно, никаких смещений.
{
static int Count = 0;
static double Summ = 0;
Summ += new_value;
++Count;
return Summ/Count;
}
А за какой период считаем среднее?
Если есть возможность обратиться к n-му значению (считая с конца, и n - период усреднения), то можно считать так:
MAi = [MAi-1 x n + k1 - kn] / n
И это будет точно, никаких смещений.
допустим, идет произвольный ряд значений, мы знаем только текущее и предыдущее, но нам нужно примерно определить среднее по всему ряду, например среднюю величину проскальзывания позиций. Но нереально постоянно пересчитывать все значения и копить их, это бред.
можно складывать предыдущее с текущим и делить на 2, потом то что получится опять складывать с новым и делить на 2. При этом естессно получаются отклонения от того среднего, которое бы мы имели зная сразу все значения. и оно со временем будет возрастать (а может и нет)
вопрос естессно нубский, но мб есть способ сделать это точнее? ) т.е. приблизить результат к реальному среднему
Обычно я делал это примерно так:
double RangeN[];
ArrayResize(RangeN, n - 1);
MA_N(double new_value)
{
static int i;
RangeN[i] = new_value;
i++;
if(i == n) i = 0;
for(int k = 0; k < n; k++) double average += RangeN[k];
average = average / n;
return(average)
}
Каждый раз вычисляет точное среднее значение n последних элементов.
нужно как раз без лишних массивов, имея только 2 значения, и период не известен. вариант со статическими переменными подходит
допустим, идет произвольный ряд значений, мы знаем только текущее и предыдущее, но нам нужно примерно определить среднее по всему ряду, например среднюю величину проскальзывания позиций. Но нереально постоянно пересчитывать все значения и копить их, это бред.
Почему "бред" ???
Сколько вам значений надо копить-то ? Ну не больше же пары сотен - хранить их что, бред ???
Зная только два значения - нельзя делать никакие предположения о предыдущих значениях в силу нестационарности рынка.
Только с двумя значениями можно вычислить экспоненциальное среднее. А обычное среднее не получится.
Почему ? На мой взгляд - если получается экспотенциальное, то среднее тем более получается. А если не получается обычного среднего - то и экспотенциального не получить.
Впрочем - выше уже правильно написали, надо хранить не все значения, а только сумму, и количество.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
допустим, идет произвольный ряд значений, мы знаем только текущее и предыдущее, но нам нужно примерно определить среднее по всему ряду, например среднюю величину проскальзывания позиций. Но нереально постоянно пересчитывать все значения и копить их, это бред.
можно складывать предыдущее с текущим и делить на 2, потом то что получится опять складывать с новым и делить на 2. При этом естессно получаются отклонения от того среднего, которое бы мы имели зная сразу все значения. и оно со временем будет возрастать (а может и нет)
вопрос естессно нубский, но мб есть способ сделать это точнее? ) т.е. приблизить результат к реальному среднему