【加蛋量化之Ptrade - 第01期】如何使用Ptrade实现通达信公式

欧阳
欧阳 This guy is lazy,Introduction has not been set

3 People liked this article · 3515 views

       关于通达信公式如何使用Ptrade来实现,是很多PTrade初学者遇到的一大难题。今天我们就列举几个使用频率最高的指标供大家参考

首先我们需要取得一段时间的K线。


his_len = 120

for sec in sec_list:

    sec_his = get_history(count=his_len, frequency='1d', field=['close', 'high', 'low'], security_list=sec, fq='pre', include=False)

    if sec_his.shape[0] < his_len:

        continue


       取得数据之后,我们需要进行校验,也就是检查取得的数据是否满足我们的计算需求。举个例子,如果我需要计算30日均线,count数必须填大于30的数字,否则是无法计算出30日均线数据的。也就是说,在后面的校验步骤中,我们需要判断取回的dataframe长度是否满足指标的计算需求,不满足则跳过,继续寻找下一个股票。his_len的数量取决于我们计算的指标所需的K线数的最大值。


校验完成之后,我们就可以进行指标计算了。


Y:=MA(CLOSE, 20)  这个公式为计算20日MA均线

sec_his['ma20'] = sec_his['close'].rolling(20).mean()


Y:=EMA(CLOSE, 20) 这个公式为计算20日EMA均线

sec_his['ema20'] = sec_his['close'].ewm(span=20, adjust=False).mean()


Y:=SMA(CLOSE, 20) 这个公式为计算20日SMA均线

sec_his['sma20'] = sec_his['close'].ewm(alpha=1/20, adjust=False).mean()


Y:=LLV(L, 20) 这个公式为计算20日最低值

sec_his['llv20'] = sec_his['low'].rolling(20).min()


Y:=HHV(H, 20) 这个公式为计算20日最大值

sec_his['llv20'] = sec_his['high'].rolling(20).max()


有了 HHV 和 LLV 的实现,我们就可以计算RSI了

sec_his['llv'] = sec_his['low'].rolling(9).min()

sec_his['hhv'] = sec_his['high'].rolling(9).max()

sec_his['rsv'] = 100*(sec_his['close']-sec_his['llv'])/(sec_his['hhv']-sec_his['llv'])


计算出RSI,我们就可以进一步计算KDJ

sec_his['k'] = sec_his['rsv'].ewm(span=2*3-1, adjust=False).mean()

sec_his['d'] = sec_his['k'].ewm(span=2*3-1, adjust=False).mean()

sec_his['j'] = 3*sec_his['k']-2*sec_his['d']


计算出各种指标之后,我们一般需要判断指标最新的值,例如需要KDJ的J值大于20,可以这么写

if sec_his['j'].iloc[-1] >= 20:

    log.info(sec+'KDJ指标 J 值符合要求')


其他的判断方法大家可以以此类推,举一反三。

       本篇文章就到这里结束了,如果你有什么想看的内容,或者有什么问题需要咨询,请在群里联系我,我是欧阳,我们下期再见。

Published on 2024-03-15 14:43

Disclaimers:

This document is written by 欧阳 Original published on 百果量化交流平台 ,The copyright belongs to the author。

Log in,More exciting content waiting for you to find,Contribute wonderful answers,Participate in comment interaction

go Sign in! No accountgoregister

前无股人
2024-12-25 16:13
Y:=HHV(H, 20) 这个公式为计算20日最大值 sec_his[\llv20\] = sec_his[\high\].rolling(20).max() 是不是应该写成: sec_his[\hhv20\] = sec_his[\high\].rolling(20).max()
前无股人
2024-12-25 16:11
sec_his[\k\] = sec_his[\rsv\].ewm(span=23-1, adjust=False).mean() 不能写成 sec_his[\k\] = sec_his[\rsv\].ewm(span=5, adjust=False).mean() 吗
铁头军团
2024-07-12 09:43
支持欧阳老师
宝哥1314
2024-05-20 23:17
欧阳老师好,怎么能联系到您

Included in the column