我有Pandas DataFrame对象,包含日期、开盘、收盘、低日和高日股票数据。我想计算一梦图的分量。我可以使用以下代码获取数据:
high_prices = data['High']
close_prices = data['Close']
low_prices = data['Low']
dates = data['Date'] # contains datetime objects
我需要计算以下系列(Ichimoku称之为Tenkan Sen线):
(9期高点9期低点)/2
我在这里找到了一个R语言的解决方案,但我很难将其转换为Python/Pandas代码。
Ichimoku图表包含了更多的组件,但当我知道如何计算熊猫的天根森线时,我将能够计算所有组件(我将分享代码)。
EdChum的答案非常接近于计算Ichimoku云的成分。
方法是正确的,但它没有适应leading_spans的未来日期。当我们将领先跨度移动26时,熊猫只移动到最后一个日期或最后一个指数,额外的(或未来的)26值被忽略。
这是一个适合未来日期或未来云形成的实现
from datetime import timedelta
high_9 = df['High'].rolling(window= 9).max()
low_9 = df['Low'].rolling(window= 9).min()
df['tenkan_sen'] = (high_9 + low_9) /2
high_26 = df['High'].rolling(window= 26).max()
low_26 = df['Low'].rolling(window= 26).min()
df['kijun_sen'] = (high_26 + low_26) /2
# this is to extend the 'df' in future for 26 days
# the 'df' here is numerical indexed df
last_index = df.iloc[-1:].index[0]
last_date = df['Date'].iloc[-1].date()
for i in range(26):
df.loc[last_index+1 +i, 'Date'] = last_date + timedelta(days=i)
df['senkou_span_a'] = ((df['tenkan_sen'] + df['kijun_sen']) / 2).shift(26)
high_52 = df['High'].rolling(window= 52).max()
low_52 = df['Low'].rolling(window= 52).min()
df['senkou_span_b'] = ((high_52 + low_52) /2).shift(26)
# most charting softwares dont plot this line
df['chikou_span'] = df['Close'].shift(-22) #sometimes -26
tmp = df[['Close','senkou_span_a','senkou_span_b','kijun_sen','tenkan_sen']].tail(300)
a1 = tmp.plot(figsize=(15,10))
a1.fill_between(tmp.index, tmp.senkou_span_a, tmp.senkou_span_b)
我不是财务专家或绘图专家,但下面展示了示例财务数据以及如何使用rolling_max
和rolling_min
:
In [60]:
import pandas.io.data as web
import datetime
start = datetime.datetime(2010, 1, 1)
end = datetime.datetime(2013, 1, 27)
data=web.DataReader("F", 'yahoo', start, end)
high_prices = data['High']
close_prices = data['Close']
low_prices = data['Low']
dates = data.index
nine_period_high = df['High'].rolling(window=9).max()
nine_period_low = df['Low'].rolling(window=9).min()
ichimoku = (nine_period_high + nine_period_low) /2
ichimoku
Out[60]:
Date
2010-01-04 NaN
2010-01-05 NaN
2010-01-06 NaN
2010-01-07 NaN
2010-01-08 NaN
2010-01-11 NaN
2010-01-12 NaN
2010-01-13 NaN
2010-01-14 11.095
2010-01-15 11.270
2010-01-19 11.635
2010-01-20 11.730
2010-01-21 11.575
2010-01-22 11.275
2010-01-25 11.220
...
2013-01-04 12.585
2013-01-07 12.685
2013-01-08 13.005
2013-01-09 13.030
2013-01-10 13.230
2013-01-11 13.415
2013-01-14 13.540
2013-01-15 13.675
2013-01-16 13.750
2013-01-17 13.750
2013-01-18 13.750
2013-01-22 13.845
2013-01-23 13.990
2013-01-24 14.045
2013-01-25 13.970
Length: 771
调用数据[['High','Low','Close','ichimoku']。plot()
生成以下绘图:
使现代化
在@PedroLobito指出不完整/不正确的公式后,我接受了@chilliq的答案,并将其修改为0.16.1及以上版本:
import pandas as pd
from pandas_datareader import data, wb
import datetime
start = datetime.datetime(2010, 1, 1)
end = datetime.datetime(2013, 1, 27)
d=data.DataReader("F", 'yahoo', start, end)
high_prices = d['High']
close_prices = d['Close']
low_prices = d['Low']
dates = d.index
nine_period_high = df['High'].rolling(window=9).max()
nine_period_low = df['Low'].rolling(window=9).min()
d['tenkan_sen'] = (nine_period_high + nine_period_low) /2
# Kijun-sen (Base Line): (26-period high + 26-period low)/2))
period26_high = high_prices.rolling(window=26).max()
period26_low = low_prices.rolling(window=26).min()
d['kijun_sen'] = (period26_high + period26_low) / 2
# Senkou Span A (Leading Span A): (Conversion Line + Base Line)/2))
d['senkou_span_a'] = ((d['tenkan_sen'] + d['kijun_sen']) / 2).shift(26)
# Senkou Span B (Leading Span B): (52-period high + 52-period low)/2))
period52_high = high_prices.rolling(window=52).max()
period52_low = low_prices.rolling(window=52).min()
d['senkou_span_b'] = ((period52_high + period52_low) / 2).shift(26)
# The most current closing price plotted 22 time periods behind (optional)
d['chikou_span'] = close_prices.shift(-22) # 22 according to investopedia
d.plot()
结果如下图,不清楚,因为如前所述,我不是金融专家:
感谢前面的回答,有代码:
# Tenkan-sen (Conversion Line): (9-period high + 9-period low)/2))
period9_high = pd.rolling_max(high_prices, window=9)
period9_low = pd.rolling_min(low_prices, window=9)
tenkan_sen = (period9_high + period9_low) / 2
# Kijun-sen (Base Line): (26-period high + 26-period low)/2))
period26_high = pd.rolling_max(high_prices, window=26)
period26_low = pd.rolling_min(low_prices, window=26)
kijun_sen = (period26_high + period26_low) / 2
# Senkou Span A (Leading Span A): (Conversion Line + Base Line)/2))
senkou_span_a = ((tenkan_sen + kijun_sen) / 2).shift(26)
# Senkou Span B (Leading Span B): (52-period high + 52-period low)/2))
period52_high = pd.rolling_max(high_prices, window=52)
period52_low = pd.rolling_min(low_prices, window=52)
senkou_span_b = ((period52_high + period52_low) / 2).shift(26)
# The most current closing price plotted 22 time periods behind (optional)
chikou_span = close_prices.shift(-22) # 22 according to investopedia
本文向大家介绍给定列表中的Python组图,包括了给定列表中的Python组图的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将编写一个将所有字谜分组到一个列表中的程序。首先,让我们看看什么是字谜。 具有相同字符但顺序不同的任何两个字符串称为七字组。 在深入探讨解决方案之前,让我们看一个示例。 输入值 输出结果 我们将把问题分解为两部分。首先,我们将编写一个检查两个字符串是否为字谜的函数
问题内容: 我有一个这样的(标签,计数)元组列表: 由此,我想对所有具有相同标签的值求和(相同的标签始终相邻),并以相同的标签顺序返回列表: 我知道我可以用以下方法解决它: 但是,有没有更Pythonic /优雅/有效的方法来做到这一点? 问题答案: 可以做你想做的:
组合图用于绘制混合图;例如,带饼图的条形图。在本节中,我们将讨论不同类型的组合图表。 图表类型 描述 带有柱状图、折线图、饼图 带有柱状图、折线图、饼图 带有双轴、线、柱状的图表 带有双轴、线、柱状的图表 带有多个轴的图表 带有多个轴的图表 带有回归线的散点图 带有回归线的散点图
一般情况下,Highcharts 包含标题(Title)、坐标轴(Axis)、数据列(Series)、数据提示框(Tooltip)、图例(Legend)、版权标签(Credits)等,另外还可以包括导出功能按钮(Exporting)、标示线(PlotLines)、标示区域(PlotBands)、数据标签(dataLabels)等。 Highcharts 基本组成部分如下图所示 图2-1 Highc
我正在尝试使用MPAndroid图表来显示2组数据。没有语法错误或崩溃,但没有显示任何数据。这是我的代码。 每次我运行时页面都会崩溃。日志显示,“一个或多个DataSet Entry数组比此ChartData对象的x值数组长。”我记录了我的x轴值并检查了,两个数组的大小都是一样的!
问题内容: 我有一个对象列表,我想对其进行洗牌。我以为可以使用该random.shuffle方法,但是当列表中包含对象时,这似乎失败了。是否有一种用于改组对象的方法或解决此问题的另一种方法? 这将失败。 问题答案: 应该管用。这是一个示例,其中对象是列表: 请注意,随机播放可在原位运行,并返回None。