python + windQuant:挑选公司

给定一些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("计算结束")

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/21690.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

qiankun + Vite + React + Vue + Angular 快速构建前端微服务

文章目录 一、主应用 vite二、微应用 react三、微应用 vue四、微应用 angular五、项目地址 一、主应用 vite npm npm create vitelatestyarn yarn create vite选择是否继续 Need to install the following packages:create-vite3.2.1 Ok to proceed? (y) y项目名称 Project…

nodejs进阶(3)—路由处理

1. url.parse(url)解析 该方法将一个URL字符串转换成对象并返回。 url.parse(urlStr, [parseQueryString], [slashesDenoteHost]) 接收参数&#xff1a; urlStr url字符串 parseQueryString 为true时将使用查询模…

四月成功上岸阿里,年后准备了两个月,要个21k应该不过分吧~

先说下我基本情况&#xff0c;本科不是计算机专业&#xff0c;现在是学通信&#xff0c;然后做图像处理&#xff0c;可能面试官看我不是科班出身没有问太多计算机相关的问题&#xff0c;因为第一次找工作&#xff0c;阿里的游戏专场又是最早开始的&#xff0c;就投递了&#xf…

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

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

DistilPose: Tokenized Pose Regression with Heatmap Distillation

论文名字&#xff1a;DistilPose&#xff1a;使用热图蒸馏的令牌化姿势回归 论文地址&#xff1a;2303.02455.pdf (arxiv.org)https://arxiv.org/pdf/2303.02455.pdf项目地址&#xff1a;yshMars/DistilPose: Implementation for: DistilPose: Tokenized Pose Regression with…

五、c++学习(加餐1:汇编基础学习)

经过前面几节课的学习&#xff0c;我们在一些地方都会使用汇编来分析&#xff0c;我们学习汇编&#xff0c;只是学习一些基础&#xff0c;主要是在我们需要深入分析语法的时候&#xff0c;使用汇编分析&#xff0c;这样会让我们更熟悉c编译器和语法。 从这节课开始&#xff0c…

SQL删除重复的记录(只保留一条)-窗口函数row_number()

文章目录 一、关于mysql表中数据重复二、聚合函数min(id)not in二、窗口函数row_number()四、补充&#xff1a;常见的窗口函数 一、关于mysql表中数据重复 关于删除mysql表中重复数据问题&#xff0c;本文中给到两种办法&#xff1a;聚合函数、窗口函数row_number()的方法。 (注…

UML类图画法及其关系

UML类图画法及其关系 本文主要是介绍 UML类图画法及其关系&#xff0c;方便今后温习&#xff01;&#xff01;&#xff01; 一、类之间的关系汇总 泛化&#xff08;Generalization&#xff09;实现&#xff08;Realization&#xff09;关联&#xff08;Association&#xff…

算法时间复杂度

参考视频&#xff1a;https://www.bilibili.com/video/BV14j411f7DJ 目录 1.常数阶O(1) 2.对数阶O(IogN) 3.线性阶O(n) 4.线性对数阶O(nlogN) 5.平方阶O(n^2) 6.立方阶O(n^3) 7.K次方阶O(n^k) 8.指数阶(2^n) 9.阶乘O(n!) 两层for循环 for (int i 1; i <…

Linux基本指令实现4及热键指令详解

目录 Linux热键补充&#xff1a; 1.bc指令&#xff1a; Tab键的智能补充&#xff1a; ctrlc键&#xff1a; uname指令&#xff1a; lscpu指令&#xff1a; lsmem指令&#xff1a; df -h指令&#xff1a; 关机指令&#xff1a; 扩展指令&#xff1a; Linux热键补充&#…

【Linux】驱动学习,先啃框架

目录 前言&#xff1a; 一、驱动设计 &#xff08;1&#xff09;面向对象&#xff1a; &#xff08;2&#xff09;分层&#xff1a; &#xff08;3&#xff09;分离&#xff1a; 二、驱动框架 &#xff08;1&#xff09;传统框架 &#xff08;2&#xff09;总线设备驱…

STM32单片机蓝牙APP自动伸缩遮阳棚雨伞雨滴角度温度光强控制

实践制作DIY- GC0130-蓝牙APP自动伸缩遮阳棚 一、功能说明&#xff1a; 基于STM32单片机设计-蓝牙APP自动伸缩遮阳棚 二、功能介绍&#xff1a; 基于STM32F103C系列&#xff0c;LCD1602显示器&#xff0c;光敏电阻采集光强&#xff0c;雨滴传感器&#xff0c;ULN2003控制步进…

chatgpt赋能Python-pythonddos

PythonDDoS&#xff1a;了解一下这种利用Python语言的攻击方式 PythonDDoS&#xff08;Python分布式拒绝服务攻击&#xff09;是一种利用Python语言编写的DDoS攻击技术&#xff0c;它利用了Python的强大处理能力&#xff0c;可以构建高效的攻击工具&#xff0c;让攻击者能够轻…

Linux基本指令3

目录 一.基本常用指令 指令1&#xff1a;find命令&#xff1a; 指令2&#xff1a;which命令&#xff1a; 指令3&#xff1a;alias命令&#xff1a; 指令4&#xff1a;whereis which&#xff0c;find&#xff0c;whereis这三个搜索命令的区别&#xff1a; 指令5&#xff…

扫眼球换“世界币” ChatGPT之父“剥削穷人”?

ChatGPT火爆全球后&#xff0c; 山姆奥特曼&#xff08;Sam Altman&#xff09;创立的加密项目Worldcoin&#xff08;世界币&#xff09;重回大众视野。这个项目诞生于2年前。那时&#xff0c;埋头迭代GPT模型的OpenAI还未如此知名&#xff0c;该公司的CEO 山姆奥特曼也位列科技…

【中医推荐】33部中医书籍,中医医书精品(在线免费阅读),值得珍藏的国粹,涵盖中药、针灸、推拿、按摩、拔罐、气功,食疗等诸多领域

中医诞生于原始社会&#xff0c;春秋战国时期中医理论已基本形成&#xff0c;之后历代均有总结发展。除此之外对汉字文化圈国家影响深远&#xff0c;如日本医学、韩国韩医学、朝鲜高丽医学、越南东医学等都是以中医为基础发展起来的。 中医承载着中国古代人民同疾病作斗争的经…

因为一个Bug,差点损失了100w

大家好&#xff0c;我是洋子 最近在做单接口的性能测试比较多&#xff0c;在压测过程发现了一个比较有意思的问题&#xff0c;拿出来和大家分享一下 背景是这样的&#xff0c;最近在搞线上的抽奖活动&#xff0c;压测的对象是一个抽奖接口&#xff0c;主要的逻辑见程序的流程…

Vmware Linux磁盘空间扩容

Linux磁盘空间扩容 VMware虚拟机中配置&#xff08;1&#xff09;进入虚拟机设置界面&#xff0c;选择扩展磁盘容量。&#xff08;2&#xff09; 本次是在原来30G的基础上扩展为50G。 Linux中设置&#xff08;1&#xff09; 可以看出sda3是根分区&#xff0c;下面按照博客提示&…

KVM(二)命令行新建虚拟机

目录 一、准备工作 二、新建虚拟机 2.1 文件准备 2.2 正式安装 2.3 时区设置 2.4 安装设置 2.5 设置root用户密码 2.6 vm2安装完成 三、进入虚拟机vm2 四、网络设置 五、参考链接 若还未部署KVM&#xff0c;请参考第一节&#xff1a; KVM&#xff08;一&#xff09;…