python金融分析(一)股票走势分析

要使用Python分析股票走势图,你通常需要做几个步骤:收集数据、处理数据、可视化分析以及执行某些形式的技术分析。以下是一个基本流程和代码示例,使用Pandas进行数据处理和Matplotlib进行图形绘制。

    收集数据

  • 可以利用一些库如yfinance来获取雅虎金融上的股票数据。
  • 处理数据
  • 使用pandas库来组织数据,比如计算移动平均线等。
  • 可视化
  • 使用matplotlibplotly之类的库绘制股票走势图。
  • 技术分析
  • 可以计算各种技术指标,如RSI(相对强弱指数)、MACD(移动平均收敛发散)等。

以下是使用yfinancematplotlib绘制股票价格及其移动平均线的示例代码:

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指标。

  1. 移动平均线交叉
  • 当短期移动平均线(如50天)从下方穿越长期移动平均线(如200天),这可能是一个购买信号。
  • 相反,当短期移动平均线从上方穿越长期移动平均线,这可能是一个卖出信号。
  1. RSI
  • 如果RSI低于30,股票可能被超卖,这可能是一个购买信号。
  • 如果RSI高于70,股票可能被超买,这可能是一个卖出信号。
  1. 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作为进一步确认。这样的策略可以增加信号的可靠性,但同时也可能减少交易机会。

在实际应用中,你需要根据个人风格、风险承受能力和市场环境来调整和优化这些策略。常见的优化方法包括参数调优、回测、前向测试和其他统计分析方法。任何策略在实际交易之前都应该经过充分的测试,且要意识到历史表现不代表未来结果。此外,策略的实盘执行还需要考虑到交易成本、滑点、资金管理等因素。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值