关键词:波动性, 量化
开发环境
编程语言: Python 3.6
必要包:tushare, pandas, Pywavelets, numpy
- 波动性
波是扰动的传播。
波动率的主要原因:
1、宏观经济影响,即所谓的系统风险;
2、特定的事件对某个企业的冲击。
3、投资者心理状态或预期的变化。
傅立叶变换是一种分析信号的方法,它可分析信号的成分,也可用这些成分合成信号。许多波形可作为信号的成分,比如正弦波、方波、锯齿波等,傅立叶变换用正弦波作为信号的成分。
函数的傅里叶级数可以写成:
- 脚本设计与实现
流程:
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线结束日期
图2
fft:预测图,通过正玄函数拟合k线5日均线,推测k线的走势。
图3
使用数据点67个, 根据算法,预测第67到第86位置可能的数值。上图说明603655股价将一直下跌,3周后止跌筑底。
小波特征分析:
图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