自己做量化交易软件(29)小白量化实战3–跨周期共振
在第一次世界大战中,一队德国士兵迈着整齐的步伐,通过一座桥,结果把桥踩塌。就桥梁的本身负载能力而言,远远大过这队德国士兵的重量,但由于士兵步调整齐、节奏一致,结果大桥在这种齐力的作用下而倒塌,这就是共振的作用。
共振是物理学上的一个运用频率非常高的专业术语。共振在声学中亦称“共鸣”,它指的是物体因共振而发声的现象,如两个频率相同的音叉靠近,其中一个振动发声时,另一个也会发声。在电学中,振荡电路的共振现象称为“谐振”。
共振不仅在物理学上运用频率非常高,而且,共振现象也可以说是一种宇宙间最普遍和最频繁的自然现象之一。甚至可以这么说,没有共振就没有世界。
共振是宇宙间一切物质运动的一种普遍规律,人及其他的生物也是宇宙间的物质,当然共振也是普遍存在于这些生命中了。人除了呼吸、心跳、血液循环和说话等都有其固有频率外,人的大脑进行思维活动时产生的脑电波也会发生共振现象。
自然界中有的共振现象, 股票市场中也同样有共振。
回顾历史走势,可以发现:股票走势经常大起大伏,一旦从低位启动,产生向上突破,股价如脱缰的野马奔腾向上;而一旦从高位产生向下突破,股价又如决堤的江水一泻千里。这就是共振作用在股市之中的反映。
共需可以产生势,而这种势一旦产生,向上向下的威力都极大。它能引发人们的情绪和操作行为,产生一边倒的情况。向上时人们情绪高昂,蜂拥入市;向下时,人人恐慌,股价狂泻,如同遇到世界末日,江恩称之为价格崩溃。
荷蒲的很多指标之所以好用,完全依赖于共振思想设计指标,简单的几根线,包含了不同指标的精华。因此十多年来,总有人喜欢破解荷蒲的公式,探究其中的原理。
最简单的共振应用就是垮周期应用,我们举例在通达信软件上做跨周期指标.
例如日线KDJ引用周线KDJ自定义指标,指标内容如下:
N:=9;
M1:=3;
M2:=3;
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:SMA(RSV,M1,1);
D:=SMA(K,M2,1);
J:3*K-2*D;
{
下面是周KDJ指标的引用。}
ZK:"KDJ.K#WEEK"(N,M1,M2),LINETHICK3;
ZD:"KDJ.D#WEEK"(N,M1,M2),LINETHICK3;
ZJ:="KDJ.J#WEEK"(N,M1,M2);
下面我们在Python上看怎么实现跨周期计算.
例如1分钟线引用5分钟线或指标.
1.先处理5分钟指标计算,例如读取100组数据 mydf5
计算指标得到5分钟的kdj数据.k5,d5,j5
2.读取1分钟的500组数据.mydf
进行指标计算
3.把5分钟指标值k5,d5,j5,数据放到5倍,变为500组数据.
4.把k5,d5,j5合并到mydf表中
5.后面想怎么处理计算都可以
我们下面程序给出日线KDJ引用周线KDJ的Python序.
# -*- coding: utf-8 -*-
# 小白量化跨周期自编指标计算
'''
独狼荷蒲qq:2886002
通通小白python量化群:524949939
tkinter,pyqt,gui,Python交流2群:517029284
微信公众号:独狼股票分析
'''
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import HP_global as g #小白量化全局变量库
from HP_formula import *
import HP_tdx as htdx
import HP_plt as hplt #小白量化指标绘图模块
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
#白底色
g.ubg='w'
g.ufg='b'
g.utg='b'
g.uvg='#1E90FF'
#列表扩展
def Listexpand(List,n):
Lista=[]
for x in List:
for i in range(n):
Lista.append(x)
return Lista
global CLOSE,LOW,HIGH,OPEN,VOL
def KDJ(N=9, M1=3, M2=3):
"""
KDJ 随机指标
"""
RSV = (CLOSE - LLV(LOW, N)) / (HHV(HIGH, N) - LLV(LOW, N)) * 100
K = EMA(RSV, (M1 * 2 - 1))
D = EMA(K, (M2 * 2 - 1))
J = K * 3 - D * 2
return K, D, J
#首先要对数据预处理
#获取数据
htdx.TdxInit(ip='183.60.224.178',port=7709)
code='600436'
#nCategory -> K 线种类
#0 5 分钟K 线
#1 15 分钟K 线
#2 30 分钟K 线
#3 1 小时K 线
#4 日K 线
#5 周K 线
#6 月K 线
#7 1 分钟
#8 1 分钟K 线
#9 日K 线
#10 季K 线
#11 年K 线
#获取周线数据
df = htdx. get_security_bars(nCategory=5,nMarket = 0,code=code,nStart=0, nCount=100)
#对数据做小白量化各式转换
mydf=df.copy()
CLOSE=mydf['close']
LOW=mydf['low']
HIGH=mydf['high']
OPEN=mydf['open']
VOL=mydf['volume']
C=mydf['close']
L=mydf['low']
H=mydf['high']
O=mydf['open']
V=mydf['volume']
k5,d5,j5=KDJ() #周线指标计算
#获取日线数据
df = htdx. get_security_bars(nCategory=4,nMarket = 0,code=code,nStart=0, nCount=500)
#对数据做小白量化各式转换
mydf=df.copy()
CLOSE=mydf['close']
LOW=mydf['low']
HIGH=mydf['high']
OPEN=mydf['open']
VOL=mydf['volume']
C=mydf['close']
L=mydf['low']
H=mydf['high']
O=mydf['open']
V=mydf['volume']
k,d,j=KDJ() #日线指标计算
#把指标值添加到mydf数据表中
mydf['k']=k
mydf['d']=d
mydf['j']=j
#把周线数据放大5倍,保存到日线数据表中
mydf['k5']=pd.Series(Listexpand(list(k5),5))
mydf['d5']=pd.Series(Listexpand(list(d5),5))
mydf['j5']=pd.Series(Listexpand(list(j5),5))
#输入水平线20,50,80
mydf['z20']=20
mydf['z50']=50
mydf['z80']=80
#数据裁减
m=1
mydf=mydf.tail(150*m).head(150).copy()
#绘制图形
plt.figure(1,figsize=(16,12), dpi=80)
#绘制主图指标
ax1=plt.subplot(211)
hplt.ax_K(ax1,mydf,t=code,n=6)
#绘制副图指标
ax2=plt.subplot(212)
mydf['k'].plot.line(legend=True,linewidth=3)
#mydf['d'].plot.line(legend=True,linewidth=3)
mydf['j'].plot.line(legend=True,linewidth=3)
mydf['k5'].plot.line(legend=True,color='blue')
mydf['d5'].plot.line(legend=True,)
#mydf['j5'].plot.line(legend=True)
mydf['z20'].plot.line(legend=False,color='red')
mydf['z50'].plot.line(legend=False,color='red')
mydf['z80'].plot.line(legend=False,color='red')
plt.show()
程序运行结果如下:
本篇介绍了不同周期指标计算的合并显示问题,当然我们也可以进行跨周期计算.通过上图我们明显发现,日线k值在数值40以下上穿周KDJ的k5值,是不错的中线买点,我们的买点指标要怎么描述呢?
#小白量化仿通达信指标计算
mydf['buy']=IF(k<40,CROSS(k,k5),0)
如果 mydf.buy值为1,说明出现买点,否则值为0。后面再介绍如何用这个信号回测和自动交易。
本篇文章技术知识介绍结束。
如果你想学指标编写,包括C++编写大智慧指标,参考书籍《看盘秘籍》。
如果你想学量化软件开发或自动交易,参考书籍《零基础搭建量化投资系统――以Python为工具》。
我的读者说,我的博客明显拉低了量化开发的技术难度,量化交易师要白菜价了吗?
请持续关注我的博客,我的进步,就是你的进步!