标签: moving-average

如何有效地计算移动标准差

下面你可以看到我的C#方法来计算每个点的布林带(移动平均线,上行带,下行带).

如您所见,此方法使用2 for循环来计算移动平均值的移动标准偏差.它曾经包含一个额外的循环来计算过去n个时期的移动平均值.我可以通过在循环开始时将新的点值添加到total_average并删除循环结束时的i-n点值来删除.

我现在的问题基本上是:我可以用移动平均线管理的类似方式删除剩余的内部循环吗?

    public static void AddBollingerBands(SortedList<DateTime, Dictionary<string, double>> data, int period, int factor)
    {
        double total_average = 0;

        for (int i = 0; i < data.Count(); i++)
        {
            total_average += data.Values[i]["close"];

            if (i >= period - 1)
            {
                double total_bollinger = 0;
                double average = total_average / period;

                for (int x = i; x > (i - period); x--)
                {
                    total_bollinger += Math.Pow(data.Values[x]["close"] - average, 2);
                }

                double stdev = Math.Sqrt(total_bollinger / period);

                data.Values[i]["bollinger_average"] = average;
                data.Values[i]["bollinger_top"] = …
Run Code Online (Sandbox Code Playgroud)

c# algorithm finance moving-average standard-deviation

20
推荐指数
2
解决办法
2万
查看次数

移动平均值基于PostgreSQL中的时间戳

我想通过时间戳执行移动平均线.我有两列:温度和时间戳(时间 - 日期),我想基于每15分钟的连续温度观察来执行移动平均.换句话说,选择数据以基于15分钟时间间隔执行平均.而且,对于不同的时间序列,可以具有不同数量的观察.我的意思是所有窗口大小相等(15分钟),但每个窗口中可能有不同数量的观察.例如:对于第一个窗口,我们必须计算n个观测值的平均值,而对于第二个窗口,计算n + 5观测值的平均值.

数据样本:

ID   Timestamps          Temperature
1    2007-09-14 22:56:12 5.39
2    2007-09-14 22:58:12 5.34
3    2007-09-14 23:00:12 5.16
4    2007-09-14 23:02:12 5.54
5    2007-09-14 23:04:12 5.30
6    2007-09-14 23:06:12 5.20
7    2007-09-14 23:10:12 5.39
8    2007-09-14 23:12:12 5.34
9    2007-09-14 23:20:12 5.16
10   2007-09-14 23:24:12 5.54
11   2007-09-14 23:30:12 5.30
12   2007-09-14 23:33:12 5.20
13   2007-09-14 23:40:12 5.39
14   2007-09-14 23:42:12 5.34
15   2007-09-14 23:44:12 5.16
16   2007-09-14 23:50:12 5.54
17   2007-09-14 23:52:12 5.30
18   2007-09-14 23:57:12 …

sql postgresql timestamp moving-average

19
推荐指数
2
解决办法
7511
查看次数

SQL Server中7天滚动平均值的SQL查询

我有一个每小时产品使用情况表(产品使用次数)数据 -

ID (bigint)| ProductId (tinyint)| Date (int - YYYYMMDD) | Hour (tinyint)| UsageCount (int)
#|1 | 20140901 | 0 | 10
#|1 | 20140901 | 1 | 15
#|1 | 20140902 | 5 | 25
#|1 | 20140903 | 5 | 25
#|1 | 20140904 | 3 | 25
#|1 | 20140905 | 7 | 25
#|1 | 20140906 | 10 | 25
#|1 | 20140907 | 9 | 25
#|1 | 20140908 | 5 | 25
#|2 | …
Run Code Online (Sandbox Code Playgroud)

sql sql-server moving-average

17
推荐指数
2
解决办法
4万
查看次数

T-SQL计算移动平均线

我正在使用SQL Server 2008 R2,尝试计算移动平均值.对于我视图中的每条记录,我想收集250条先前记录的值,然后计算此选择的平均值.

我的视图列如下:

TransactionID | TimeStamp           | Value | MovAvg
----------------------------------------------------
            1 | 01.09.2014 10:00:12 |     5 |    
            2 | 01.09.2014 10:05:34 |     3 | 
...
          300 | 03.09.2014 09:00:23 |     4 | 
Run Code Online (Sandbox Code Playgroud)

TransactionID是独特的.对于每一个TransactionID,我想计算列值的平均值,超过之前的250个记录.因此,对于TransactionID 300,收集前250行的所有值(视图按TransactionID降序排序),然后在MovAvg列中写入这些值的平均值的结果.我希望收集一系列记录中的数据.

sql t-sql sql-server-2008-r2 moving-average window-functions

16
推荐指数
2
解决办法
2万
查看次数

LINQ计算SortedList的移动平均值<dateTime,double>

我有一个时间序列的形式SortedList<dateTime,double>.我想计算一下这个系列的移动平均线.我可以使用简单的for循环来做到这一点.我想知道是否有更好的方法来使用linq.

我的版本:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var mySeries = new SortedList<DateTime, double>();
            mySeries.Add(new DateTime(2011, 01, 1), 10);
            mySeries.Add(new DateTime(2011, 01, 2), 25);
            mySeries.Add(new DateTime(2011, 01, 3), 30);
            mySeries.Add(new DateTime(2011, 01, 4), 45);
            mySeries.Add(new DateTime(2011, 01, 5), 50);
            mySeries.Add(new DateTime(2011, 01, 6), 65);

            var calcs = new calculations();
            var avg = calcs.MovingAverage(mySeries, 3);
            foreach (var item in avg)
            {
                Console.WriteLine("{0} {1}", item.Key, item.Value);                
            } …
Run Code Online (Sandbox Code Playgroud)

c# linq moving-average

15
推荐指数
4
解决办法
1万
查看次数

如何在C#中更快地计算出简单的移动平均线?

用于计算简单移动平均值的最快库/算法是什么?我写了自己的,但是在33万项十进制数据集上花了太长时间.

  • 期间/时间(ms)
  • 20/300;
  • 60/1500;
  • 120/3500.

这是我的方法的代码:

public decimal MA_Simple(int period, int ii) {
    if (period != 0 && ii > period) {
        //stp.Start();
        decimal summ = 0;
        for (int i = ii; i > ii - period; i--) {
            summ = summ + Data.Close[i];
        }
        summ = summ / period;
        //stp.Stop();
        //if (ii == 1500) System.Windows.Forms.MessageBox.Show((stp.ElapsedTicks * 1000.0) / Stopwatch.Frequency + " ms");
        return summ;
    } else return -1;
}
Run Code Online (Sandbox Code Playgroud)

Data.Close[]是一个固定大小(1 000 000)的十进制数组.

c# algorithm financial moving-average

15
推荐指数
4
解决办法
6万
查看次数

pyspark:使用时间序列数据滚动平均值

我有一个由时间戳列和美元列组成的数据集.我想找到每行的平均美元数,在每行的时间戳结束.我最初看的是pyspark.sql.functions.window函数,但是按周分类数据.

这是一个例子:

%pyspark
import datetime
from pyspark.sql import functions as F

df1 = sc.parallelize([(17,"2017-03-11T15:27:18+00:00"), (13,"2017-03-11T12:27:18+00:00"), (21,"2017-03-17T11:27:18+00:00")]).toDF(["dollars", "datestring"])
df2 = df1.withColumn('timestampGMT', df1.datestring.cast('timestamp'))

w = df2.groupBy(F.window("timestampGMT", "7 days")).agg(F.avg("dollars").alias('avg'))
w.select(w.window.start.cast("string").alias("start"), w.window.end.cast("string").alias("end"), "avg").collect()
Run Code Online (Sandbox Code Playgroud)

这导致两条记录:

|        start        |          end         | avg |
|---------------------|----------------------|-----|
|'2017-03-16 00:00:00'| '2017-03-23 00:00:00'| 21.0|
|---------------------|----------------------|-----|
|'2017-03-09 00:00:00'| '2017-03-16 00:00:00'| 15.0|
|---------------------|----------------------|-----|
Run Code Online (Sandbox Code Playgroud)

窗口函数将时间序列数据分类,而不是执行滚动平均值.

有没有办法执行滚动平均值,我会回到每行的每周平均值,时间段结束于行的timestampGMT?

编辑:

张的答案接近我想要的,但不完全是我想看到的.

这是一个更好的例子来展示我想要得到的东西:

%pyspark
from pyspark.sql import functions as F
df = spark.createDataFrame([(17, "2017-03-10T15:27:18+00:00"),
                        (13, "2017-03-15T12:27:18+00:00"),
                        (25, "2017-03-18T11:27:18+00:00")],
                        ["dollars", "timestampGMT"])
df = df.withColumn('timestampGMT', df.timestampGMT.cast('timestamp'))
df = df.withColumn('rolling_average', F.avg("dollars").over(Window.partitionBy(F.window("timestampGMT", …
Run Code Online (Sandbox Code Playgroud)

moving-average window-functions apache-spark pyspark

14
推荐指数
3
解决办法
1万
查看次数

在Python中运行平均值

是否有一种pythonic方法来构建包含某些函数的运行平均值列表

在阅读了一篇关于火星人,黑匣子和柯西分布的有趣小块之后,我认为自己计算Cauchy分布的平均值会很有趣:

import math 
import random

def cauchy(location, scale):
    p = 0.0
    while p == 0.0:
        p = random.random()
    return location + scale*math.tan(math.pi*(p - 0.5))

# is this next block of code a good way to populate running_avg?
sum = 0
count = 0
max = 10
running_avg = []
while count < max:
    num = cauchy(3,1)
    sum += num
    count += 1
    running_avg.append(sum/count)

print running_avg     # or do something else with …
Run Code Online (Sandbox Code Playgroud)

python list-comprehension moving-average

13
推荐指数
2
解决办法
1万
查看次数

用C++计算移动平均值

我正在尝试计算信号的移动平均值.信号值(双精度)随机更新.我正在寻找一种有效的方法来实时计算它在时间窗口内的时间加权平均值.我可以自己做,但它比我想象的更具挑战性.

我在互联网上发现的大部分资源都是计算周期性信号的移动平均值,但随机时间更新.

有谁知道这方面的好资源?

谢谢

c++ algorithm time moving-average

13
推荐指数
1
解决办法
9439
查看次数

SQL移动平均线

如何在SQL中创建移动平均线?

当前表格:

Date             Clicks 
2012-05-01       2,230
2012-05-02       3,150
2012-05-03       5,520
2012-05-04       1,330
2012-05-05       2,260
2012-05-06       3,540
2012-05-07       2,330
Run Code Online (Sandbox Code Playgroud)

所需的表格或输出:

Date             Clicks    3 day Moving Average
2012-05-01       2,230
2012-05-02       3,150
2012-05-03       5,520          4,360
2012-05-04       1,330          3,330
2012-05-05       2,260          3,120
2012-05-06       3,540          3,320
2012-05-07       2,330          3,010
Run Code Online (Sandbox Code Playgroud)

sql hive moving-average

13
推荐指数
2
解决办法
2万
查看次数