python分析波动性 -股票量化

关键词:波动性, 量化

 

开发环境

编程语言: Python 3.6

必要包:tushare, pandas, Pywavelets, numpy

  • 波动性

波是扰动的传播。

波动率的主要原因:

  1、宏观经济影响,即所谓的系统风险;

  2、特定的事件对某个企业的冲击。

  3、投资者心理状态或预期的变化。

 

傅立叶变换是一种分析信号的方法,它可分析信号的成分,也可用这些成分合成信号。许多波形可作为信号的成分,比如正弦波、方波、锯齿波等,傅立叶变换用正弦波作为信号的成分。

函数的傅里叶级数可以写成:

python分析波动性 -股票量化_第1张图片

  • 脚本设计与实现

流程:

1. 从网络获取股票k线数据,并保存到excel文件

2. 把excel数据文件读到内存。

3. FFT分析,预测k线走势。

4.小波分析,提取k线的波动特征。

FFT分析


# 函数功能:将频域数据转换成时序数据
# bins为频域数据,n设置使用前多少个频域数据,loop设置生成数据的长度
def fft_combine(bins, n, loops=1):
    length = int(len(bins) * loops)
    data = np.zeros(length)
    index = loops * np.arange(0, length, 1.0) / length * (2 * np.pi)
    for k, p in enumerate(bins[:n]):
        if k != 0 : p *= 2 # 除去直流成分之外, 其余的系数都 * 2
        data += np.real(p) * np.cos(k*index) # 余弦成分的系数为实数部分
        data -= np.imag(p) * np.sin(k*index) # 正弦成分的系数为负的虚数部分
    return index, data
def analyze_fft(dataform1):
    print('\n ma5: %s ' % (dataform1.columns.values[7]))

    lines = dataform1.shape[0]
    # 生成随机数
    x = np.random.random(100)
    y = np.fft.fft(x)
    plt.subplot(2, 1, 1)
    # plt.plot(x)
    plt.plot(dataform1["ma5"])
    plt.xlabel('Time'), plt.ylabel('ma5')

    #dft_a = np.fft.fft(dataform1["ma5"])

    plt.subplot(2, 1, 2)
    """
    plt.plot(dft_a)
    #plt.plot(y)
    plt.xlabel('Freq (Hz)'), plt.ylabel(' ')
    plt.show()"""
    ts_log = np.log(dataform1["ma5"])
    #ts_log = dataform1["ma5"]
    #ts_diff = ts_log.diff(1)
    ts_diff = ts_log
    ts_diff = ts_diff.dropna()
    fy = np.fft.fft(ts_diff)
    conv1 = np.real(np.fft.ifft(fy))  # 逆变换
    index, conv2 = fft_combine(fy / len(ts_diff), int(len(fy) / 2 - 1), 1.3)
    ntotal = (len(ts_diff)/10 +2)*10

    plt.plot(ts_diff)
    plt.plot(conv1 - 0.5)
    plt.plot(conv2 - 1)
    plt.xticks(np.arange(1, ntotal, 5))
    plt.grid( )
    plt.show()
    return 0

使用数据

stockno = '603655'  #股票代码
csv_filepath1 = 'E:\shares\weixin\stock\\'+ stockno + '_k.csv'
date0 = '2019-01-15' #k线开始日期
date1 = '2019-04-25' #k线结束日期

python分析波动性 -股票量化_第2张图片

                                 图2

fft:预测图,通过正玄函数拟合k线5日均线,推测k线的走势。

python分析波动性 -股票量化_第3张图片

                                                         图3

使用数据点67个, 根据算法,预测第67到第86位置可能的数值。上图说明603655股价将一直下跌,3周后止跌筑底。

小波特征分析:

python分析波动性 -股票量化_第4张图片

图4

在A1图中,y数值被log平稳化,有8浪结构。 上升趋势浪1~浪5(L1~L5),下降趋势浪6~浪8(L6~L8)。

在高频细节D图中,标号1,2位置是异常位置。 查看k线图, 位置1,第59数据点有一个高开大阴线 异动。位置2, 第40到55数据点(D2图中),日期0315到日期0408区间是大振幅,第55数据点后振幅突然变小,股价开始下跌。

 

  • 总结:

在一波单边上涨或者盘整行情中,若波动率宽幅振荡,一旦其波动幅度突然变小,且这种变小倾向再得到1-2个交易日的确认,则一般可以认为是此波行情的结束。

过低的波动率则预示着市场将会在方向上做突破,或者向上,或者向下,通常和当时市场趋势相一致。放量必导致波动,地量无波动性。

 

脚本Astockfft.py下载路径:https://share.weiyun.com/5eBEBgq

 

 

 

 

 

 

 

 

你可能感兴趣的:(算法,web)