python股票量化交易(5)---股价跳空缺口

简介: python股票量化交易(5)---股价跳空缺口

什么是股价跳空缺口


跳空缺口存在与K线图之中,是指相邻的两根K线之间出现了没有交易的空白区间。当今日最低价与昨日最高价之间没有重合部分,称为向上缺口;当今日最高价与昨日最低价之间没有重叠部分,称为向下缺口。


理论上来说,当市场没有利好与利空消息之时,次日股价应该平开,但是如果前一日有利好出现,那么在当日集合竞价之时,多数投资者都会挂高价格进行买入,因为利好挂低价格可能买不到,这样就形成了一个向上的跳空高开。反之则是跳空低开。


这种留下的缺口对于判断后市的涨跌具有一定的参考价值。但需要注意的是,如果高开低走,跌倒昨日最高价之内,回补了这个空挡,只能叫跳空高开,不能叫缺口,缺口是指当日价格没有被反向回补。


不过,我们还需要注意,跳空缺口如果较小,可能对后市没有参考意义,而且在除权除息日也同样会出现跳空缺口,也不具有参考意义。当然,也有例外,比如比亚迪,如今也没回补50的缺口,单独看某个股票的单一数据是没有参考意义的,这一点需要额外的注意。


计算跳空值


前面我们都是以歌尔股份为例,分析各种股票的参数。今天,我们换一个股票,叫牧原股份,因为这个股票因为业绩的公布直接2个涨停到了99,如今又跌到了82,缺口很明显。


首先,我们来获取一下牧原股份近两个月的数据,具体代码如下:

df = ak.stock_zh_a_daily(symbol="sz002714", start_date="20201103", end_date="20210118",
                             adjust="qfq")
df.to_excel("牧原股份.xlsx")


接着,我们定义一个计算跳空值的函数,代码如下:

def count_gap(cPriceUp, preLow, preHigh, low, high, threshold):
    jump_value = 0
    if (cPriceUp > 0) and (low - preHigh) > threshold:
        # 向上跳空
        jump_value = (low - preHigh) / threshold
    elif (cPriceUp < 0) and (preLow - high) > threshold:
        # 向下跳空
        jump_value = (high - preLow) / threshold
    return jump_value


函数的参含含义如下:


cPriceUp:收盘价的涨幅


preLow:昨日最低价


preHigh:昨日最高价


low:最低价


high:最高价


threshold:跳空阈值


这个函数翻译成文字意思如下:


(1)向上跳空:当涨幅cPriceUp为正,且今日最低价(low)减去昨日最高价(preHigh)大于跳空阈值。


(2)向下跳空:当涨幅cPriceUp为负,且昨日最低价(preLow)减去今日最高价(high)大于跳空阈值。


遍历股票数据获取跳空缺口


首先,我们需要自定义一个阈值用于判断是否符合跳空缺口,代码如下:

jump_threshold = df["close"].median() * 0.01

这里定义收盘价的中位数*0.01作为阈值。


接着,套用公式计算出上面方法中的参数,具体代码如下所示:

jump_threshold = df["close"].median() * 0.01
# 计算涨跌幅
df['changeRatio'] = df["close"].pct_change() * 100
# 增加昨日最低价序列
df["preLow"] = df["low"].shift(1)
# 增加昨日最高价序列
df['preHigh'] = df['high'].shift(1)
# 增加空白列jump
df = df.assign(jump=0)
# 计算所有跳空值
df['jump'] = df.apply(
    lambda row: count_gap(row['changeRatio'], row['preLow'], row['preHigh'], row['low'], row['high'], jump_threshold),
    axis=1)


注释已经非常详细了,就是获取该股票所有的跳空缺口,并且赋值给jump列,而没有跳空值的jump被赋值为0。这里我们得到了所有的跳空缺口,接下来我们需要区分是向上跳空还是向下跳空。

# 向上跳空
up_jump = df[(df["cPriceUp"] > 0) & (df["jump"] > 0)]
# 向下跳空
down_jump = df[(df["cPriceUp"] < 0) & (df["jump"] < 0)]


如上面代码所示,只需要根据前文向上跳空概念以及向下跳空概念进行判断即可。


绘制跳空缺口


经过上面的代码运算,我们已经得到了跳空缺口。下面,我们就可以根据这些值来绘制K线图,并标记出跳空缺口的位置。完整代码如下所示:

import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.ticker as ticker
import mpl_finance as mpf
def count_gap(cPriceUp, preLow, preHigh, low, high, threshold):
    jump_value = 0
    if (cPriceUp > 0) and ((low - preHigh) > threshold):
        # 向上跳空
        jump_value = (low - preHigh) / threshold
    elif (cPriceUp < 0) and ((preLow - high) > threshold):
        # 向下跳空
        jump_value = (high - preLow) / threshold
    return jump_value
df = pd.read_excel("牧原股份.xlsx")
df['date'] = pd.to_datetime(df['date'])
df['date'] = df['date'].apply(lambda x: x.strftime('%Y-%m-%d'))
jump_threshold = df["close"].median() * 0.01
# 计算涨跌幅
df['cPriceUp'] = df["close"].pct_change() * 100
# 增加昨日最低价序列
df["preLow"] = df["low"].shift(1)
# 增加昨日最高价序列
df['preHigh'] = df['high'].shift(1)
# 增加空白列jump
df = df.assign(jump=0)
# 计算所有跳空值
df['jump'] = df.apply(
    lambda row: count_gap(row['cPriceUp'], row['preLow'], row['preHigh'], row['low'], row['high'], jump_threshold),
    axis=1)
