将线性趋势拟合到一组数据是直接的。但是如何将多条趋势线拟合到一个时间序列中?我将上涨和下跌趋势定义为高于或低于指数移动平均线的价格。当价格高于 EMA 时,我需要适应一个积极的趋势,当趋势转为消极时,一个新的消极趋势线等等。在我的market_data['Signal']熊猫数据框中下面的代码中,我告诉我趋势是上升 +1 还是下降 -1。
我猜我需要某种循环,但我无法弄清楚逻辑......
import pandas as pd
import pandas_datareader.data as web
import datetime as dt
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import matplotlib.dates as mdates
#Colecting data
market = '^DJI'
end = dt.datetime(2016, 12, 31)
start = dt.date(end.year-10, end.month, end.day)
market_data = web.DataReader(market, 'yahoo', start, end)
#Calculating EMA and difference
market_data['ema'] = market_data['Close'].ewm(200).mean()
market_data['diff_pc'] = (market_data['Close'] / market_data['ema']) - 1
#Defining bull/bear signal
TH = 0
market_data['Signal'] = …Run Code Online (Sandbox Code Playgroud) 我有一个具有季节性(每周)模式的重复时间序列,并且我想返回没有每周趋势的相同时间序列,以第一个值作为起点。
具体来说,第一个值仍然是 39.8,但第八个值也将是 39.8,而不是 17.1。如果只是重复前七个值,那么将会重复出现为期一周的负面趋势,而我希望根本没有趋势(因此第 7 个值 6.2 也会更高)。
有没有一种优雅的方法来做到这一点,尤其是对时间序列中的零值条目具有鲁棒性的方法(我有很多这样的条目)?
我们可以假设时间序列趋势是线性且恒定的(即不仅仅是分段线性)。
demand <- ts(
c(39.8, 33.5, 40.6, 23.6, 11.9, 12.3, 6.2, 17.1, 10.8, 18, 1, -10.7,
-10.4, -16.5, -5.6, -11.9, -4.7, -21.7, -33.4, -33.1, -39.2, -28.2,
-34.6, -27.4, -44.4, -56.1, -55.7, -61.8, -50.9, -57.2, -50.1),
frequency = 7
)
plot(demand)
Run Code Online (Sandbox Code Playgroud)
有哪些好的算法可以自动检测时间序列数据的趋势或绘制趋势线(上升趋势、下降趋势、无趋势)?如果您能为我指出任何好的研究论文或 python、R 或 Matlab 库,我将不胜感激。
理想情况下,该算法的输出将有 4 列:
从时间
到时间
非常感谢您的参与。
我正在构建一个.net页面来模仿电子表格.该表包含此公式
=ROUND(TREND(AA7:AE7,AA$4:AE$4,AF$4),1)
Run Code Online (Sandbox Code Playgroud)
有人可以提供相当于C#的TREND()?或者,如果任何人都可以提供一个快捷方式,那也没关系; 我对那里的数学不太熟悉,知道是否有更简单的方法.
如果它有帮助,这里有一些示例数字.
AA7:AE7
6 8 10 12 14
要么
10.2 13.6 17.5 20.4 23.8
AA $ 4:AE $ 4
600 800 1000 1200 1400
AF $ 4
650
编辑:这是我想出的,它似乎与我的电子表格产生相同的数字.
public static partial class Math2
{
public static double[] Trend(double[] known_y, double[] known_x, params double[] new_x)
{
// return array of new y values
double m, b;
Math2.LeastSquaresFitLinear(known_y, known_x, out m, out b);
List<double> new_y = new List<double>();
for (int j = 0; j < new_x.Length; …Run Code Online (Sandbox Code Playgroud) 我正在建立一个网站,在Twitter上为我的最终项目寻找和展示当前最热门的话题.有没有人知道如何在上周或一天内从大量推文中提取主题?我也想知道如何在http://tweet3d.com/上显示标签云等主题,并展示每个主题的趋势,如http://trendistic.indextank.com/.
我真的需要你的帮助,因为这个最后的项目会在本月底结束.我的合作伙伴要求我使用Flash Builder,我也在学习使用它.多谢你们.
其他信息(11/20/2011):在我搜索谷歌之后,我来到这篇论文:使用主题模型比较Twitter和传统媒体,您可以使用以下链接访问它:纸张,但我无法理解该模型我缺乏相关背景.
如何获取值高于先前值的所有记录。例如,下表中的第一个范围从 id 1 开始,到 id 6 结束,下一个范围是从 7 到 10,等等......
id Open
1 1.30077
2 1.30088
3 1.30115
4 1.30132
5 1.30135
6 1.30144
7 1.30132
8 1.30137
9 1.30152
10 1.30158
11 1.30149
12 ...
Run Code Online (Sandbox Code Playgroud) 检查一系列数字是否有增加或减少趋势的最佳方法是什么?
我知道我可以选择序列的第一个和最后一个值,并检查它们的区别,但我想要一个更强大的检查.这意味着我希望能够在大多数递减的序列中容忍少数增加的值,反之亦然.
更具体地说,数字存储为
vector<int> mySequence;
Run Code Online (Sandbox Code Playgroud)
关于我正在处理的数字序列的更多细节:
我正在努力在交易视图中创建一个趋势指标来跟踪趋势的走向。具体来说,我想要一个变量在几天内保持不变,但当满足特定条件时它会发生变化。看起来应该很简单,但每次我尝试时,我都会陷入一个永无休止的循环,而且我似乎无法理解它。变量“趋势”
///Condition
pos = close > open
neg = close < open
pos_cond = pos and pos[1]
neg_cond = neg and neg[1]
///Variables to keep track of trend
Trend = iff(***pos_cond or neg_cond not met***, Trend[1], Trend + real_trend)
trend_change_neg = iff(pos_cond, 1, 0)
trend_change_pos = iff(neg_cond, -1, 0)
real_trend = trend_change_neg + trend_change_pos
Trend = iff(Trend > 2, 2, iff(Trend < -2, -2, Trend))
/////////plots
plotshape(Trend > 0, color = color.green, location = location.top, style = shape.square, title="TrendLong")
plotshape( …Run Code Online (Sandbox Code Playgroud) 我有一个时间序列数据集,其中包含一些 nan 值。我想去除这些数据的趋势:
我尝试这样做:
scipy.signal.detrend(y)
Run Code Online (Sandbox Code Playgroud)
然后我收到了这个错误:
ValueError: array must not contain infs or NaNs
Run Code Online (Sandbox Code Playgroud)
然后我尝试:
scipy.signal.detrend(y.dropna())
Run Code Online (Sandbox Code Playgroud)
但是我丢失了数据顺序。
如何解决这个问题?
我如何在 python 的时间序列中检测到这种类型的变化?单击此处查看图像
谢谢你的帮助