python + windQuant:挑选公司

news/2024/11/8 14:59:05/

给定一些k线选股指标,如何挑选符合条件的公司,以python + windquant为例?
【申明:本例只用来作为python学习交流之用,切勿以此作为投资的选股条件】

0、用以下条件挑选公司:

仅作示例用:
【1】本周1 相对于上周五:close上跳,跳空
【2】周2,周3两天,跳空都没有补起来【没有回调——close周2,close周3 > high上周五】
【3】close周2, close周3 > ma20
【4】close周2 > close周1 or close周3 > close周1

1、连接服务器

from WindPy import w
w.start()
w.isconnected()
print(w.isconnected())

2、获取全部A股的股票代码

all_stocks = w.wset("sectorconstituent", "date=2022-05-18;sector=全部A股",usedf=True)
all_stocks_df = all_stocks[1]
all_stocks_df.head(10)

在这里插入图片描述

3、在已经过去的日期系列里面,找到离【今天】最近的【周一、周二、周三】日期组,并输出日期。

from datetime import date, timedelta'''
给定一个指定的日期,从一个日期系列里面,找到此前最近的[周一,周二,周三]组成的系列,输出日期系列
测试代码:
today = date(2023,5,17)
monday, tuesday, wednesday = find_weekday_dates(today)
print(monday, tuesday, wednesday)
'''
def find_weekday_dates(today):# 计算今天是星期几(0代表星期一,6代表星期日)today_weekday = today.weekday()print(today_weekday)if(today_weekday<=4):    #周3today_weekday += 7# 计算距离最近的周一、周二、周三的日期monday = today - timedelta(days=today_weekday)tuesday = monday + timedelta(days=1)wednesday = monday + timedelta(days=2)return monday, tuesday, wednesday

测试代码:
给定的【今天】是【2023-05-17】找到最近的【周一,周二,周三】

today = date(2023,5,17)
monday, tuesday, wednesday = find_weekday_dates(today)
print(monday, tuesday, wednesday)

2023-05-08 2023-05-09 2023-05-10

在这里插入图片描述

计算上个周五的日期

from datetime import datetime, timedelta# 计算前3天的日期——上个周五的日期
last_friday = monday - timedelta(days=3)
last_friday

4、提取ohlc数据,计算指标,判断条件

计算起始日期和结束日期(today)

today = date.today()
last_month_today = today - timedelta(days = 40)
last_month_today

提取40个日历日的数据

df = w.wsd("000001.SZ", "close,open,low,high", last_month_today, today, "", usedf=True)[1]
df

在这里插入图片描述

5、计算ma20的值

# 计算 MA20 数据
ma20 = df["CLOSE"].rolling(window=20).mean()# 将 MA20 数据添加到 DataFrame 中
df["MA20"] = ma20
df

在这里插入图片描述

6、条件判断

【1】本周1 相对于上周五:close上跳,跳空
【2】周2,周3两天,跳空都没有补起来【没有回调——close周2,close周3 > high上周五】
【3】close周2, close周3 > ma20
【4】close周2 > close周1 or close周3 > close周1

#monday, tuesday, wednesday last_friday
cond1 = df.loc[monday].CLOSE > df.loc[last_friday].HIGH
cond2 = (df.loc[tuesday].CLOSE > df.loc[last_friday].HIGH) and (df.loc[wednesday].CLOSE > df.loc[last_friday].HIGH)
cond3 = (df.loc[tuesday].CLOSE > df.loc[tuesday].MA20) and (df.loc[wednesday].CLOSE > df.loc[wednesday].MA20)
cond4 = (df.loc[tuesday].CLOSE > df.loc[monday].CLOSE) and (df.loc[wednesday].CLOSE > df.loc[monday].CLOSE)
print(cond1,cond2,cond3,cond4)

7、合并功能:【下载k线】【计算指标】【判断条件】

