python股票分析挖掘预测技术指标知识之均线指标详解(6)

发布时间:2024年01月04日

本人股市多年的老韭菜,各种股票分析书籍,技术指标书籍阅历无数,萌发想法,何不自己开发个股票预测分析软件,选择python因为够强大,它提供了很多高效便捷的数据分析工具包。

我们已经初步的接触与学习其中数据分析中常见的3大利器---Numpy,Pandas,Matplotlib库。

也简单介绍一下数据获取的二种方法,通过金融数据接口和爬虫获取。

同时介绍了指标之王MACD,随机指标KDJ和BOLL指标线和量价指标的用法

这一章我们讲一下均线指标和经典蜡烛图买卖点:

(1)均线指标

(1)均线指标解释

又叫移动平均线,Moving Average,简称MA,MA是用统计分析的方法,将一定时期内的证券价格(指数)加以平均,并把不同时间的平均值连接起来,形成一根MA,用以观察证券价格变动趋势的一种技术指标。
移动平均线是由著名的美国投资专家Joseph E.Granville(葛兰碧,又译为格兰威尔)于20世纪中期提出来的。均线理论是当今应用最普遍的技术指标之一,它帮助交易者确认现有趋势、判断将出现的趋势、发现过度延生即将反转的趋势。
移动平均线 [1] 常用线有5天、10天、30天、60天、120天和240天的指标

(2)均线指标计算

N日移动平均线=N日收盘价之和/N?

比如;5日均线 = (收盘价1 + 收盘价2 + 收盘价3 + 收盘价4 + 收盘价5) / 5

详细代码
# !/usr/bin/env python
# coding=utf-8
import pandas
import pandas as pd
import matplotlib.pyplot as plt
from mpl_finance import candlestick2_ochl
from matplotlib.ticker import MultipleLocator
# 根据指定代码和时间范围获取股票数据
plt.rcParams['font.family'] = 'Heiti TC'
plt.rcParams['font.sans-serif'] = ['SimHei']
df = pd.read_csv('600271.csv',encoding='gbk',index_col=0)
# 设置窗口大小
fig, ax = plt.subplots(figsize=(10, 8))
xmajorLocator   = MultipleLocator(5)    # 将x轴主刻度设置为5的倍数
ax.xaxis.set_major_locator(xmajorLocator)
# 调用方法绘制K线图
candlestick2_ochl(ax = ax,
                  opens=df["open"].values, closes=df["close"].values,
                  highs=df["high"].values, lows=df["low"].values,
                  width=0.75, colorup='red', colordown='green')

df['close'].rolling(window=3).mean().plot(color="red",label='3日均线')
df['close'].rolling(window=5).mean().plot(color="blue",label='5日均线')
df['close'].rolling(window=10).mean().plot(color="green",label='10日均线')
plt.legend(loc='best')  # 绘制图例

ax.grid(True)           # 带网格线
plt.title("K线图")
plt.rcParams['font.sans-serif']=['SimHei']
plt.setp(plt.gca().get_xticklabels(), rotation=30)
plt.show()
显示效果:

?(3)葛兰碧均线八大买卖法则

1:均线从下降逐渐转头向上,股价从均线下方向上突破形成金叉,为买进信号。

2:股价在均线上运行,回调时未跌破均线,说明该均线形成十分可靠的支撑,其后股价又确实不再下跌而再度上涨时,是第二次买进时机。

3:股价之前在均线上运行,回调时发生死叉跌破均线,但均线仍呈上升趋势,说明整体还有一段涨幅,此时为买进时机。

4:股价在均线下运行,连续下跌,距离均线又较远,极有可能会向均线靠拢,所谓物极必反,此时是买进时机,但不宜期望过高。

5:股价在均线上运行,连日大涨,距离均线越来越远,极有可能会回靠均线,随时会产生获利回吐的卖压,是卖出时机。

6:均线总体向下,股价又再次向下跌破均线时说明卖压再次加重,是卖出时机。

7:股价在均线下运行,反弹时接近均线但未能成功向上突破,是卖出时机。

8:股价连续大涨多日,与均线拉开越来越大的距离,是卖出信号,代表了随时可能出现获利回吐卖出。

葛兰威尔均线买卖八大法则,实际上是道氏理论和艾略特波浪理论的图表化、具体化和标准化

(4)验证均线买点

python 代码

# !/usr/bin/env python
# coding=utf-8
import pandas as pd
# 从文件中读取数据
df = pd.read_csv('600276.csv',encoding='gbk')
maIntervalList = [3,5,10]
# 虽然在后文中只用到了5日均线,但这里演示设置3种均线
for maInterval in maIntervalList:
    df['MA_' + str(maInterval)] = df['close'].rolling(window=maInterval).mean()
