在《Deep Learning for Finance》这本书中,作者Sofien Kaabar详细介绍了如何使用Python创建自定义的技术指标,并将其与机器学习模型结合以优化交易策略。这里将介绍一个具体的例子来说明整个过程:创建一个简单的移动平均线(Moving Average, MA)技术指标,并将其作为特征用于预测股票价格变动的机器学习模型。
创建自定义技术指标
1. 定义技术指标
假设我们要创建一个简单移动平均线(SMA),它是一种广泛使用的技术指标,用于平滑价格数据并识别趋势方向。简单移动平均线是通过计算过去N个周期的价格平均值来得到的。例如,5天SMA就是过去5天收盘价的平均值。
import numpy as np
def simple_moving_average(prices, window=5):
""" 计算简单移动平均线 """
return np.convolve(prices, np.ones(window), 'valid') / window
这里我们使用numpy
库中的convolve
函数来实现移动窗口的求和操作,并除以窗口大小以得到平均值。
2. 应用到实际数据
接下来,我们需要获取一些历史价格数据。我们可以从Yahoo Finance等在线资源下载数据,或者使用如pandas_datareader
这样的库来直接加载数据。
import pandas as pd
from pandas_datareader import data as pdr
import yfinance as yf
yf.pdr_override() # 使用yfinance库替代旧的数据读取方式
# 下载苹果公司(AAPL)的历史股价数据
df = pdr.get_data_yahoo('AAPL', start='2020-01-01', end='2023-12-31')
prices = df['Close'].values # 获取收盘价
sma = simple_moving_average(prices, window=5) # 计算5日SMA
现在我们有了一个包含5日SMA的技术指标数组。
将技术指标用于模型优化
1. 准备数据集
为了训练机器学习模型,我们需要准备一个包含特征和目标变量的数据集。在这个例子中,我们的特征将是5日SMA,而目标变量可以是下一个交易日的价格变动方向(上涨或下跌)。
# 构建特征和标签
X = sma[:-1] # 去掉最后一个元素,因为我们没有它的下一个交易日价格
y = (prices[5:] > prices[4:-1]).astype(int) # 如果下一天价格上涨则为1,否则为0
# 转换成DataFrame以便处理
data = pd.DataFrame({'SMA': X, 'Target': y})
2. 划分数据集
将数据分为训练集和测试集,确保模型能够泛化到未见数据。
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(data[['SMA']], data['Target'], test_size=0.3, random_state=42)
3. 选择并训练模型
我们可以选择多种类型的机器学习模型进行尝试,比如逻辑回归、支持向量机、随机森林等。这里以逻辑回归为例。
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
model = LogisticRegression()
model.fit(X_train, y_train)
# 在测试集上评估模型
predictions = model.predict(X_test)
print(f'Accuracy: {accuracy_score(y_test, predictions):.2%}')
4. 模型优化
根据模型的表现,可能需要调整参数或选择不同的模型。这通常涉及到交叉验证、网格搜索等方法来寻找最佳参数组合。
from sklearn.model_selection import GridSearchCV
param_grid = {'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]}
grid_search = GridSearchCV(LogisticRegression(), param_grid, cv=5, scoring='accuracy')
grid_search.fit(X_train, y_train)
best_model = grid_search.best_estimator_
print(f'Best parameters: {grid_search.best_params_}')
print(f'Best cross-validation score: {grid_search.best_score_:.2%}')
# 重新评估最优模型
final_predictions = best_model.predict(X_test)
print(f'Final Accuracy: {accuracy_score(y_test, final_predictions):.2%}')
通过上述步骤,我们展示了如何从头开始创建一个简单的技术指标——简单移动平均线,并利用这个指标训练一个逻辑回归模型来预测股票价格的涨跌。这种结合了技术分析与量化分析的方法可以帮助投资者更好地理解市场动态,并制定出更加有效的交易策略。当然,在实际应用中还需要考虑更多的因素,如更复杂的技术指标、更多的特征工程以及模型的选择和调优等。
🌟 加入【技术图书分享与阅读笔记】,一起遨游知识的星海! 🌟
在这个快速变化的时代,技术日新月异,唯有不断学习才能保持竞争力。【技术图书分享与阅读笔记】是一个充满活力和热情的学习社区,我们专注于最新的技术趋势和技术图书,致力于为每一位成员提供一个持续成长和交流的平台。
在这里,你可以:
- 获取最新技术资讯:我们持续关注前沿技术动态,确保你不会错过任何重要的技术更新。
- 共同阅读最新技术图书:每月精选一本高质量的技术书籍,与志同道合的朋友一起阅读、讨论,共同进步。
- 分享学习笔记和心得:定期更新学习笔记和心得,帮助你更好地理解和吸收知识。
- 互动交流,共同成长:与来自各行各业的技术爱好者交流经验,互相激励,共同解决学习中的难题。
无论你是技术新手还是资深开发者,【技术图书分享与阅读笔记】都欢迎你的加入!让我们一起探索技术的奥秘,享受学习的乐趣,共同在知识的星海中遨游!