【问题标题】:How to get data from DataFrame/Matplot如何从 DataFrame/Matplotlib 获取数据
【发布时间】:2021-04-19 03:34:59
【问题描述】:

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

感谢任何帮助! (下面附上图表和打印图表的代码)

[图表]

[代码]

【问题讨论】:

    标签: python pandas


    【解决方案1】:

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

    # !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()
    

    【讨论】:

      猜你喜欢
      • 2020-12-03
      • 2021-10-28
      • 1970-01-01
      • 1970-01-01
      • 2012-02-14
      • 2012-10-29
      • 1970-01-01
      • 2021-04-26
      相关资源
      最近更新 更多