提示:例如
这是关于使用机器学习创建交易策略的系列文章中的第一篇。关于机器学习在交易中的实际应用,我主要参考的是 Marco Lopez de Prado 的金融机器学习进展。
尽管在人工智能方面有多年经验,但我从未将其应用于交易,更喜欢每周/每月期权交易。在本文中,我专注于寻找容易获得的数据并开始摄取它们。虽然使用公共和广泛使用的数据不会为交易提供高质量的信号:许多其他交易者有可能分析和建立模型。相反,我想使用一种渐进的方法,并从非常幼稚的模型迭代到更复杂(和有利可图)的模型。
作为起点,我下载并可视化数据。在本练习中,我重点关注烛台图,这是交易图表的实际标准。我想分享我的整个学习过程,包括死胡同和我用来完善脚本的所有步骤。因此,我可能会编写次优代码并展示重构和修订。与其编写优雅、抽象且难以阅读的代码,我更愿意分享我通往解决方案的实际路径。
提示:为了简单起见,我使用Analytics Vidhya 帖子作为指导,从雅虎财经下载了与 Apple(代码:AAPL)相关的数据。我需要安装以下软件包:
例如:
提示:这里可以添加计划学习的时间
import pandas as pd
import yfinance as yf
df = yf.download(
"AAPL",
start="2019-01-01",
end="2021-06-12",
progress=False,
)
df.head()
数据如下所示:
这种格式通常称为OHLC:它包含给定时间窗口的开盘价、最高价、最低价和收盘价;在此示例中,每日开盘价、最高价、最低价和收盘价。时间窗口是数据框(日期列)的索引。此外,还有调整收盘价,即(来自雅虎文档):
提示:这里统计学习计划的总量
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")
引用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")
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")
参考:https://medium.com/mlearning-ai/downloading-and-visualizing-financial-data-3b05bf835c55