自己做量化交易软件(30)小白量化实战4--动于阴末止于阳极

116 篇文章 46 订阅
115 篇文章 108 订阅

自己做量化交易软件(30)小白量化实战4–动于阴末止于阳极
  在讲本章之前,我先讲一个小故事。
  战国时,有个人乘船渡江,他上船时佩带的剑掉到了江里,他马上在船舷上刻了一个记号,然后从刻下记号的地方跳进水里去找自己的剑,很快找到了那把剑。
  又有一次,这个人乘船渡江,到了江中间时,他佩带的剑又掉到了江里,他马上在船舷上刻了一个记号,船靠岸之后,他立即从刻下记号的地方跳进水里去找自己的剑,结果当然是找不到的剑了。
  你们知道他为什么没找到自己的剑吗?
  你们肯到说出了种种理由。对于优秀的程序开发者来说,我们不能只看表象,要抓住事物的本质。核心问题就是对各种现象进行抽象,然后进行数字化。
  假定找剑是买股,记号是技术选股。那么他这种分析方式在技术分析中称为“引用未来数据”,其结果是数据不准确,信号随行情而波动变化。
  这种分析看起来历史上买卖点都很准确,100%的成功率,实战中的结果不确定,准或不准。
  我们通过介绍20年前我设计的“快刀”指标,这个指标应用了带未来数据的函数 之字转向函数zig,不清楚迷倒了多少投资者。我设计这个指标目的,希望尽快找到行情转折点,以及数浪,不能作为交易参考。
  我现在介绍这个指标不是让你们去骗人,这里主要是教大家如何在大智慧和通达信软件指标图上标记买卖箭头和标注文字,最后以及如何用Python来实现相应的功能。
  是不是感觉我们快用Python开发出Python版通达信软件了呢?
  首先看大智慧公式–快刀主图。

牛熊线:EMA(CLOSE,120),COLORYELLOW,LINETHICK3;
ZZ:=ZIG(3,10);:=IF(ZZ>REF(ZZ,1),1,0) AND IF(REF(ZZ,1)<REF(ZZ,2),1,0);:=IF(ZZ<REF(ZZ,1),1,0) AND IF(REF(ZZ,1)>REF(ZZ,2),1,0);
DRAWICON(,LOW*0.99,7);
DRAWICON(,HIGH*1.01,8);
DRAWTEXT(,LOW*0.985,'   买');
DRAWTEXT(,HIGH*1.015,'   卖');

公式显示图上标记了箭头和输出买卖文字。
在这里插入图片描述
  接着看大智慧公式–快刀副图。

ZZ:=ZIG(3,10);:IF(ZZ>REF(ZZ,1),1,0) AND IF(REF(ZZ,1)<REF(ZZ,2),1,0);:IF(ZZ<REF(ZZ,1),1,0) AND IF(REF(ZZ,1)>REF(ZZ,2),1,0);

在这里插入图片描述
  下来看看通达信公式–快刀主图指标。

牛熊线:EMA(CLOSE,120),COLORYELLOW,LINETHICK3;
ZZ:=ZIG(3,10);:=IF(ZZ>REF(ZZ,1),1,0) AND IF(REF(ZZ,1)<REF(ZZ,2),1,0);:=IF(ZZ<REF(ZZ,1),1,0) AND IF(REF(ZZ,1)>REF(ZZ,2),1,0);
DRAWICON(,LOW*0.99,1);
DRAWICON(,HIGH*1.01,2);
DRAWTEXT(,LOW*0.985,'  买');
DRAWTEXT(,HIGH*1.015,'  卖');

在这里插入图片描述
在这里插入图片描述
  通达信公式–快刀副图与大智慧公式–快刀副图的内容相同。
  下面我们看看如何在Python中实现类似的功能,在K线图中标记出箭头和文字信息。

# -*- 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'

global CLOSE,LOW,HIGH,OPEN,VOL

#ZIG(K,N),当价格变化量超过N%时转向,K表示0:开盘价,1:最高价,2:最低价,3:收盘价

#自动定义指标--快刀指标
def UDF():
    牛熊线=EMA(CLOSE,120)
    ZZ=ZIG(CLOSE,10)=IF(ZZ>REF(ZZ,1),1,0) * IF(REF(ZZ,1)<REF(ZZ,2),1,0)=IF(ZZ<REF(ZZ,1),1,0) * IF(REF(ZZ,1)>REF(ZZ,2),1,0)
    return 牛熊线,,,ZZ

#首先要对数据预处理
#获取数据
htdx.TdxInit(ip='183.60.224.178',port=7709)
code='600189'
name='泉阳泉'
df = htdx. get_security_bars(nCategory=4,nMarket = 0,code=code)

#对数据做小白量化各式转换
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']


#调用自定义指标
nxx,buy,sell,zz=UDF()

#把指标值添加到mydf数据表中
mydf['nxx']=nxx
mydf['buy']=buy
mydf['sell']=sell

#数据裁减
m=1
mydf=mydf.tail(150*m).head(150).copy()
mydf=mydf.reset_index(level=None, drop=True ,col_level=0, col_fill='')  

#绘制图形
plt.figure(1,figsize=(16,12), dpi=80)

#绘制主图指标
ax1=plt.subplot(211)
hplt.ax_K(ax1,mydf,t=code+' '+name,n=0)
mydf['nxx'].plot.line(legend=True,color='blue',linewidth=3)
ax1.grid(True, color='r')

##显示买点
B= list(mydf['buy'])
for j in range(len(B)):
    if B[j] > 0:
        ax1.annotate(u"买", xy=(j, \
                 mydf['low'][j]*0.989),\
                 xytext=(j,mydf['low'][j]*0.75),\
                 arrowprops=dict(facecolor='red', shrink=0.1))


