使用 Python 和 Matplotlib下载美股数据

介绍:

提示:例如

这是关于使用机器学习创建交易策略的系列文章中的第一篇。关于机器学习在交易中的实际应用,我主要参考的是 Marco Lopez de Prado 的金融机器学习进展。

尽管在人工智能方面有多年经验,但我从未将其应用于交易,更喜欢每周/每月期权交易。在本文中,我专注于寻找容易获得的数据并开始摄取它们。虽然使用公共和广泛使用的数据不会为交易提供高质量的信号:许多其他交易者有可能分析和建立模型。相反,我想使用一种渐进的方法,并从非常幼稚的模型迭代到更复杂(和有利可图)的模型。

作为起点,我下载并可视化数据。在本练习中,我重点关注烛台图,这是交易图表的实际标准。我想分享我的整个学习过程,包括死胡同和我用来完善脚本的所有步骤。因此,我可能会编写次优代码并展示重构和修订。与其编写优雅、抽象且难以阅读的代码,我更愿意分享我通往解决方案的实际路径。


下载数据:

提示:为了简单起见,我使用Analytics Vidhya 帖子作为指导,从雅虎财经下载了与 Apple(代码:AAPL)相关的数据。我需要安装以下软件包:

例如:

  1. pip3 安装 yfinance

导入数据:

提示:这里可以添加计划学习的时间

  • 首先,我将 Apple 数据从 2019-01-01 到 2021-06-12 导入到 pandas 数据框中:


import pandas as pd
import yfinance as yf


df = yf.download(
    "AAPL",
    start="2019-01-01",
    end="2021-06-12",
    progress=False,
)
df.head()

数据如下所示:
使用 Python 和 Matplotlib下载美股数据_第1张图片
这种格式通常称为OHLC:它包含给定时间窗口的开盘价、最高价、最低价和收盘价;在此示例中,每日开盘价、最高价、最低价和收盘价。时间窗口是数据框(日期列)的索引。此外,还有调整收盘价,即(来自雅虎文档):

学习产出:

提示:这里统计学习计划的总量

  • 调整后的收盘价是对所有适用的拆分和股息分配进行调整后的收盘价。
    因此,如果公司派发股息或拆分,则会调整价格并在此处报告标准化值。最后,有一个 Volume 列,其中包含股票的每日交易量。调整后的收盘价作为时间函数的表示可以通过 matplotlib 使用一些 Python 代码获得:
import matplotlib.pyplot as plt


plt.rc("font", size=14)
plt.figure(figsize=(16, 9))
plt.plot(df.index, df["Adj Close"], lw=2)
plt.grid()
plt.savefig("apple.png", dpi=300, bbox_inches="tight")

使用 Python 和 Matplotlib下载美股数据_第2张图片

构建图表

引用Investopedia的话,烛台图代表给定时间窗口内的价格。在这个例子中,我考虑的是 Apple 的每日价格。

蜡烛的“主体”,即矩形,具有开盘价和收盘价的极值。如果白天价格上涨,则矩形为白色,否则为黑色。然而,有不同的惯例:与价格相关的蜡烛可以是绿色的,而与下降趋势相关的蜡烛可以是红色的。视觉上:

plt.figure(figsize=(16, 9))
plt.bar(
    temp.index,
    real_body_max - real_body_min,
    bottom=real_body_min,
    color=filled,
    edgecolor="black",
)
plt.vlines(temp.index, real_body_max, temp["High"], color="black")
plt.vlines(temp.index, temp["Low"], real_body_min, color="black")

使用 Python 和 Matplotlib下载美股数据_第3张图片

def candlestick(df: pd.DataFrame) -> None:
    real_body_min = df[["Open", "Close"]].apply(min, axis=1)
    real_body_max = df[["Open", "Close"]].apply(max, axis=1)
    filled = np.where(df["Close"] < df["Open"], "black", "white")
    plt.figure(figsize=(16, 9))
    plt.bar(
        df.index,
        real_body_max - real_body_min,
        bottom=real_body_min,
        color=filled,
        edgecolor="black",
    )
    plt.vlines(df.index, real_body_max, df["High"], color="black")
    plt.vlines(df.index, df["Low"], real_body_min, color="black")


candlestick(temp)

修改视觉
下一步,我在制作情节时添加标题。这在处理更多代码时很有用。重构非常简单:

def candlestick(df: pd.DataFrame, title:str) -> None:
    real_body_min = df[["Open", "Close"]].apply(min, axis=1)
    real_body_max = df[["Open", "Close"]].apply(max, axis=1)
    filled = np.where(df["Close"] < df["Open"], "black", "white")
    
    
    plt.figure(figsize=(16, 9))
    plt.title(title)
    plt.bar(
        df.index,
        real_body_max - real_body_min,
        bottom=real_body_min,
        color=filled,
        edgecolor="black",
    )
    plt.vlines(df.index, real_body_max, df["High"], color="black")
    plt.vlines(df.index, df["Low"], real_body_min, color="black")


candlestick(df.iloc[20:23, :], "AAPL")

此外,我在绘图中添加了一个网格并更改了颜色约定:

def candlestick(df: pd.DataFrame, title: str) -> None:
    real_body_min = df[["Open", "Close"]].apply(min, axis=1)
    real_body_max = df[["Open", "Close"]].apply(max, axis=1)
    filled = np.where(df["Close"] < df["Open"], "red", "green")

    plt.figure(figsize=(16, 9))
    plt.title(title)
    plt.bar(
        df.index,
        real_body_max - real_body_min,
        bottom=real_body_min,
        color=filled,
        edgecolor=filled,
    )
    plt.grid()
    plt.vlines(df.index, real_body_max, df["High"], color=filled, lw=4)
    plt.vlines(df.index, df["Low"], real_body_min, color=filled, lw=4)


candlestick(df.iloc[20:23, :], "AAPL")


candlestick(df.iloc[20:23, :], "AAPL")

使用 Python 和 Matplotlib下载美股数据_第4张图片

参考:https://medium.com/mlearning-ai/downloading-and-visualizing-financial-data-3b05bf835c55

你可能感兴趣的:(python,matplotlib,开发语言)