# 向上跳空
up_jump = df[(df["cPriceUp"] > 0) & (df["jump"] > 0)]
# 向下跳空
down_jump = df[(df["cPriceUp"] < 0) & (df["jump"] < 0)]
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111)
plt.rcParams['font.sans-serif'] = ['SimHei']
#绘制K线图
mpf.candlestick2_ochl(ax, df["open"], df["close"], df["high"], df["low"], width=0.6, colorup='r',
                          colordown='green',
                          alpha=1.0)
#绘制向下跳空与向上跳空缺口指标
for key, val in df.items():
    for index, today in up_jump.iterrows():
        x_posit = df.index.get_loc(index)
        ax.annotate("{}\n{}".format("向上跳空", today["date"]), xy=(x_posit, today["preHigh"]),
                    xytext=(-30, -up_jump["close"].mean() *0.5), xycoords="data",
                    fontsize=18, textcoords="offset points", arrowprops=dict(arrowstyle="simple", color="r"))
for key, val in df.items():
    for index, today in down_jump.iterrows():
        x_posit = df.index.get_loc(index)
        ax.annotate("{}\n{}".format("向下跳空", today["date"]), xy=(x_posit, today["preLow"]),
                    xytext=(-30, down_jump["close"].mean() *0.5), xycoords="data",
                    fontsize=18, textcoords="offset points", arrowprops=dict(arrowstyle="simple", color="r"))
ax.xaxis.set_major_locator(ticker.MaxNLocator(20))
def format_date(x, pos=None):
    if x < 0 or x > len(df['date']) - 1:
        return ''
    return df['date'][int(x)]
ax.xaxis.set_major_formatter(ticker.FuncFormatter(format_date))
plt.setp(plt.gca().get_xticklabels(), rotation=45, horizontalalignment='right')


运行之后,得到的效果如下图所示:

前面我们提到了比亚迪,至今没有回补50的缺口,对于这样的股票怎么办呢?其实很简单,你设置一个筛选条件,上涨超过多少,忽略其跳空缺口。像比亚迪这种一般来说肯定回不去了,那么大于一定涨幅,就不要记录缺口了。

相关文章
|
15天前
|
数据挖掘 Python
【视频】随机波动率SV模型原理和Python对标普SP500股票指数预测|数据分享
【视频】随机波动率SV模型原理和Python对标普SP500股票指数预测|数据分享
|
10天前
|
机器学习/深度学习 数据采集 算法
【Python机器学习专栏】使用机器学习预测股票价格
【4月更文挑战第30天】本文探讨了使用Python和机器学习预测股票价格的方法,包括数据收集(如开盘价、收盘价等)、预处理(缺失值填充、异常值处理、标准化)、特征选择(技术指标、基本面指标、市场情绪)和工程、模型选择(线性回归、SVM、神经网络等)、训练与调优。模型评估涉及准确率、召回率等指标,并强调实际应用中需考虑多种因素,未来研究可探索深度学习的应用及数据质量与安全。
|
10天前
|
数据可视化 数据处理 索引
Python用GARCH对ADBL股票价格时间序列趋势滚动预测、损失、可视化分析
Python用GARCH对ADBL股票价格时间序列趋势滚动预测、损失、可视化分析
|
11天前
|
机器学习/深度学习 数据可视化 TensorFlow
Python中TensorFlow的长短期记忆神经网络(LSTM)、指数移动平均法预测股票市场和可视化
Python中TensorFlow的长短期记忆神经网络(LSTM)、指数移动平均法预测股票市场和可视化
|
14天前
|
Python
python实现股票策略回测案例
此Python代码演示了一个简单的股票策略回测,使用yfinance库获取AAPL股票2020年至2022年的数据。它计算每日收益率,并基于前一日收益率决定买卖:正则买入,负则卖出。通过模拟交易更新现金和股票余额,最终计算总收益。请注意,此示例未涵盖交易费用、滑点、风险管理等实际交易因素。
23 0
|
14天前
|
Python
python实现股票均线策略案例
此Python代码示例展示了如何运用均线策略进行股票交易模拟。它下载AAPL的股票历史数据,计算每日收益率,设置短期和长期移动平均线。当短期均线超过长期均线时,模拟买入;反之则卖出。代码遍历每一天,更新现金和股票余额,并最终计算总收益。请注意,实际交易需考虑更多因素如交易费用和风险管理。
25 2
|
15天前
|
机器学习/深度学习 测试技术 TensorFlow
PYTHON用RNN神经网络LSTM优化EMD经验模态分解交易策略分析股票价格MACD
PYTHON用RNN神经网络LSTM优化EMD经验模态分解交易策略分析股票价格MACD
|
16天前
|
Python
Python计算股票投资组合的风险价值(VaR)
Python计算股票投资组合的风险价值(VaR)
|
17天前
|
数据可视化 Python Windows
PYTHON 用几何布朗运动模型和蒙特卡罗MONTE CARLO随机过程模拟股票价格可视化分析耐克NKE股价时间序列数据
PYTHON 用几何布朗运动模型和蒙特卡罗MONTE CARLO随机过程模拟股票价格可视化分析耐克NKE股价时间序列数据
|
17天前
|
vr&ar Python
Python 用ARIMA、GARCH模型预测分析股票市场收益率时间序列(下)
Python 用ARIMA、GARCH模型预测分析股票市场收益率时间序列