无未来函数选股指标,无未来函数选股公式可靠性

  

  01 引言   

  

  在股市中,所有交易活动的成功都是概率事件,交易盈利的核心在于选择上涨概率较高的股票。因此,利用大概率的上涨形态选股是技术分析的重要方法之一。威廉奥尼尔研究了《笑傲股市》的100多只超级牛股,总结出了最常见的看涨形态——杯柄形态。奈尔选股模型的买点,说白了就是股价放量上涨,即将创出新高的点。也就是说,最佳买点是股价回调,股价即将创出新高,成交量放大50%以上的时候。   

  

  奥尼尔“逢高买入”的逻辑主要基于三点。第一,“逢高买入”可以避免长时间等待股票在底部盘整;第二,在牛市初期和调整期,底部盘整完成得越早,未来的涨幅通常会越高;第三,在牛市初期和调整期,先买入较早完成盘整并创出新高的股票,待上涨的利润卖出后再启动股票,可以提高资金使用效率。   

  

  基于奥尼尔“杯柄形态”和“逢高买入”的技术分析思想,利用Python进行基于个股股价形态的简单量化选股,以期起到为股价形态量化选股提供一砖一瓦的作用。其实奥尼尔选股的精髓在于技术面和基本面的有机结合,提出了CANSLIM七步选股法。有兴趣可以参考他的原著《笑傲股市》。废话少说,下面直接给出Python价量选股代码。注意,本文提到的股票只是分析案例,不构成任何投资建议!   

  

  02 Python选股代码   

  

  Python实现的步骤主要包括数据获取和清洗、价量突破规则设置、股票筛选和可视化分析。数据采集基于tushare开源框架,数据管理使用Python自带的Sqlit3轻量级数据库进行。见推文《【手把手教你】Python面向对象编程入门及股票数据管理应用实例》。下面要介绍的base、update_sql、plot_stock都是为了方便数据管理而编写的个人脚本文件。在运行时,您可以批注并使用自己的数据来替换和绘制图片。加入知识星球获取所有完整的代码。   

  

  「手把手教你」Python实现量价形态选股   

  

  (用于数据管理的py文件和用于选股分析的ipynb文件)   

  

  #更新数据库信息   

  

  从更新sql导入更新sql,信息sql   

  

  #画一张k线图   

  

  从图_股票导入股票_图   

  

  更新数据库信息   

  

  update_sql()   

  

  输出:数据是最新的!获取数据库信息info_sql()输出结果:数据库中的股票数量:3760   

  

  查询总数:7873981   

  

  期间:2005年1月4日至2020年1月13日   

  

  文件大小为918M。   

  

  导入熊猫as pd#base是来自frombasemportsql _ engine的脚本文件,ts _ profromdatetimeimportdatetime是个人写的。time delta pro=ts _ pro()engine=SQL _ engine()从数据库中获取修复的价格和数量。def get _ price _ vol _ data(): now=datetime . now()date=(now-time delta(360))。strftime(' % y % m % d ')SQL=f ' select * from daily _ data where Trade _ date { date } ' all _ data=PD . read _ SQL(SQL,engine)all _ data=all _ data . sort _ values([' ts _ code ',Trade _ date '])codes=list(all _ data . ts _ code . unique())# all _ data[' adj close ']=all _ data . group by(' ts _ code ')。apply(lambda x 3360 x . close * x . adj x . adj _ factor . iloc[-1])。values all _ data[' adj vol ']=all _ data . group by(' ts _ code ')。apply(lambda x : x . vol * x . adj _ factor/x . adj _ factor . iloc[-1])。values all _ data[' adj open ']=all _ data . group by(' ts _ code ')。apply(lambda x : x . open * x . adj _ factor/x . adj _ factor . il   