"""
功能:获取k线数据,并计算指标,然后用指标来判断选股条件,并返回计算结果
参数:stockID:股票代码last_month_today:获取k线时的起始日期today:获取k线时的结束日期
返回:[stockID,cond1,cond2,cond3,cond4]cond1:本周1 相对于上周五:close上跳,跳空cond2:周2,周3两天,跳空都没有补起来【没有回调——close周2,close周3  > high上周五】cond3:close周2, close周3 > ma20cond4:close周2 > close周1  or close周3 > close周1
案例:res = calculate_condition("000001.SZ",last_month_today,today)res
"""
def calculate_condition(stockID,last_month_today,today):df = w.wsd(stockID, "close,open,low,high", last_month_today, today, "", usedf=True)[1]# 计算 MA20 数据ma20 = df["CLOSE"].rolling(window=20).mean()df["MA20"] = ma20#计算选股条件是否满足#monday, tuesday, wednesday last_fridaycond1 = df.loc[monday].CLOSE > df.loc[last_friday].HIGHcond2 = (df.loc[tuesday].CLOSE > df.loc[last_friday].HIGH) and (df.loc[wednesday].CLOSE > df.loc[last_friday].HIGH)cond3 = (df.loc[tuesday].CLOSE > df.loc[tuesday].MA20) and (df.loc[wednesday].CLOSE > df.loc[wednesday].MA20)cond4 = (df.loc[tuesday].CLOSE > df.loc[monday].CLOSE) and (df.loc[wednesday].CLOSE > df.loc[monday].CLOSE)#print(cond1,cond2,cond3,cond4)return[stockID,cond1,cond2,cond3,cond4]   

8、计算股池的股票,挑选公司

import pandas as pd
res_df = pd.DataFrame(columns = ['stockID','cond1','cond2','cond3','cond4'])
i= 0
for stockid in all_stock_code.values:i+=1print(i)#计算指标和条件rtn = calculate_condition(stockid,last_month_today,today)new_row_data = {'stockID': rtn[0], 'cond1': rtn[1], 'cond2': rtn[2], 'cond3': rtn[3], 'cond4': rtn[4]}res_df = res_df.append(new_row_data,ignore_index = True)
print("计算结束")

在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/83241.html

相关文章

Spring Cloud Netflix实现服务发现与负载均衡:提高应用的可用性和可靠性

Spring Cloud Netflix实现服务发现与负载均衡&#xff1a;提高应用的可用性和可靠性 一、简介1. 云时代应用需求的变化2. 微服务架构及其对服务发现和负载均衡的要求3. Spring Cloud Netflix作为微服务框架的选择 二、Spring Cloud Netflix概述1. Spring Cloud Netflix的由来和…

1013 Battle Over Cities(34行代码+详细注释)

分数 25 全屏浏览题目 切换布局 作者 CHEN, Yue 单位 浙江大学 It is vitally important to have all the cities connected by highways in a war. If a city is occupied by the enemy, all the highways from/toward that city are closed. We must know immediately i…

Knowledge-Based Systems latex论文模板

Knowledge-Based Systems 杂志官网https://www.sciencedirect.com/journal/knowledge-based-systems Knowledge-Based Systems 期刊投稿网址 Editorial Manager LetPub 投稿经验和评论&#xff1a; KNOWLEDGE-BASED SYSTEMS 影响因子8.139分&#xff0c;是几区&#xff0c;20…

Tcl-5. format 命令

format 命令和 C 语言中的 printf 和 sprintf 命令类似。它根据一组格式说明来格式化字符 串。此命令不会改变被操作字符串的内容。 [语法]&#xff1a;format spec value1 value2 ... spec 变元包含了格式说明关键词和附加文字。使用%来引入一个关键词&#xff0c;后跟 0 个…

effective c++ 20 传引用代替传值

effective c 20 传引用代替传值 本节&#xff0c;作者开始讨论引用。我们知道c语言已经有了指针&#xff0c;通过指针我们也就可以修改变量本身&#xff0c;而不是修改变量的副本&#xff08;传值&#xff09;&#xff0c; 那么在c中又搞出来个引用&#xff0c; 那么其是不是有…

七、SpringBoot从入门到精通

一、SpringBoot概述 Spring Boot是一个基于Spring框架的开发框架&#xff0c;用于快速构建能够立即运行的生产级Spring应用程序。它是Spring的一个子项目&#xff0c;致力于使Spring开发更加简单、快速和便捷。 二、SpringBoot基础程序 1、点击Spring Initializer&#xff0…

博客系统的后端设计(八) - 实现发布博客功能

文章目录 发布博客1. 约定前后端交互接口2. 服务器代码3. 客户端代码4. 出现的问题 发布博客 在原来的编辑页面点击发布文章按钮&#xff0c;是不会有什么效果的。 这是因为此时还不能实现前后端的交互。 1. 约定前后端交互接口 请求使用 POST&#xff0c;路径是 /blog title这…

大数据治理入门系列:数据血缘关系

血缘关系在人类社会中扮演着重要角色。大多数家庭是基于血缘关系形成的&#xff0c;而家庭作为社会的基本单元&#xff0c;对维系社会稳定发挥着重要关系。其实&#xff0c;数据之间也存在类似的血缘关系。数据从产生、加工、流转&#xff0c;一直到消亡&#xff0c;每个环节必…