python数据分析-价托模型上

1,613 阅读4分钟

「这是我参与 2022 首次更文挑战的第 16 天,活动详情查看:2022 首次更文挑战

劳而不伐,有功而不德,厚之至也。

前言

在前文中已经获取到了股票的 k 线数据,今天我们就用 python 建立一个简单的分析模型,从技术分析的角度来选择市场较好的股票标的,也算是实战一把。

模型建立

在股票的技术分析中,有一个选股技术称之为价托。顾名思义,就是股票的 k 线在上涨或者下跌过程中形成的一个技术形态,在均线比较发散且成交量逐渐放大的佐证下,成功概率就比较高。

上升形态价托

名词解释:

  • 均线,就是股票在近几天内的平均收盘价格,5 日线即是最近 5 天内的成交均价,10 日线即是 10 日内的成交均价。
  • 价托,分为上涨形态和下跌形态两种,上涨形态可以买入,下跌形态需要卖出,成功概率比较高。以上升形态为例,如上图所示,在 1 点 5 日线上穿 10 日均线,随后在 2 点上穿 20 日均线,然后 10 日线在 3 点上穿 20 日均线,即是标准的上升价托形态,下跌的形态与之相反,把上图倒过来看即可得到下图。 下跌形态价托

这个模型已经说明白了,那么怎么使用数学表达式来做表达,然后使用 python 进行建模呢?以下就是几个条件:

  • 1 必须严格按照时间的发生顺序, 先 1 后 2 然后是 3。
  • 2 为了遵循均线发散的原则,选择 3 点必须高于 1 点 3%,不要问为什么,因为我觉得这是个神奇的数字。最后是 3 点高于 2 点,并且 2 点并高于 1 点。
  • 3 为了保证数据的实效性,1 点和 2 点以及 2 点和 3 点之间的间距不超过 7 个单位,也就是 5 天,一般价托在半个月内就可以产生.
  • 4 为了保证数据的有效性,只进行计算最近两个月的数据,寻找半年前的数据就没有意义了。

由于计算的数据均线都是一个个的点,并不能准确的得出其交汇的数据点,因此,我们判断两条均线是否交叉的方式也很简单,就是:

# 5日线上穿10日线判断条件
ma5[i] < ma10[i] && ma5[i] > ma10[i]
# 5日线下穿10日线判断条件
ma5[i] > ma10[i] && ma5[i] < ma10[i]

这里也解释一下为什么之前判断的两点间距离是 7,正常的话 5 就够了,因为要判断交叉的点,所以将数据间隔拉大,设置为 7。

均线计算

在建立模型前,需要先计算均线,才能进行模型的建立,均线计算有专门的类库来进行计算,这个就是 talib,这个均线

# 传入收盘价和计算周期就可以计算均线值
ma5 = talib.SMA(closes, timeperiod=5)
# 也可以根据 MA 函数进行计算,参数分别为收盘价,计算周期以及均线类型
#MA_Type: 0=SMA, 1=EMA, 2=WMA, 3=DEMA, 4=TEMA, 5=TRIMA, 
# 6=KAMA, 7=MAMA, 8=T3 (Default=SMA)
# 默认采用简单移动平均 SMA
sma=talib.MA(closed, timeperiod=5, matype=0)

具体的代码如下:

    # 查询数据并进行计算,其接口还获取股票的k线的方式
    line_list = kline.query_k_line("600690")
    # 设置变量存放收盘价和日期集合
    close_list, date_list = [], []
    for node in line_list:
        # 收盘价信息是第3个,对其格式进行转换 
        clos = float(node.split(",")[2])
        close_list.append(clos)
        date_list.append(node.split(",")[0])
    closes = pd.Series(close_list)
    # 函数方法使用 SMA ,传入的参数是 Series ,不接受list 
    ma5 = talib.SMA(closes, timeperiod=5)

关于 talib 的安装,需要花费一点儿时间,这个是专门为股票金融数据计算而设计的,具体的安装步骤参见一下连接,这里就不在讲述了:

# 安装步骤说明
https://blog.csdn.net/feixuedongji/article/details/82796381
# 安装依赖下载地址
https://www.lfd.uci.edu/~gohlke/pythonlibs/

总结

本文讲述了模型的理论知识以及计算均线的方法,由于建模的内容较多,会在下一节中专门进行讲解,感兴趣的同学可以根据自己的理解先行尝试。