python + windQuant:挑选公司

news2024/11/25 15:04:49

给定一些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):    #周3
        today_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 > ma20
    cond4: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_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)
    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+=1
    print(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.coloradmin.cn/o/552052.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

黑马QtDay1学习笔记

文章目录 黑马QtDay1学习笔记1 Qt简介2 Qt项目创建2.1 项目名称 不能有空格和中文2.2 项目路径不能有中文路径2.3 创建窗口三大基类2.4 Main函数中2.5 .pro文件 3 QPushButton按钮4 Qt中的对象树5 Qt中的坐标系6 Qt中信号和槽基本使用7 自定义信号和槽7.1 自定义信号 写在 sign…

【C++】——模板(泛型编程+函数模板+类模板)

文章目录 1. 前言2. 泛型编程3. 函数模板3.1 函数模板的原理3.2 函数模板的实例化3.3 模板参数的匹配原则 4. 类模板4.1 类模板的实例化 5. 结尾 1. 前言 之前我们学习了函数重载&#xff0c;让我们在写相似函数的时候非常方便&#xff0c;但函数重载还有很多不足的地方&#…

车载基础软件——嵌入式系统时间特性分析

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 人们会在生活中不断攻击你。他们的主要武器是向你灌输对自己的怀疑&#xff1a;你的价值、你的能力、你的潜力。他…

AI人工智能逻辑回归的原理、优缺点、应用场景和实现方法

逻辑回归&#xff08;Logistic Regression&#xff09;是一种常见的机器学习算法&#xff0c;它被广泛应用于分类问题。在人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;领域中&#xff0c;逻辑回归是一种简单而有效的算法&#xff0c;可以用于许…

GC 三色标记算法(Go Java版本)

一、前言 GC全称Garbage Collection&#xff0c;目前主流的垃圾回收算法有两类&#xff0c;分别是追踪式垃圾回收算法&#xff08;Tracing garbage collection&#xff09;和引用计数法&#xff08; Reference counting &#xff09;。 而三色标记法是属于追踪式垃圾回收算法…

github copilot chat申请,安装,及常见问题解决

申请 首先申请&#xff0c;并开通copilot, 地址为&#xff1a;https://github.com/features/copilot&#xff0c;copilot 一个月10美金&#xff0c;第一个月免费&#xff0c;支持国内的信用卡。 开通copilot之后&#xff0c;可以申请 copilot chat 的预览版功能&#xff0c;网…

5-高级SQL查询

PS&#xff1a;插入查询结果 把一张表查询出的结果&#xff0c;插入到另一张表中。要求两张表的列数和列类型要匹配。 前面讲的所有select规则在此处都适用~ 1.聚合查询 聚合查询&#xff1a;行和行之间进行运算。带表达式查询&#xff1a;列和列之间进行运算。 常⻅的聚合函…

MySQL——聚合函数

我们上一篇讲到了 SQL 单行函数。实际上 SQL 函数还有一类,叫做聚合(或聚集、分组)函数,它是对一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值。接下来我们来看看什么是聚合函数及聚合函数的分类 1. 聚合函数介绍 1.1 什么是聚合函数? 聚合函数作用于…

redis 7.x 缓存双写一致性的解决方案

一 redis缓存双写一致性 1.1 保证redis一致性的原则 1.给缓存设置过期时间&#xff0c;定期清理缓存并写回&#xff0c;是保证最终一致性的解决方案。使用场景&#xff1a;在数据读多写少的情况下作为缓存来使用。 我们可以对已存入缓存的数据设置过期时间&#xff0c;所有…

Qt-学习 QJson协议解析

内容来源于哔站视频&#xff0c;仅仅作为自己的笔记记录&#xff0c;感兴趣的小伙伴去原作品大call(此处给作者三鞠躬&#xff09;&#xff0c;Json以及Json在Qt中的使用 【Qt/C/C】_哔哩哔哩_bilibili 目录 1、Json介绍&#xff1a; 1.1 Json的定义 1.2 Json的数据格式 1…

Java面试知识点(全)- Java并发- Java并发基础

Java面试知识点(全) 导航&#xff1a; https://nanxiang.blog.csdn.net/article/details/130640392 注&#xff1a;随时更新 多线程解决什么问题 CPU、内存、I/O 设备的速度是有极大差异的&#xff0c;为了合理利用 CPU 的高性能&#xff0c;平衡这三者的速度差异&#xff0c…

thinkphp6中使用session设置无效问题的解决及注意事项

就如thinkphp官方在文档开头所描述的一样&#xff0c;ThinkPHP6.0基于精简核心和统一用法两大原则在5.1的基础上对底层架构做了进一步的优化改进&#xff0c;并更加规范化&#xff1b;其实从5.x版本开始thinkphp本身就是为api应用而生。特别是在6.0版本开始框架默认压根不开启和…

大数据-玩转数据-FLINK(Yarn模式)的安装与部署

一、为什么要用Flink on Yarn HA 模式 默认情况下&#xff0c;Flink 只有一个JobManager&#xff0c;这将导致单点故障&#xff0c;使用JobManager HA &#xff0c;集群可以从单点故障中恢复&#xff0c;从而避免单点故障&#xff0c;我们可以在Standalone 或 Flink on Yarn 集…

【2023 · CANN训练营第一季】初识新一代开发者套件 Atlas 200I DK A2---章节小测微认证考试

微认证考试 1、以下不属于模型适配工具内置的模型的是&#xff1f; A. 目标检测模型 B. 图像分类模型 C. 语义分割模型 D. 关键点检测模型 C 2、模型适配工具安装前需要先安装&#xff1f; A. mobaXterm B. python3.9 C. Vscode D. Anaconda D 3、在哪个目录下可查看端…

docker 部署 -v指令遇到docker: invalid reference format.

检查了半天才发现&#xff0c;换行符后面不能有空格&#xff01;有空格就报错&#xff01;

vite创建vue3项目

vite创建vue3项目 方式一&#xff08;推荐&#xff09; 脚手架快速创建&#xff0c;勾选依赖的方式 这种方式创建的项目最快捷&#xff0c;因为基本依赖都装好了 npm init vuelatest方式二 使用官方模板创建vue3项目 这种方式会基于模板创建项目&#xff0c;对于官方模板vu…

Rollup 基本概念及使用

Rollup是一款基于ESModule模块规范实现的JavaScript打包工具&#xff0c;在前端社区中赫赫有名&#xff0c;同时也在Vite的架构体系中发挥着重要作用。不仅是Vite生产环境下的打包工具&#xff0c;其插件机制也被Vite所兼容&#xff0c;可以说是Vite的构建基石。 接下来&#…

cesium entity与时间轴关联(添加运动轨迹)

1、先添加一个entity实体 用model加载一个飞机实体 let entity viewer.entities.add({position: Cesium.Cartesian3.fromDegrees(120, 21),model: {uri: "/static/Cesium_Air.glb",minimumPixelSize: 128,maximumScale: 20000,},}) viewer.trackedEntity entity;…

LIN-报文结构

文章目录 协议规范一、字节场二、报文头&#xff08;HEADER FIELDS&#xff09;同步间隔&#xff08;synchronisation break)同步场&#xff08;SYNCH FIELD&#xff09;标识符场&#xff08;IDENTIFIER FIELD&#xff09; 三、数据场&#xff08;DATE FIELDS&#xff09;四、校…

【负载均衡式在线OJ】 数据库

文章目录 41.使用Postman进行综合调试42.了解-前端预备52. 添加oj用户到MySQL53. 使用MySQL_Workbench创建表结构54. 测试录题功能55.重新设计oj_model56.编写oj_model具体代码57.MySQL综合测试58.结项与项目扩展思路 41.使用Postman进行综合调试 完善判题功能 先编译再测试 …