[软件设计/软件工程] Python/Pandas 计算 Ichimoku 图表组件

[复制链接]
发表于 2022-5-5 09:11:53
问题
我有 Pandas DataFrame 对象,其中包含日期、开盘价、收盘价、每日股价的高低数据。我想计算一个房间图的组成。我可以使用以下代码获取数据:
  1. high_prices = data['High']
  2. close_prices = data['Close']
  3. low_prices = data['Low']
  4. dates = data['Date']  # contains datetime objects
复制代码

我需要计算以下系列(家人称之为 Tenkan-Sen 线):

(9 周期高点 + 9 周期低点)/2

我在 R 中找到了一个解决方案,但我很难将其转换为 Python/Pandas 代码。

Ichimoku 图表包含更多组件,但是当我知道如何在 pandas 中计算 Tenkan Sen 线时,我将能够计算所有这些元素(我将分享代码)。

回答
我不是金融或绘图方面的专家,但这里有一个金融数据示例以及如何使用 rolling_max 和 rolling_min :
  1. In [60]:

  2. import pandas.io.data as web
  3. import datetime
  4. start = datetime.datetime(2010, 1, 1)
  5. end = datetime.datetime(2013, 1, 27)
  6. data=web.DataReader("F", 'yahoo', start, end)
  7. high_prices = data['High']
  8. close_prices = data['Close']
  9. low_prices = data['Low']
  10. dates = data.index
  11. nine_period_high = pd.rolling_max(data['High'], window= 9 )
  12. nine_period_low = pd.rolling_min(data['Low'], window= 9 )
  13. ichimoku = (nine_period_high + nine_period_low) /2
  14. ichimoku
  15. Out[60]:
  16. Date
  17. 2010-01-04       NaN
  18. 2010-01-05       NaN
  19. 2010-01-06       NaN
  20. 2010-01-07       NaN
  21. 2010-01-08       NaN
  22. 2010-01-11       NaN
  23. 2010-01-12       NaN
  24. 2010-01-13       NaN
  25. 2010-01-14    11.095
  26. 2010-01-15    11.270
  27. 2010-01-19    11.635
  28. 2010-01-20    11.730
  29. 2010-01-21    11.575
  30. 2010-01-22    11.275
  31. 2010-01-25    11.220
  32. ...
  33. 2013-01-04    12.585
  34. 2013-01-07    12.685
  35. 2013-01-08    13.005
  36. 2013-01-09    13.030
  37. 2013-01-10    13.230
  38. 2013-01-11    13.415
  39. 2013-01-14    13.540
  40. 2013-01-15    13.675
  41. 2013-01-16    13.750
  42. 2013-01-17    13.750
  43. 2013-01-18    13.750
  44. 2013-01-22    13.845
  45. 2013-01-23    13.990
  46. 2013-01-24    14.045
  47. 2013-01-25    13.970
  48. Length: 771
复制代码

调用 data[['High', 'Low', 'Close', 'ichimoku']].plot() 将产生以下情节:

更新

在@PedroLobito 指出不完整/不正确的公式后,我接受了@chilliq 的回答,并对熊猫版本 0.16.1 及更高版本进行了修改:
  1. import pandas as pd
  2. from pandas_datareader import data, wb
  3. import datetime
  4. start = datetime.datetime(2010, 1, 1)
  5. end = datetime.datetime(2013, 1, 27)
  6. d=data.DataReader("F", 'yahoo', start, end)
  7. high_prices = d['High']
  8. close_prices = d['Close']
  9. low_prices = d['Low']
  10. dates = d.index
  11. nine_period_high = pd.rolling_max(d['High'], window= 9 )
  12. nine_period_low = pd.rolling_min(d['Low'], window= 9 )
  13. d['tenkan_sen'] = (nine_period_high + nine_period_low) /2

  14. # Kijun-sen (Base Line): (26-period high + 26-period low)/2))
  15. period26_high = pd.rolling_max(high_prices, window=26)
  16. period26_low = pd.rolling_min(low_prices, window=26)
  17. d['kijun_sen'] = (period26_high + period26_low) / 2

  18. # Senkou Span A (Leading Span A): (Conversion Line + Base Line)/2))
  19. d['senkou_span_a'] = ((d['tenkan_sen'] + d['kijun_sen']) / 2).shift(26)

  20. # Senkou Span B (Leading Span B): (52-period high + 52-period low)/2))
  21. period52_high = pd.rolling_max(high_prices, window=52)
  22. period52_low = pd.rolling_min(low_prices, window=52)
  23. d['senkou_span_b'] = ((period52_high + period52_low) / 2).shift(26)

  24. # The most current closing price plotted 22 time periods behind (optional)
  25. d['chikou_span'] = close_prices.shift(-22) # 22 according to investopedia
  26. d.plot()
复制代码

这是结果,由于我不是金融专家,所以不清楚:





上一篇:通过引用调用 Python 函数
下一篇:用Python中的gzip读取原始压缩字节

使用道具 举报

Archiver|手机版|小黑屋|吾爱开源 |网站地图

Copyright 2011 - 2012 Lnqq.NET.All Rights Reserved( ICP备案粤ICP备14042591号-1粤ICP14042591号 )

关于本站 - 版权申明 - 侵删联系 - Ln Studio! - 广告联系

本站资源来自互联网,仅供用户测试使用,相关版权归原作者所有

快速回复 返回顶部 返回列表