学习QMT股票量化系统避开ST类股票

2024年注定是一个要给我们留下深刻印象、值得永久回忆的一年。ST的股票特别多,很多股友都生活在退市的恐惧、忧愁和焦虑之中,选股,也变得更加小心翼翼起来。

今天我们要说的是,在学习QMT股票量化系统中,选股时如何用python代码来剔除掉ST类股票,然后再练习一个选出上升趋势股票的实例。

学习是循序渐进的,我们今天还会用到上周所学的一些知识,我们先来复习一下:

学习QMT股票量化系统避开ST类股票

一、复习巩固

在这篇文章中,我们先是获取了深沪股市中所有的股票代码,然后根据代码去获取它的财务数据。还记得获取股票代码的方法吗?

stock_list = C.get_stock_list_in_sector(C.stock_sector)

对了,我们是用get_stock_list_in_sector()函数来获取股票代码的,今天我们还会用到它。

当我们获取到股票代码后,就可以根据代码获取它的股票名称,再看看股票名称里有没有“ST”这两个字符,这样可以找出或是排除ST类股票了。根据代码来获取股票名称,我们也在上周学过了:

stock_info_dic = C.get_instrumentdetail(stock)
stock_info = stock_info_dic['InstrumentName']

二、选出所有的ST股票

对,我们先把所有的ST股票选出来,这样我们才知道我们的方法用对了吗。

#encoding:gbk
'''
选出所有的ST股票
'''
import pandas as pd
import numpy as np

def init(C):
	C.stock_sector = '沪深A股'

def handlebar(C):
	if not C.is_last_bar():
		return
		
	df = pd.DataFrame(columns = ['股票代码','股票名称'])
	stock_list = C.get_stock_list_in_sector(C.stock_sector)	# 获取股票代码
	for stock in stock_list:                                                   # 获取股票名称
		stock_info_dic = C.get_instrumentdetail(stock)
		stock_info = stock_info_dic['InstrumentName']
	 if 'ST'  in stock_info:                                                     # 判断是否为ST
			df.loc[len(df)]=[stock,stock_info]
	print(df)

其实很简单,就是看看“ST”是否在股票名字里面,程序运行结果如图:

学习QMT股票量化系统避开ST类股票

学习QMT股票量化系统避开ST类股票

如果我们要避开ST类股票,只需要将if ‘ST’ in stock_info 更改为 if ‘ST’ not in stock_info 即可,就是加了个not。

三、实例练习:挑选出上升趋势的非ST股票

做股票就要做上升趋势的股票,上升趋势的股票一般收盘价会高于5日均线,5日均线排在10均线的上方,10日均线排在30日均线的上方。至于均线的算法,我们在《学习QMT股票量化系统,再谈单均线策略》、《学习QMT股票量化系统,入门级双均线策略》等文章中学过了,我们又一次要应用这些方法了。

#encoding:gbk
'''
排除ST股票,并筛选出上升趋势的股票
'''
import pandas as pd
import numpy as np

def init(C):
    C.stock_sector = '沪深A股'

def handlebar(C):
    bar_date = timetag_to_datetime(C.get_bar_timetag(C.barpos), '%Y%m%d%H%M%S')
    if not C.is_last_bar():
        return
    
    # 创建一个空的DataFrame来存储股票代码和名称
    df = pd.DataFrame(columns=['股票代码', '股票名称','收盘价', '5日均线', '10日均线', '30日均线'])
    
    # 获取股票列表
    stock_list = C.get_stock_list_in_sector(C.stock_sector)
    
    # 遍历股票列表
    for stock in stock_list:
        # 获取股票的详细信息和5日、10日、30日均线数据
        stock_data = C.get_instrumentdetail(stock)
        stock_info = stock_data['InstrumentName']
        stock_code = stock
        
        if 'ST' not in stock_info:    #如果不是ST的股票就去获取它的收盘价
            price_data = C.get_market_data_ex(
            ['close'],
            [stock],
            end_time=bar_date,
            period=C.period,
            dividend_type='none',
            subscribe = True
            )

            if len(price_data[stock]['close']) < 30:    # 剔除行情数据小于30天的股票
                print(stock,stock_info,"行情不足,跳过。")
                continue  # 跳过当前股票,继续循环
            stock_close = round(price_data[stock]['close'][-1],2)
            ma5 = round(price_data[stock]['close'].rolling(window=5).mean(),2)
            ma10 = round(price_data[stock]['close'].rolling(window=10).mean(),2)
            ma30 = round(price_data[stock]['close'].rolling(window=30).mean(),2)
#             上升趋势的定义是收盘价高于5日、10日、30日均线,且均线依次上升
            if stock_close > ma5[-1] and ma5[-1]>ma10[-1] and ma10[-1]>ma30[-1]:
                df.loc[len(df)] = [stock, stock_info, stock_close,ma5[-1],ma10[-1],ma30[-1]]
                print("找到股票了!")
                print(stock, stock_info, stock_close,ma5[-1],ma10[-1],ma30[-1])
    
    # 打印符合条件的股票
    print("上升趋势且非ST的股票列表:")
    print(df)

运行程序,结果如下:

学习QMT股票量化系统避开ST类股票

学习QMT股票量化系统避开ST类股票

学习QMT股票量化系统避开ST类股票

四、总结

要排除ST类股票,我们先获取股票代码,再根据代码获取股票名称,再判断名称里是否有”ST”字符。排除ST股票后,我们再加上自己需要的其他条件来选择股票。

学习QMT股票量化系统避开ST类股票

五、巩固练习

现在股票面值低于1元也会退市,为了安全考虑,我们选股时还得避开1元左右的低价股啊。根据今天的上升趋势实例,我们再加一个条件:选出股价大于5元,走势是上升趋势的非ST股票。

动手敲敲键盘吧。

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/73457
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 10 日
下一篇 2024 年 7 月 10 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注