cnt=0
while cnt<=len(df)-1:
    try:
        # 规则1:收盘价连续三天上扬
        if df.iloc[cnt]['close']<df.iloc[cnt+1]['close'] and df.iloc[cnt+1]['close']<df.iloc[cnt+2]['close']:
            # 规则2:5日均线连续三天上扬
            if df.iloc[cnt]['MA_5']<df.iloc[cnt+1]['MA_5'] and df.iloc[cnt+1]['MA_5']<df.iloc[cnt+2]['MA_5']:
                # 规则3:第3天收盘价上穿5日均线
                if df.iloc[cnt+1]['MA_5']>df.iloc[cnt]['close'] and df.iloc[cnt+2]['MA_5']<df.iloc[cnt+1]['close']:
                    print("Buy Point on:" + df.iloc[cnt]['cate'])
    except: # 有几天是没有5日均线的,所以用except处理异常
        pass
    cnt=cnt+1

(5)均线寻找卖点

# !/usr/bin/env python
# coding=utf-8
import pandas as pd
# 从文件中读取数据
df = pd.read_csv('600276.csv',encoding='gbk')
maIntervalList = [3,5,10]
# 虽然在后文中只用到了5日均线,但这里演示设置3种均线
for maInterval in maIntervalList:
    df['MA_' + str(maInterval)] = df['close'].rolling(window=maInterval).mean()
cnt=0
while cnt<=len(df)-1:
    try:
        # 规则1,收盘价连续三天下跌
        if df.iloc[cnt]['close']>df.iloc[cnt+1]['close'] and df.iloc[cnt+1]['close']>df.iloc[cnt+2]['close']:
            # 规则2,5日均线连续三天下跌
            if df.iloc[cnt]['MA_5']>df.iloc[cnt+1]['MA_5'] and df.iloc[cnt+1]['MA_5']>df.iloc[cnt+2]['MA_5']:
                #规则3,第3天收盘价下穿5日均线
                if df.iloc[cnt+1]['MA_5']<df.iloc[cnt]['close'] and df.iloc[cnt+2]['MA_5']>df.iloc[cnt+1]['Close']:
                    print("Sell Point on:" + df.iloc[cnt]['date'])
    except: # 有几天是没有5日均线的,所以用except处理异常
        pass
    cnt=cnt+1

?(6)短期均线上穿长期均线买入

短期均线上穿长期均线时,我们将其视为买入信号。在实际应用中,你可能需要结合其他技术指标和市场走势来进一步确认交易信号。

python代码

import pandas as pd  
import numpy as np  
  
# 假设我们已经有了一个包含日期和收盘价的数据框  
# 这里我们用随机数据生成一个示例数据框  
dates = pd.date_range(start='2023-01-01', periods=100)  
prices = np.random.randn(100).cumsum() + 100  # 随机价格数据  
df = pd.DataFrame({'Date': dates, 'Close': prices})  
  
# 设置移动平均线的周期  
short_window = 20  
long_window = 50  
  
# 计算短期和长期移动平均线  
df['Short_MA'] = df['Close'].rolling(window=short_window, min_periods=1, center=False).mean()  
df['Long_MA'] = df['Close'].rolling(window=long_window, min_periods=1, center=False).mean()  
  
# 创建一个空的“Signal”列,用于存储交易信号  
df['Signal'] = 0.0  
  
# 生成交易信号:当短期均线上穿长期均线时,产生买入信号  
df['Signal'][short_window:] = np.where(df['Short_MA'][short_window:] > df['Long_MA'][short_window:], 1.0, 0.0)  
  
# 输出结果  
print(df)

(7)短期均线下穿长期均线卖出

python代码:

import pandas as pd  
import numpy as np  
  
# 假设我们已经有了一个包含日期和收盘价的数据框  
# 这里我们用随机数据生成一个示例数据框  
dates = pd.date_range(start='2023-01-01', periods=100)  
prices = np.random.randn(100).cumsum() + 100  # 随机价格数据  
df = pd.DataFrame({'Date': dates, 'Close': prices})  
  
# 设置移动平均线的周期  
short_window = 20  
long_window = 50  
  
# 计算短期和长期移动平均线  
df['Short_MA'] = df['Close'].rolling(window=short_window, min_periods=1, center=False).mean()  
df['Long_MA'] = df['Close'].rolling(window=long_window, min_periods=1, center=False).mean()  
  
# 创建一个空的“Signal”列,用于存储交易信号  
df['Signal'] = 0.0  
  
# 生成交易信号:当短期均线下穿长期均线时,产生卖出信号  
df['Signal'][short_window:] = np.where(df['Short_MA'][short_window:] < df['Long_MA'][short_window:], -1.0, 0.0)  
  
# 输出结果  
print(df)

?注意:均线指标最好结合量价指标来进行买卖操作,这样判断更加准确

均线指标还有很多的买卖点,都是基于葛兰碧均线法则演变而来,大家有兴趣可以细细研究。

文章来源:https://blog.csdn.net/zhuweilong123/article/details/135380052
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。