<p>我不是财务专家,也不是绘图专家,但下面的示例显示了财务数据以及如何使用<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.rolling_max.html#pandas.rolling_max" rel="nofollow noreferrer">^{<cd1>}</a>和<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.rolling_min.html#pandas.rolling_min" rel="nofollow noreferrer">^{<cd2>}</a>:</p>
<pre><code>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 = pd.rolling_max(data['High'], window= 9 )
nine_period_low = pd.rolling_min(data['Low'], window= 9 )
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
</code></pre>
<p>调用<code>data[['High', 'Low', 'Close', 'ichimoku']].plot()</code>将生成以下绘图:</p>
<p><img src="https://i.stack.imgur.com/lhOuW.png" alt="enter image description here"/></p>
<p><strong>更新</strong></p>
<p>在@PedroLobito指出不完整/不正确的公式后,我接受了@chilliq的答案,并对熊猫版0.16.1及以上版本进行了修改:</p>
<pre><code>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 = pd.rolling_max(d['High'], window= 9 )
nine_period_low = pd.rolling_min(d['Low'], window= 9 )
d['tenkan_sen'] = (nine_period_high + nine_period_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)
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 = pd.rolling_max(high_prices, window=52)
period52_low = pd.rolling_min(low_prices, window=52)
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()
</code></pre>
<p>结果如下,不清楚,因为我不是金融专家:</p>
<p><a href="https://i.stack.imgur.com/pV6NY.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/pV6NY.png" alt="enter image description here"/></a></p>