Partage de recherche quantitative : comment surveiller les stocks avec python

La dernière fois que Maodou a partagé la recherche quantitative sur le modèle de réseau industriel : comment créer un modèle de réseau industriel , de nombreux amis ont dit que c'était trop compliqué à apprendre . Cet article explique comment sélectionner automatiquement des actions via Python et effectuer une surveillance automatique au niveau des minutes. des actions sélectionnées de Shuangxiangpao dans l'infrajournalier. Très simple et très intéressant, je vous propose de le collectionner~~~

Tout d'abord, permettez-moi de parler de ce qu'est la limite quotidienne de double pistolet, c'est-à-dire qu'il y a une limite quotidienne dans les premiers jours, puis ajustée pendant quelques jours, puis la limite quotidienne. (C'est la condition de base, et des conditions supplémentaires peuvent également être ajoutées)

Par exemple, Aofei Entertainment ce vendredi (7 avril) :

Sucre de Nanning :

Le canon à double coup à limite quotidienne est l'un des stocks haussiers typiques à court terme, ce qui est très courant sur le marché.Les actions qui sont sorties du canon à double coup ont souvent de bonnes perspectives de marché.

Après avoir compris quelle est la limite quotidienne du canon à double coup, passons au sujet d'aujourd'hui, comment utiliser python pour réaliser la surveillance en temps réel du canon à double coup.

1. Préparation de l'environnement

En prenant Jukuan comme exemple, nous importons d'abord la bibliothèque appropriée et définissons l'heure à surveiller.

from jqdata import *#聚宽研究环境
#import jqdatasdk#本地环境,需要账号认证
#from jqdatasdk import *
import datetime
import time
import pandas as pd
import numpy as np
#设置研究时间
period=10#研究最近10天的数据
today0=datetime.datetime.today()#自动获取当天日期+时间
today1=today0.strftime('%Y-%m-%d')#转化格式:日期
trade_days=get_trade_days(end_date=today1,count=period)#获取最近period的交易日期
trade_days=list(map(lambda x:x.strftime("%Y-%m-%d"),trade_days))
today=trade_days[-1]#今天
pre_date=trade_days[-2]#上一个交易日
print('今天是{},上一个交易日是{}'.format(today,pre_date))

2. Obtenez des données

Commencez par filtrer le pool d'actions d'origine, supprimez le Conseil de l'innovation scientifique et technologique, les nouvelles actions, les actions ST, etc., et obtenez la liste des actions filtrées :

#过滤股池
def get_normal_stocks(date,new_days=60):
'''
    获取全部股票代码,并过滤掉st、退市股、新股、科创板、创业板等
    :param date:目标日期
    :param new_days:60天前上市
    '''
    trd_days = get_trade_days(end_date=date, count=new_days)
    stock_data = get_all_securities('stock', trd_days[0])
    stock_data=stock_data[~stock_data.display_name.str.contains('ST')]
    stock_data=stock_data[~stock_data.display_name.str.contains('//*')]
    stock_data=stock_data[~stock_data.display_name.str.contains('退')]
    stock_list=stock_data.index.tolist()
    stock_list=[stock for stock in stock_list if not  stock.startswith('688')]
    stock_list=[stock for stock in stock_list if not  stock.startswith('30')]
return stock_list

stock_list=get_normal_stocks(pre_date)

Ensuite, nous obtenons les données récentes du marché de ces actions. Ici, nous avons seulement besoin d'obtenir le cours de clôture et le cours limite quotidien :

#获取截至昨天收盘近10日数据
df_raw = get_price(stock_list, start_date=None, end_date=pre_date,count=period,frequency='daily', fields=['close','high_limit'],skip_paused=True, fq='pre',panel=False)
print(len(df_raw))

Enfin, pour filtrer le stock de candidats, nous pouvons stipuler artificiellement l'intervalle de temps entre les deux canons, par exemple dans les 10 jours. Notez que la capture du canon Shuangxiang est achetée le jour où la deuxième tourelle du canon Shuangxiang est sortie, au lieu de l'acheter le lendemain de la sortie du canon Shuangxiang, ce qui n'a aucun sens.

Ensuite, les conditions de sélection des actions Shuangxiangpao sont définies comme suit :

1. Il y a une limite quotidienne au cours des 10 derniers jours

2. Pas de limite quotidienne hier

#筛选备选股
#条件:1.昨日未涨停2.近10日内有涨停
rec_zt_df=df_raw.loc[df_raw.close==df_raw.high_limit]#近10日涨停股
rec_zt_list=list(set(rec_zt_df['code']))#近10日涨停股列表
pre_zt_list=rec_zt_df[rec_zt_df.time==pre_date]['code'].tolist()#昨日涨停股列表
cand_list=list(set(rec_zt_list).difference(set(pre_zt_list)))#备选股列表
cand_preclose_dict={}#存放被选股昨日收盘价
for code in cand_list:
    pre_close=df_raw[(df_raw.time==pre_date)&(df_raw.code==code)]['close'].values[0]#昨日收盘价
    cand_preclose_dict[code]=pre_close
print('备选股总计{}只'.format(len(cand_list)))

Une fois les actions candidates passées au crible, nous pouvons les suivre en temps réel pendant la session.

3. Suivi des modifications

Nous choisissons la fréquence de surveillance au niveau de la minute, et pouvons contrôler librement la durée de surveillance :

#用于盘中实时监控,频率为每分钟,9点30分之后运行
for i in range(120):
    curr_time=datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S')
if curr_time[-8:-3]>='15:00':
        print('==结束今日监控程序==')
break
else:
        print('**********'+curr_time+'**********')
        curr_df=get_price(cand_list,count=1,end_date=datetime.datetime.today(),frequency='1m', fields=['close','high_limit','volume'],skip_paused=True, fq='pre',panel=False)
for code,pre_close in cand_preclose_dict.items():
            curr_p=curr_df.loc[curr_df.code==code].close.values[0]#当前价格
            curr_v=curr_df.loc[curr_df.code==code].close.values[0]#当前成交量
            curr_r=round((curr_p-pre_close)/pre_close*100,2)#当前涨幅
if (curr_r>5)&(curr_r<7):
                print('warning-5:',code,security_code_name_dict[code],'  涨幅:',curr_r,'成交量:',curr_v)
if (curr_r>=7)&(curr_r<9):
                print('warning-7:',code,security_code_name_dict[code],'  涨幅:',curr_r,'成交量:',curr_v)
if (curr_r>=9):
                print('warning-9:',code,security_code_name_dict[code],'  涨幅:',curr_r,'成交量:',curr_v)
        time.sleep(60)

L'effet de surveillance est le suivant :

Pour la commodité de la démonstration, nous ne surveillons ici que l'augmentation et le volume des transactions. En fait, toutes les autres informations sur le marché peuvent être surveillées de la même manière. Les actions de surveillance ci-dessus Aofei Entertainment, Nanning Sugar, I Love My Home et Cambridge Technology avaient toutes leur limite quotidienne ! ! !

Nous pouvons également transmettre de manière synchrone les informations de transaction à l'entreprise WeChat via l'API, afin de réaliser le rappel automatique des points d'achat et de vente sur le marché : 

Exécutez simplement la transaction directement après le rappel, pas besoin de surveiller le marché du tout, économisant du temps et des efforts :

 De cette façon, nous pouvons faire attention aux stocks de taureaux qui peuvent sortir de la limite quotidienne du pistolet à double coup à la première fois, n'est-ce pas très simple ?

Code source de cet article : Partage de la recherche quantitative : comment utiliser python pour attraper le double coup de la limite quotidienne

Je suppose que tu aimes

Origine blog.csdn.net/weixin_37475278/article/details/130041289
conseillé
Classement