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

01 引言
在股票市场上,一切交易行为的成功皆为概率事件,交易获利的核心在于选择了上涨概率较高的股票 。因此 , 利用高概率的上升形态来选股,是技术分析的重要方法之一 。威廉·欧奈尔在《笑傲股市》中通过研究100多只超级牛股,总结出看涨形态中出现最为普遍的一种形态——杯柄形态 。欧奈尔杯柄选股模型的买点,说白了是股价放量上升即将创出新高的时点 。也就是说,最佳买点是在股价经过回调整理,股价即将创出新高且成交量放大50%以上 。
欧奈尔“逢高买入”的逻辑主要基于三点,一是“逢高买入”可以规避股票长时间在底部盘整时的等待;二是在牛市初期和调整期,越早结束底部盘整创出新高的股票,未来的涨幅通常越大;三是在牛市初期和调整期,先买入更早结束盘整创出新高的股票,待其上涨获利部分卖出再建仓后启动的股票 , 可以提高资金使用效率 。
本文基于欧奈尔“杯柄形态”和“逢高买入”的技术分析思想 , 使用Python基于个股价量形态进行简单的量化选股,以期对股票价格形态量化选股起到抛砖引玉的作用 。实际上欧奈尔的选股精髓在于技术面和基本面的有机结合,并提出了CANSLIM七步选股法 , 感兴趣的可参见其原书《笑傲股市》 。废话少说,下面直接给出Python价量选股代码 。注意,文中提及股票仅作为分析案例,不构成任何投资建议!
02 Python选股代码
Python实现的步骤主要包括数据获取及清洗、价量突破规则设定、股票筛选和可视化分析 。数据获取基于tushare开源框架,使用Python自带的Sqlit3轻量级数据库进行数据管理,参见推文《Python面向对象编程入门及股票数据管理应用实例》 。下面要引入的base、update_sql、plot_stock均是为方便数据管理写的个人脚本文件,在运行时可以注释掉使用自己的数据来替换和画图 。加入知识星球获取可获取所有完整代码 。

画K线图from plot_stock import stock_plot
【「手把手教你」Python实现量价形态选股】更新数据库信息
update_sql()
输出结果:数据已经是最新的!
获取数据库信息info_sql()
输出结果:
数据库包含股票个数:3760
统计查询的总数:7873981数据期间:20050104——20200113
文件大小为918M 。
import pandas as pd
39;%Y%m%d&39;select * from daily_data where trade_date>{date}&39;ts_code&39;trade_date&前复权
all_data[&39;]=all_data.groupby(&39;).apply(lambda x:x.close*x.adj_factor/x.adj_factor.iloc[-1]).values
all_data[&39;]=all_data.groupby(&39;).apply(lambda x:x.vol*x.adj_factor/x.adj_factor.iloc[-1]).values
all_data[&39;]=all_data.groupby(&39;).apply(lambda x:x.open*x.adj_factor/x.adj_factor.iloc[-1]).values
all_data[&39;]=all_data.groupby(&39;).apply(lambda x:x.high*x.adj_factor/x.adj_factor.iloc[-1]).values
all_data[&39;]=all_data.groupby(&39;).apply(lambda x:x.low*x.adj_factor/x.adj_factor.iloc[-1]).values
39;trade_date&39;ts_code&39;adjclose&39;adjvol&39;adjopen&39;adjhigh&39;adjlow&转成面板数据
all_data=https://www.30zx.com/all_data.unstack()
return codes,all_data
筛选价格和成交量突破N日阈值的个股
def find_price_vol_stock(n,r=1.2):codes,all_data=https://www.30zx.com/get_price_vol_data()up_list=[]
for code in codes:
close=all_data[&39;][code]
open_=all_data[&39;][code]
high=all_data[&39;][code]
low=all_data[&39;][code]
vol=all_data[&39;][code]
最近五日没有长上影线,以单日回撤3%为长上影线
for i in range(5):
if close[-5:][i]*1.03<high[-5:][i]:
flag=False
break
当前价格
p0=close[-n:-1].min()
p1=close[-n:-1].max() 价格短期已上涨超过50%,涨幅过大不宜介入
&39;&39;&39;
39;突破60日量价的个股为:\\n&39;突破60日量价个股个数为:{len(stocks_60)}&39;000417.SZ&39;000885.SZ&RPS是用于计算欧奈尔RPS相对强弱指标的脚本文件
from RPS import get_data
data=https://www.30zx.com/get_data()考虑股价在3-20元个股情况
if 3<d2<20 and d1<d0<d2<d0*1.52:
stock_list.append(c)输出结果:[&39;, &39;, &39;, &39;, &39;]
基于60天价格形态 。ss_60=find_stock(data,n=60)
print(ss_60)39;中航重机&39;鲁阳节能&39;金牛化工&39;农尚环境&39;北汽蓝谷']
价格形态的可视化 , 其中stock_plot是使用pyecharts0.5.11版本写的画图脚本文件 , ktype=0为普通K线,=1为修正K线图 。stock_plot(ss_20[0]).kline_plot(ktype=0)
stock_plot(ss_20[1]).kline_plot(ktype=0)
stock_plot(ss_60[0]).kline_plot(ktype=0)
stock_plot(ss_60[1]).kline_plot(ktype=0)
stock_plot(ss_60[2]).kline_plot(ktype=0)
03
以上就是朝夕生活(www.30zx.com)关于“「手把手教你」Python实现量价形态选股”的详细内容,希望对大家有所帮助!

猜你喜欢