要使用Python分析股票走势图,你通常需要做几个步骤:收集数据、处理数据、可视化分析以及执行某些形式的技术分析。以下是一个基本流程和代码示例,使用Pandas进行数据处理和Matplotlib进行图形绘制。
收集数据:
- 可以利用一些库如
yfinance
来获取雅虎金融上的股票数据。 - 处理数据:
- 使用
pandas
库来组织数据,比如计算移动平均线等。 - 可视化:
- 使用
matplotlib
或plotly
之类的库绘制股票走势图。 - 技术分析:
- 可以计算各种技术指标,如RSI(相对强弱指数)、MACD(移动平均收敛发散)等。
以下是使用yfinance
和matplotlib
绘制股票价格及其移动平均线的示例代码:
import yfinance as yf
import matplotlib.pyplot as plt
import pandas as pd
# 下载股票数据
ticker = 'AAPL' # 以苹果公司为例
data = yf.download(ticker, start='2022-01-01', end='2023-01-01')
# 计算移动平均
data['SMA_50'] = data['Close'].rolling(window=50).mean() # 短期50天移动平均
data['SMA_200'] = data['Close'].rolling(window=200).mean() # 长期200天移动平均
# 绘制股票价格及移动平均线
plt.figure(figsize=(14,7))
plt.plot(data['Close'], label='Closing Price') # 绘制收盘价
plt.plot(data['SMA_50'], label='50-Day SMA') # 绘制50天移动平均线
plt.plot(data['SMA_200'], label='200-Day SMA') # 绘制200天移动平均线
# 添加标题和标签
plt.title('Stock Price with Moving Averages')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.show()
上述代码将会生成一个股票的收盘价走势图,并在同一图表中显示50天和200天的移动平均线。接下来我们将开始进行技术分析,要进行更深入的股票分析,你可以引入更多的技术分析指标。下面会介绍如何使用Python添加几个流行的技术分析工具:相对强弱指数(RSI)、移动平均收敛发散(MACD)、布林带(Bollinger Bands)。
import yfinance as yf
import pandas as pd
import mplfinance as mpf
# 下载股票数据
ticker = 'AAPL' # 以苹果公司为例
data = yf.download(ticker, start='2022-01-01', end='2023-01-01')
# 计算RSI
def compute_rsi(data, window=14):
delta = data.diff()
gain = (delta.where(delta > 0, 0)).rolling(window=window).mean()
loss = (-delta.where(delta < 0, 0)).rolling(window=window).mean()
rs = gain / loss
rsi = 100 - (100 / (1 + rs))
return rsi
data['RSI'] = compute_rsi(data['Close'])
# 计算MACD
def compute_macd(data, span1=12, span2=26, signal=9):
exp1 = data.ewm(span=span1, adjust=False).mean()
exp2 = data.ewm(span=span2, adjust=False).mean()
macd = exp1 - exp2
signal_line = macd.ewm(span=signal, adjust=False).mean()
return macd, signal_line
data['MACD'], data['Signal_Line'] = compute_macd(data['Close'])
# 计算布林带
def compute_bollinger_bands(data, window=20, no_of_std=2):
rolling_mean = data['Close'].rolling(window=window).mean()
rolling_std = data['Close'].rolling(window=window).std()
upper_band = rolling_mean + (rolling_std * no_of_std)
lower_band = rolling_mean - (rolling_std * no_of_std)
return upper_band, lower_band
data['Upper_Band'], data['Lower_Band'] = compute_bollinger_bands(data)
# 使用mplfinance绘制图表
apds = [mpf.make_addplot(data['RSI'], panel=2, color='orange', title="RSI"),
mpf.make_addplot(data['MACD'], panel=3, color='blue', secondary_y=False),
mpf.make_addplot(data['Signal_Line'], panel=3, color='red', secondary_y=False),
mpf.make_addplot(data['Upper_Band'], color='green'),
mpf.make_addplot(data['Lower_Band'], color='green')]
mpf.plot(data, type='candle', addplot=apds, volume=True, figratio=(12,8), figscale=1.2, title=f'{ticker} Stock Analysis', style='yahoo')
- 使用
yfinance
库获取AAPL股票的历史数据。 - 定义函数计算RSI,基于股价的变动率来衡量股票的超买或超卖情况。
- 定义函数计算MACD,通过观察短期和长期价格趋势的差异来识别趋势变化。
- 定义函数计算布林带,该指标由一个中心线和两个价格通道组成,帮助分析股价的波动性和可能的突破点。
- 使用
mplfinance
库以蜡烛图形式绘制股价,并添加相对应的技术分析指标到图表中。
在基本的技术分析基础上,可以创建更复杂的交易策略。这些策略通常涉及多个指标的组合,以及对市场行为的定义规则。下面是一个简单的策略示例,它结合了移动平均线、RSI和MACD指标。
- 移动平均线交叉:
- 当短期移动平均线(如50天)从下方穿越长期移动平均线(如200天),这可能是一个购买信号。
- 相反,当短期移动平均线从上方穿越长期移动平均线,这可能是一个卖出信号。
- RSI:
- 如果RSI低于30,股票可能被超卖,这可能是一个购买信号。
- 如果RSI高于70,股票可能被超买,这可能是一个卖出信号。
- MACD:
- 当MACD线(快线)从下方穿越信号线(慢线),这可能是一个购买信号。
- 当MACD线从上方穿越信号线,这可能是一个卖出信号。
我们可以将这些规则结合起来创建一个简单的策略:
# 根据移动平均线交叉编写策略
def ma_crossover_strategy(data):
buy_signals = []
sell_signals = []
flag = -1 # 表示趋势状态,-1为无持仓,1为已持仓
for i in range(len(data)):
if data['SMA_50'][i] > data['SMA_200'][i] and flag != 1:
buy_signals.append(data['Close'][i])
sell_signals.append(float('nan'))
flag = 1
elif data['SMA_50'][i] < data['SMA_200'][i] and flag != -1:
sell_signals.append(data['Close'][i])
buy_signals.append(float('nan'))
flag = -1
else:
buy_signals.append(float('nan'))
sell_signals.append(float('nan'))
return buy_signals, sell_signals
data['Buy'], data['Sell'] = ma_crossover_strategy(data)
# 制定买卖决策
data['Buy_Signal'] = (data['RSI'] < 30) & (data['MACD'] > data['Signal_Line'])
data['Sell_Signal'] = (data['RSI'] > 70) & (data['MACD'] < data['Signal_Line'])
在这个策略中,我们使用了移动平均线的金叉和死叉作为主要的买入和卖出信号,并结合RSI和MACD作为进一步确认。这样的策略可以增加信号的可靠性,但同时也可能减少交易机会。
在实际应用中,你需要根据个人风格、风险承受能力和市场环境来调整和优化这些策略。常见的优化方法包括参数调优、回测、前向测试和其他统计分析方法。任何策略在实际交易之前都应该经过充分的测试,且要意识到历史表现不代表未来结果。此外,策略的实盘执行还需要考虑到交易成本、滑点、资金管理等因素。