当前位置: 首页 > 后端技术 > Python

我用python实现了一个量化选股程序

时间:2023-03-25 19:36:57 Python

背景最近在研究数据分析。课程最后,老师讲了一个通过量化分析选股的案例。做一个软件来练习你所学的东西。课程中主要使用python相关的库来处理比特币数据,数据量不大,但了解原理后,可以举一反三。首先,我们来回顾一下主要知识点。选股时会用到两个重要指标RSV和KDJ。它们的定义见下面的课件截图。具体内容我就不细说了,因为我是非金融专业的,解释这些名词有点难度。我们只需要记住这两个指标是怎么计算的,后面怎么用就可以了。KDJ指标定义计算K指标计算D指标计算J指标实验原理老师在课程中说过,K和D都反映了股票变动的趋势。比D敏感,当K值越过D值时(K>D第一次),表示该股可能向上反弹,此时是买入时机。当K越过D值时(第一次K=high:high=prevbar.high如果prevbar.low<=low:low=prevbar.lowprint("rsv:stock_id%s,date:%slastopen:%s,lastclose:%s,high:%s,low:%s"%(bar.stock_id,bar.date,lastopen,lastclose,high,low))stockrsv=StockRSV(id=bar.stock_id+"_"+str(bar.date),stock_id=bar.stock_id,date=bar.date,rsv=100*(lastclose-low)/(high-low))session.add(stockrsv)session.commit()计算结果计算KDJ指标forstockinstocks:i+=1rsvs=session.query(StockRSV).filter(StockRSV.stock_id==stock.id).order_by(StockRSV.date.asc()).all()iflen(rsvs)<1:print("stock%srsvlessthanwindow%sreal%scalnextstock"%(stock.id,1,len(rsvs)))continueforstockrsvinrsvs:curkdj=session.query(StockKDJ).filter(StockKDJ.id==stockrsv.stock_id+"_"+str(stockrsv.date)).first()如果curkdj不是None:print("kdjid:%s,stock_id:%s,date:%s,k:%s,d:%s,j:%sexistcalnext"%(curkdj.id,curkdj.stock_id,curkdj.date,curkdj.k,curkdj.d,curkdj.j))continuelastkdj=session.query(StockKDJ).filter(StockKDJ.stock_id==stockrsv.stock_id,StockKDJ.dateD的股票在股票软件上查看这几只股票的走势图实验小结通过本次实验,我们摸索出了一种使用python获取股票数据的方法。由于记录较多,计算过程不能递归,所以只能通过循环的方式结合数据库循环对指标进行计算,最后将计算结果存入数据库,利用SQL语言丰富的语义,可以灵活验证各种选股模型。本次实验得出的选股方法虽然不一定像专业机构那样准确,但灵活多变,大家可以根据自己的经验进行调整。