##显示卖点
S= list(mydf['sell'])    
for j in range(len(S)):
    if S[j] > 0:
        ax1.annotate(u"卖", xy=(j, \
                 mydf['high'][j]*1.01),\
                 xytext=(j,mydf['high'][j]*1.16),\
                 arrowprops=dict(facecolor='blue', shrink=0.1))
    
#绘制副图指标
ax2=plt.subplot(212)
mydf['buy'].plot.line(legend=True,color='red',linewidth=1)
mydf['sell'].plot.line(legend=True,color='blue',linewidth=1)
ax2.grid(True, color='r')

plt.show()

程序运行结果如下:
在这里插入图片描述
  我们是不是在图形中标记出了箭头和买卖点呢?
从股票软件界面上来说?如果你有行情,就能用Python仿做出来大智慧、通达信、MT5等软件。
后面文章我们主要介绍仿通达信和大智慧指标选股,自动交易的量化程序。如果你们对编写指标感兴趣,可以购买我写的书《看盘秘籍》(https://item.jd.com/10469068.html),这本书主要介绍股票软件指标设计,以及用C++开发指标公式,凡是购买这本书的读者,除了了解作者的投资分析理念,还会得到C++开发指标公式的资料及演示程序,能够得到一套用c++开发貔貅指标(https://mp.weixin.qq.com/s/c9J-d30haP5nonU3bjiwSg),这套指标支持分析家,大智慧,飞狐交易师等软件。

历史上高准确的技术指标公式和图形漂亮量化回测图,99%多数是假的,造假的方式很多。
(1)统计数据造假,指标在低部连续出现10个买点,在顶部出现过1次买点,指标成功率=10/(10+1)=90.9%的成功率。
(2)屏蔽或跨过行情下跌的区间。我们知道熊市中,没有能保证赚钱的买股技术。在历史上测试90% 以上指标,基本上时假的,屏蔽了熊市中的买点信号,或者20多年里,出现买点不足百个,这主要是针对某只股票在特定行情中创作的,对其他股票不适用,没有发出买点的机会。
(3)量化回测图也是假的。举例来说,你用5分钟线回测买卖交易。你刚买入股票,5分钟的第1分钟是阴线,出现了卖出信号,此时你买出肯定亏损;第2分钟仍然是阴线,卖出亏损更多;第3分钟是阴线,第4分钟是阳线,第5分钟是阳线,最后5分钟K线是小阳线。在实战中,你在第1到第3分钟都亏损卖出了。按5分钟K线回测,没有发出卖出信号,因此在回测图形中,能完美地在最高价区间卖出,获大利。 这样的回测程序,你照此操作,能把人坑死不?

荷蒲指标和貔貅指标只有60%以上准确率。指标是尺子,是参考,不是摇钱树。
如果有人卖给你摇钱树,你问问他,怎么不自己摇钱呢?还需要骗钱?

小白量化能仿通达信、大智慧、飞狐交易师等股票软件指标公式,可以实现用户自编指标的分析和回测,以及实现自动交易。购买《零基础搭建量化投资系统――以Python为工具》(https://item.jd.com/61567375505.html)一书,就能得到小白量化第二代全部源代码。 我是码农,我卖的是体力,不是技术。

请持续关注我的博客,我的进步,就是你的进步!

小白量化学习-自创指标设计 一、准备工作 1、首先把“HP_formula.py”文件复制到自己的工程目录中。 2、在新文件开始增加下面4条语句。 import numpy as np import pandas as pd from HP_formula import * import tushare as ts 二、对数据预处理 我们采用与tushare旧股票数据格式。 #首先要对数据预处理 df = ts.get_k_data('600080',ktype='D') 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'] 三、仿通达信或大智慧公式 通达信公式转为python公式的过程。 1.‘:=’为赋值语句,用程序替换‘:=’为python的赋值命令‘='。 2.‘:’为公式的赋值带输出画线命令,再替换‘:’为‘=’,‘:’前为输出变量,顺序写到return 返回参数中。 3.全部命令转为英文大写。 4.删除绘图格式命令。 5.删除掉每行未分号; 。 6.参数可写到函数参数表中.例如: def KDJ(N=9, M1=3, M2=3): 例如通达信 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; # Python的KDJ公式 def 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 return K, D, J #----------------------------------- #根据上面原理,我们把大智慧RSI指标改 # 为Python代码,如下。 def RSI(N1=6, N2=12, N3=24): """ RSI 相对强弱指标 """ LC = REF(CLOSE, 1) RSI1 = SMA(MAX(CLOSE - LC, 0), N1, 1) / SMA(ABS(CLOSE - LC), N1, 1) * 100 RSI2 = SMA(MAX(CLOSE - LC, 0), N2, 1) / SMA(ABS(CLOSE - LC), N2, 1) * 100 RSI3 = SMA(MAX(CLOSE - LC, 0), N3, 1) / SMA(ABS(CLOSE - LC), N3, 1) * 100 return RSI1, RSI2, RSI3 四、使用公式并绘图 #假定我们使用RSI指标 r1,r2,r3=RSI() mydf = mydf.join(pd.Series( r1,name='RSI1')) mydf = mydf.join(pd.Series( r2,name='RSI2')) mydf = mydf.join(pd.Series( r3,name='RSI3')) mydf['S80']=80 #增加上轨80轨迹线 mydf['X20']=20 #增加下轨20轨迹线 mydf=mydf.tail(100) #显示最后100条数据线 #下面是绘线语句 mydf.S80.plot.line() mydf.X20.plot.line() mydf.RSI1.plot.line(legend=True) mydf.RSI2.plot.line(legend=True) mydf.RSI2.plot.line(legend=True) 不懂就看我的博客 https://blog.csdn.net/hepu8/article/details/93378543
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荷蒲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值