首页 > 解决方案 > 如何从 DataFrame/Matplot 获取数据

问题描述

最近我一直在尝试学习 Python,并开始了一个个人项目,该项目本质上是一个简单的股票交易机器人。我正在尝试实现一个简单的布林带,希望在当前日期获得布林带的值。当我有 x 值(当前日期)时,我目前遇到了试图从两个图(橙色和绿色)中提取股票价格(y 值)的问题。我一直在寻找方法来做到这一点,但大多数实现 numpy 因为这些点已经在 x 值列表和 y 值列表中。

任何帮助表示赞赏!(下面附上图表和打印图表的代码)

[图表] 在此处输入图像描述

[代码]

在此处输入图像描述

标签: pythonpandas

解决方案


Python 有一个库,它提供了一组丰富的功能作为技术指标。官方参考可以在这里找到该库还计算布林带,并返回三个结果数组,可以绘制在图表上以获得您想要的结果。

# !pip install yfinance
# !wget https://launchpad.net/~mario-mariomedina/+archive/ubuntu/talib/+files/libta-lib0_0.4.0-oneiric1_amd64.deb -qO libta.deb
# !wget https://launchpad.net/~mario-mariomedina/+archive/ubuntu/talib/+files/ta-lib0-dev_0.4.0-oneiric1_amd64.deb -qO ta.deb
# !dpkg -i libta.deb ta.deb
# !pip install ta-lib
import talib
import yfinance as yf
import datetime
import pandas as pd
import numpy as np

begin = datetime.datetime.today() - datetime.timedelta(days=100)
finish = datetime.datetime.today()
stockinfo = yf.download("AAPL", start=begin, end=finish)

stockinfo['20 Day MA'] = stockinfo['Adj Close'].rolling(window=20).mean()
stockinfo['20 Day STD'] = stockinfo['Adj Close'].rolling(window=20).std()
stockinfo['Upper_bband'] = stockinfo['20 Day MA'] + (stockinfo['20 Day STD'] * 1.5)
stockinfo['Lower_bband'] = stockinfo['20 Day MA'] - (stockinfo['20 Day STD'] * 1.5)

bbands = talib.BBANDS(np.array(stockinfo['Adj Close']))

import matplotlib.pyplot as plt

plt.figure(figsize=(12.5, 5))
plt.plot(stockinfo.index, stockinfo['20 Day MA'], label='20 Day MA')
plt.plot(stockinfo.index, stockinfo['Upper_bband'], label='upper_bband')
plt.plot(stockinfo.index, stockinfo['Lower_bband'], label='lower_bband')
plt.plot(stockinfo.index, bbands[0], label='bband1')
plt.plot(stockinfo.index, bbands[1], label='bband2')
plt.plot(stockinfo.index, bbands[2], label='bband3')

plt.title('AAPL: 20 Day Bollinger Band')
plt.xlabel(begin.strftime('%Y-%m-%d') + '-' + finish.strftime('%Y-%m-%d'))
plt.ylabel('Price (in USD)')
plt.legend(loc='upper left')

plt.show()

在此处输入图像描述


推荐阅读