14

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

 3 years ago
source link: https://blog.csdn.net/hepu8/article/details/112060450
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

自己做量化交易软件(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)一书,就能得到小白量化第二代全部源代码。 我是码农,我卖的是体力,不是技术。

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK