# 示例代码:Python 量化交易中的简单移动平均线策略
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import yfinance as yf
# 下载股票数据
def download_data(ticker, start_date, end_date):
data = yf.download(ticker, start=start_date, end=end_date)
return data['Adj Close']
# 计算移动平均线
def calculate_moving_averages(data, short_window, long_window):
signals = pd.DataFrame(index=data.index)
signals['price'] = data
signals['short_mavg'] = data.rolling(window=short_window, min_periods=1, center=False).mean()
signals['long_mavg'] = data.rolling(window=long_window, min_periods=1, center=False).mean()
signals['signal'] = 0.0
signals['signal'][short_window:] = np.where(signals['short_mavg'][short_window:] > signals['long_mavg'][short_window:], 1.0, 0.0)
signals['positions'] = signals['signal'].diff()
return signals
# 绘制图表
def plot_signals(signals):
plt.figure(figsize=(12, 6))
plt.plot(signals['price'], label='Price', lw=2.)
plt.plot(signals['short_mavg'], label=f'Short {short_window} MA', lw=2., alpha=0.7)
plt.plot(signals['long_mavg'], label=f'Long {long_window} MA', lw=2., alpha=0.7)
# 绘制买入信号
plt.plot(signals[signals['positions'] == 1].index,
signals['short_mavg'][signals['positions'] == 1],
'^', markersize=10, color='g', lw=0, label='Buy Signal')
# 绘制卖出信号
plt.plot(signals[signals['positions'] == -1].index,
signals['short_mavg'][signals['positions'] == -1],
'v', markersize=10, color='r', lw=0, label='Sell Signal')
plt.legend(loc='best')
plt.show()
# 参数设置
ticker = 'AAPL'
start_date = '2020-01-01'
end_date = '2023-01-01'
short_window = 40
long_window = 100
# 获取数据并计算信号
data = download_data(ticker, start_date, end_date)
signals = calculate_moving_averages(data, short_window, long_window)
# 绘制结果
plot_signals(signals)
yfinance
库从雅虎财经下载指定股票的历史价格数据。matplotlib
库绘制股票价格、短期和长期移动平均线以及买卖信号。这段代码展示了如何使用 Python 实现一个简单的基于移动平均线的量化交易策略。
上一篇:python中//
下一篇:python pow函数
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站