2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 小散量化炒股记|手把手教你转换通达信公式 盘整后均线粘合突破

小散量化炒股记|手把手教你转换通达信公式 盘整后均线粘合突破

时间:2022-07-19 16:32:30

相关推荐

小散量化炒股记|手把手教你转换通达信公式 盘整后均线粘合突破

前言

通达信的公式编写功能非常流行,很多高手都是在通达信上编写公式来分析股票的。

作为过来人,建议大家在初期的策略研究阶段,选一个通用的平台进行策略研究,因为有现成的功能模块可以调用,这样就能把精力聚焦在设计策略层面。

当策略稳定之后,可以聚焦在个性化的应用层面。毕竟通用平台使用方式和自己的风格并不是百分之百契合的。

另外通用平台功能模块的底层实现逻辑是个黑箱子,我们只能靠猜测,有时候策略执行的结果不符合预期的时候,就很难去定位排查。

所以,从长远来看,当策略稳定后,建议把策略移植到自己的系统上面,这样对策略的运行能更了如指掌,增强对策略的信心,同时也更能符合自己风格去执行。

通达信公式的表达十分简洁,其实Python也是以优雅著称的,那么怎么把通达信公式转换为Python语言呢?

本期就以通达信“底部盘整,均线粘合,单阳突破选股公式”为例,手把手给大家展示下如何把通达信公式翻译为Python语句。

转换公式

“底部盘整,均线粘合,单阳突破选股公式” 的总体思路是:股价在M日均线上下波动不超过10%,20日、30日、60日、120日均线收敛,当日涨幅超过5%且股价创M日新高。

此处的M我们选用偏中的参数60日。

完整的公式如下所示(说明下,该公式来自于星球学员网上看到后分享于我):

PZ := MA(CLOSE, M);PZ2 := HHV(HIGH, M);PZ3 := LLV(LOW, M);PZ4 := (PZ2 - PZ1) / PZ1;PZ5 := (PZ1 - PZ3) / PZ1;PZ := REF(PZ4, 1) < 0.1 AND REF(PZ5, 1) < 0.1;MA20:=MA(C,20);MA30:=MA(C,30);MA60:=MA(C,60);MA120:=MA(C,120);MAMAX:=MAX(MAX(MAX(MA10,MA20),MA50),MA120);MAMIN:=MIN(MIN(MIN(MA10,MA20),MA50),MA120);SL:=MAMAX/MAMIN<1.05;ZF := C/REF(C, 1) > 1.05;TP1 := HHV(HIGH, M);TP := HIGH = TP1;PZ AND SL AND ZF AND TP;

通达信指标转换说明:

因为语法的问题,我们需要使用 `&` 代替 `and` ,用 `|` 代替 `or`

`HHV`表示n天内最大值

`LLV`表示n天内最小值

`REF`表示n天前的数据

`MIN`表示两个序列取最小值

`MAX`表示两个序列取最大值

`OPEN` `O`表示开盘价

`CLOSE` `C`表示收盘价

`HIGH` `H`表示最高价

`LOW` `L`表示最低价

`VOLUME` `V` `VOL`表示成交量

接下来我们就用Python来实现一番:

@staticmethoddef bottom_average_break(name, code, edate_val, stock_data, patlog_obj, **kwargs):# 底部盘整,均线粘合,单阳突破 通达信公式# 股价在M日均线上下波动不超过10%,20日、30日、60日、120日均线收敛,当日涨幅超过5%且股价创M日新高""":param name::param code::param edate_val::param stock_data::param patlog_obj::param kwargs::return:"""M = 60 # 取周期值PZ1 = stock_data["收盘价"].rolling(window=M).mean() # 计算M日的移动平均线PZ2 = stock_data["最高价"].rolling(window=M).max() # 计算M日的最高价PZ3 = stock_data["最低价"].rolling(window=M).max() # 计算M日的最低价PZ4 = (PZ2 - PZ1) / PZ1 # 计算向上波动幅度PZ5 = (PZ1 - PZ3) / PZ1 # 计算向下波动幅度PZ = (PZ4.shift(1) < 0.1) & (PZ5.shift(1) < 0.1) # 选出符合上下波动幅度范围的数据MA10 = stock_data["收盘价"].rolling(window=20).mean() # 计算10日的移动平均线MA20 = stock_data["收盘价"].rolling(window=30).mean() # 计算20日的移动平均线MA50 = stock_data["收盘价"].rolling(window=60).mean() # 计算50日的移动平均线MA120 = stock_data["收盘价"].rolling(window=120).mean() # 计算120日的移动平均线MAMAX = np.maximum(np.maximum(np.maximum(MA20, MA30), MA60), MA120) # 选出各均线中最大值MAMIN = np.minimum(np.minimum(np.minimum(MA20, MA30), MA60), MA120) # 选出各均线中最小值SL = MAMAX / MAMIN < 1.05 # 选出符合收敛幅度的数据ZF = stock_data["收盘价"]/stock_data["收盘价"].shift(1) > 1.05 # 选出符合涨跌幅的数据TP1 = stock_data["最高价"].rolling(window=M).max() # 选出30日的最高价TP = stock_data["最高价"] == TP1 # 选出最高价是30日的最高价的数据if (PZ & SL & ZF & TP)[-1] == True:# 输出满足要求的股票patlog_obj.re_print("符合特征: 股票 {},代码 {}".format(name, code))

我们把“底部盘整,均线粘合,单阳突破选股公式”作为策略添加到QTYX的形态选股里面了,大家马上就能体验到这个选股公式的效果了!

说明

1. 我们会把完整的源码上传到知识星球《玩转股票量化交易》中,帮助小伙伴们更好地掌握这个方法。

2. 想要加入知识星球《玩转股票量化交易》的小伙伴记得先微信call我获取福利!

知识星球介绍点击:知识星球《玩转股票量化交易》精华内容概览

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。