如何计算股票价格的趋势线

23

我正在尝试计算和绘制股票价格的趋势线。我做了一些搜索并思考了整整一天,但没有一个真正好的想法。

我有每日的价格历史记录,想要找到趋势线和价格线交叉点。

您能提供一些思路或指导吗?

非常感谢!!!

趋势线样本


你所做的不是趋势线(在统计意义上),而是技术分析。看看 pandas_talib(这个包)。 - zglin
@zhqiat 谢谢你的帮助。这似乎有些帮助,但我仍然在寻找一个文档。 - Carl Zheng
2个回答

30
import pandas as pd
import quandl as qdl
from scipy.stats import linregress

# get AAPL 10 years data

data = qdl.get("WIKI/AAPL", start_date="2007-01-01", end_date="2017-05-01")

data0 = data.copy()
data0['date_id'] = ((data0.index.date - data0.index.date.min())).astype('timedelta64[D]')
data0['date_id'] = data0['date_id'].dt.days + 1

# high trend line

data1 = data0.copy()

while len(data1)>3:

    reg = linregress(
                    x=data1['date_id'],
                    y=data1['Adj. High'],
                    )
    data1 = data1.loc[data1['Adj. High'] > reg[0] * data1['date_id'] + reg[1]]

reg = linregress(
                    x=data1['date_id'],
                    y=data1['Adj. High'],
                    )

data0['high_trend'] = reg[0] * data0['date_id'] + reg[1]

# low trend line

data1 = data0.copy()

while len(data1)>3:

    reg = linregress(
                    x=data1['date_id'],
                    y=data1['Adj. Low'],
                    )
    data1 = data1.loc[data1['Adj. Low'] < reg[0] * data1['date_id'] + reg[1]]

reg = linregress(
                    x=data1['date_id'],
                    y=data1['Adj. Low'],
                    )

data0['low_trend'] = reg[0] * data0['date_id'] + reg[1]

# plot

data0['Adj. Close'].plot()
data0['high_trend'].plot()
data0['low_trend'].plot()

输入图像描述


1
尊重所有的努力,交易领域中的趋势远非仅仅是一个计算(正如@zhqiat在你开始回答之前已经指出)。不尊重这一点是显而易见的。从技术上讲,你可能也已经意识到,在这里提出的计算在半对数示例和纯线性比例示例上都不成立,正如上面所呈现的。 - user3666197
有人能够用伪代码解释一下吗? - user172839
1
嘿@heyu91,你能解释一下这行代码吗:data1 = data1.loc[data1['Adj. High'] > reg[0] * data1['date_id'] + reg[1]]?我不明白data1 ['date_id']在这个方程中扮演什么角色。谢谢! - Shuhari
1
@SVetter 意思是保留所有在回归线上方的数据点。 - Nguyen Tan Bao
@heyu91,你能解释一下这行代码中的 3 是如何影响代码的吗?当它被改变时,似乎会对输出产生影响。代码如下:while len(data1)>3: - chawila
这个答案太棒了。代码反复计算回归线,每次都筛选出所有在回归线上方/下方的点,直到只剩下3个点,然后最后这3个点的回归线就是实际的趋势线/边界线。 - undefined

3

一些想法和指导:

根据你的陈述 (引自:)
我做了一些搜索并思考了整整一天,似乎没有一个真正好的解决方案。

我可以向你保证,没有普适的好主意可以解决这个问题,但这不应该让你紧张。几代CTA(商品交易顾问)为了掌握这个领域所花费的最大努力,在他们留给我们的道路上至少可以学到一些东西。

趋势更多是一种观点而不是某种基于演算的线条

1) 定义趋势:
初步惊奇的是,人们应该认为趋势更像是受外部系统驱动的(外在的)特征,更相关的是一种观点,而不是时间序列数据(可观察的)历史。

换句话说,一旦人们意识到趋势信息在时间序列数据集内部根本不存在,事情就会变得明朗起来。

2) 如果一个人足够相信自己的趋势识别方法,
那么她/他只能将这种趋势指示延伸到未来(一种推测)。

3) 市场,仅有市场验证(或忽略)一个人“接受”的信念。

4) 共享信念再次确认此线性信念为大多数尊重趋势指示的共识(由市场风险敞口股权衡量,而不是按照普遍投票方式,更不是按照群众吵闹或CTAs的自我宣传声音衡量)。


它真的有效吗?

上面的USDCAD示例屏幕(在新窗口中放大查看全尺寸深入视图)反映了所有这些,并添加了一些基本事件实例,这些事件跨越了技术编制(定量支持)的主要吸引子,展示了外汇交易流的一部分真实生活。


你是怎么做到的? - Alex
@Alex 抱歉离开了一会儿(实际上是因为提到了网站政策规则而被送进了当地的数字阿兹卡班古拉格,有点像伏地魔吧?) - 你想知道关于“你是怎么做到的”这个问题吗?能否稍微澄清一下问题的重点? - user3666197
谢谢你的回答。我很好奇你是如何编写趋势线的。但正如你所说,CTA花费了很多时间来编程。 - Alex
@Alex,严格来说,这更像是一个模糊的世界,编程并不是关键。TA无论在标题上听起来有多“技术”,更多地是了解大型参与者的内部机制。虽然TA似乎是在“图表”上工作,但还有许多其他因素(不像人们期望的那样在图表中自我显现),这些因素影响着观察清单,而TA是一个无限发展的领域(通过理解过去的重大事件来帮助理解未来事件,而不仅仅是通过价格范围),因此在使用它进行XTO之前,应该适当地对每个TA进行辩论。 - user3666197

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接