oc[-1]).valuesall_data['adjhigh']=all_data.groupby('ts_code').apply(lambdax:x.high*x.adj_factor/x.adj_factor.iloc[-1]).valuesall_data['adjlow']=all_data.groupby('ts_code').apply(lambdax:x.low*x.adj_factor/x.adj_factor.iloc[-1]).values#设置索引all_data=all_data.set_index(['trade_date','ts_code'])[['adjclose','adjvol','adjopen','adjhigh','adjlow']]#转成面板数据all_data=all_data.unstack()returncodes,all_data筛选价格和成交量突破N日阈值的个股deffind_price_vol_stock(n,r=1.2): codes,all_data=get_price_vol_data()up_list=[]forcodeincodes:close=all_data['adjclose'][code]open_=all_data['adjopen'][code]high=all_data['adjhigh'][code]low=all_data['adjlow'][code]vol=all_data['adjvol'][code]#剔除一字涨停flag=Trueifclose.iloc[-1]==open_.iloc[-1]==high.iloc[-1]==low.iloc[-1]:flag=Falsebreak#最近五日没有长上影线,以单日回撤3%为长上影线foriinrange(5):ifclose[-5:][i]*1.03<high[-5:][i]:flag=Falsebreak#价格突破前N日新高p=close.iloc[-1]#当前价格p0=close[-n:-1].min()p1=close[-n:-1].max()#前n-1日最高价#价格短期已上涨超过50%,涨幅过大不宜介入'''if(p-p0)/p0>r:flag=Falsebreak'''#价格突破且放量上涨ifflag==Trueand\p1<p<p1*rand\vol[-5:].mean()/vol[-10:-5].mean()>2.0:up_list.append(code)returnup_list

运行选股函数:

stocks_60=find_price_vol_stock(60)

print('突破60日量价的个股为:\n')
print(stocks_60)
print(f'突破60日量价个股个数为:{len(stocks_60)}')

突破60日量价的个股为:['000417.SZ','000885.SZ']突破60日量价个股个数为:2
对选出的个股K线可视化stock_plot(stocks_20[0]).kline_plot(ktype=0)
stock_plot(stocks_20[1]).kline_plot(ktype=0)
「手把手教你」Python实现量价形态选股


下面不考虑成交量,主要基于价格形态,寻找W底或圆底形态的个股。

#RPS是用于计算欧奈尔RPS相对强弱指标的脚本文件

from RPS import get_data

data=get_data()#data.tail()剔除了次新股和ST股后对剩下的2871只股票进行筛选。

def find_stock(data,n=20):

  stock_list=[]forcindata.columns:d0=data[c][-n]d1=data[c][-(n-2):-1].max()d2=data[c][-1]#考虑股价在3-20元个股情况if3<d2<20andd1<d0<d2<d0*1.52:stock_list.append(c)  #print(len(stock_list))  returnstock_list
运行函数:ss_20=find_stock(data)print(ss_20)#输出结果:
['恒华科技','东方电缆','立霸股份','鼎信通讯','普洛药业']

基于60天价格形态。
ss_60=find_stock(data,n=60)

print(ss_60)#输出结果:

['中航重机','鲁阳节能','金牛化工','农尚环境','北汽蓝谷']

价格形态的可视化,其中stock_plot是使用pyecharts0.5.11版本写的画图脚本文件,ktype=0为普通K线,=1为修正K线图。
stock_plot(ss_20[0]).kline_plot(ktype=0)

「手把手教你」Python实现量价形态选股

stock_plot(ss_20[1]).kline_plot(ktype=0)

「手把手教你」Python实现量价形态选股

stock_plot(ss_60[0]).kline_plot(ktype=0)

「手把手教你」Python实现量价形态选股

stock_plot(ss_60[1]).kline_plot(ktype=0)

「手把手教你」Python实现量价形态选股

stock_plot(ss_60[2]).kline_plot(ktype=0)
「手把手教你」Python实现量价形态选股


03 结语

随着股票数量的增多,借助技术手段进行量化选股已越来越普遍,不少平台也用上了AI的手段。市场讯息万变,往往体现在量价关系的变化中。因此采用技术分析的量价时空分析,可以提高选股的成功概率。但所有技术分析都基于对历史的归纳,而历史并不总是全然相似,所处的市场环境和公司情况也不尽相同,未来的发展走势也可能不一样。技术分析本身是存在一定局限性的,凭借高概率的价格形态选股能够判定一只股票未来上涨,但也未必如你所愿的方式上涨,可能中间的震荡又将你洗出局。本文以Python为工具,对A股3700多只股票进行价量分析,利用价量突破进行选股,为股票技术分析的量化提供了一种简单的视角,具有一定的实战意义。具体应用中还可结合市场横截面的强弱指标――欧奈尔的RPS和基本面业绩指标进一步优化。以上分析仅供参考,不构成任何投资建议!

关于Python金融量化


专注于分享Python在金融量化领域的应用。加入知识星球,可以免费获取量化投资视频资料、量化金融相关PDF资料、公众号文章Python完整源码、量化投资前沿分析框架,与博主直接交流、结识圈内朋友等。

「手把手教你」Python实现量价形态选股

相关文章