历史交易数据涨跌分级

历史交易数据涨跌分级

python 复制代码
# encoding:utf-8
import sys,traceback
from loguru import logger

sys.path.append("..")
from QhSpiderTool import QhDorpFiled
from QhCsvMode import *



def QhZhangDieFenJi(QhDfData,QhFangFa="A"):

    """
    历史交易数据涨跌分级
    作者:阙辉
    :param QhDfData:
    :return:
    """

    QhZDFZ10 = 0.1
    QhZDFZ20 = 0.2
    QhJYBK = QhDfData["JYBK"].values[0]  # 交易板块,从流数据获取

    QhZhangTingBiCanShu = {  # 涨跌停分级参数
        "ZhangDieFu": [
            {# SHA|上证A股,SZA|深证A股,BJA|北证A股,
                "TiaoJian": ["SHA", "SZA", "BJA"],"BiLi": 0.1,},
            {# KCB|科创板,CYB|创业板,
                "TiaoJian": ["KCB", "CYB"],"BiLi": 0.2,},
            ],
        "ZhangDieFu0": {"SHA": QhZDFZ10, # SHA|上证A股
                       "SZA": QhZDFZ10,  # SZA|深证A股
                       "BJA": QhZDFZ10,  # BJA|北证A股
                       "KCB": QhZDFZ20,  # KCB|科创板
                       "CYB": QhZDFZ20,  # CYB|创业板
                       },
        "FanWei": [-0.98, -0.8, -0.7, -0.5, -0.2, 0, 0.2, 0.5, 0.7, 0.8, 0.98],  # 计算比例参数
        "FenJiCanShu":{
            # 涨跌分级参数  "FZ":[] 作为阀值缓存使用,暂时不用
            -6:{"FW":[0,-0.2],"PD":"<|>=","FZ":[]},
            -5:{"FW":[-0.2,-0.5],"PD":"<|>=","FZ":[]},
            -4:{"FW":[-0.5,-0.7],"PD":"<|>=","FZ":[]},
            -3:{"FW":[-0.7,-0.8],"PD":"<|>=","FZ":[]},
            -2:{"FW":[-0.8,-0.98],"PD":"<|>=","FZ":[]},
            -1:{"FW":[-0.98],"PD":"<","FZ":[]}, # 跌停
            0:{"FW":[0],"PD":"==","FZ":[]},     # 平
            1:{"FW":[0.98],"PD":">","FZ":[]},   # 涨停
            2:{"FW":[0.8,0.98],"PD":">|<=","FZ":[]},
            3:{"FW":[0.7,0.8],"PD":">|<=","FZ":[]},
            4:{"FW":[0.5,0.7],"PD":">|<=","FZ":[]},
            5:{"FW":[0.2,0.5],"PD":">|<=","FZ":[]},
            6:{"FW":[0,0.2],"PD":">|<=","FZ":[]},
        },
    }
    # 获取参数 阙辉
    QhZhangDieFuDic = QhZhangTingBiCanShu["ZhangDieFu"]
    QhFanWeiA = QhZhangTingBiCanShu["FanWei"]
    FenJiCanShuDic = QhZhangTingBiCanShu["FenJiCanShu"]
    ZhangDieFu0Dic = QhZhangTingBiCanShu["ZhangDieFu0"]
    if QhFangFa == "A":
        # 计算比例 阙辉
        # JYBK 代表交易板块
        for QhRow in QhZhangDieFuDic:
            QhTiaoJian = QhRow["TiaoJian"]   #
            QhBiLi = QhRow["BiLi"]  # 涨跌比例
            for QhRow01 in QhFanWeiA:
                QhFaZhi = QhRow01  # 阀值
                # 根据不同板块计算阀值,用于分级比较,阀值存储在df中,比较完后,阀值再删除掉   阙辉
                QhDfData.loc[(QhDfData["JYBK"].isin(QhTiaoJian)),"QFZ_{}".format(str(QhFaZhi))] = round(QhBiLi * QhFaZhi,4)  # 计算阀值比例



        # 分级判断 阙辉
        for QhKey,QhValue in FenJiCanShuDic.items():
            QhFenJi = QhKey   # 分级值
            QhFanWei = QhValue["FW"]   # 分级范围
            QhFanWeiLen = len(QhFanWei)
            QhPanDuan = QhValue["PD"]  # 分级判断值

            print(QhFanWei)
            # print(QhFanWeiLen)
            if QhFanWeiLen > 2:
                logger.error("【涨跌分级】分级范围参数超范围,请检查,本次不计算,QueHui!")
                continue

            # QZDFJ|涨跌分级
            QhFiledZD = "ZDF"
            if QhFanWeiLen == 1:  # 单条件
                QhFanWei0 = QhFanWei[0]
                if QhPanDuan == ">":  # 涨停
                    QhDfData.loc[(QhDfData[QhFiledZD] > QhDfData["QFZ_{}".format(str(QhFanWei0))]),"QZDFJ"] = QhFenJi
                elif QhPanDuan == "==":  # 平
                    QhDfData.loc[(QhDfData[QhFiledZD] == QhDfData["QFZ_{}".format(str(QhFanWei0))]), "QZDFJ"] = QhFenJi
                elif QhPanDuan == "<":  # 跌停
                    QhDfData.loc[(QhDfData[QhFiledZD] < QhDfData["QFZ_{}".format(str(QhFanWei0))]), "QZDFJ"] = QhFenJi
            elif QhFanWeiLen == 2:  # 多条件
                QhFanWei0 = QhFanWei[0]
                QhFanWei1 = QhFanWei[1]
                if QhPanDuan == ">|<=":  # 涨
                    QhDfData.loc[(QhDfData[QhFiledZD] > QhDfData["QFZ_{}".format(str(QhFanWei0))]) &
                                 (QhDfData[QhFiledZD] <= QhDfData["QFZ_{}".format(str(QhFanWei1))]),
                                 "QZDFJ"] = QhFenJi
                elif QhPanDuan == "<|>=":  # 跌
                    QhDfData.loc[(QhDfData[QhFiledZD] < QhDfData["QFZ_{}".format(str(QhFanWei0))]) &
                                 (QhDfData[QhFiledZD] >= QhDfData["QFZ_{}".format(str(QhFanWei1))]),
                                 "QZDFJ"] = QhFenJi

        # 删除用于比较的阀值
        QhDfData = QhDorpFiled(QhDfData,["QFZ_{}".format(str(QhRow)) for QhRow in QhFanWeiA])

    else:

        # 分级判断 阙辉
        for QhKey, QhValue in FenJiCanShuDic.items():
            QhFenJi = QhKey  # 分级值
            QhFanWei = QhValue["FW"]  # 分级范围
            QhFanWeiLen = len(QhFanWei)
            QhPanDuan = QhValue["PD"]  # 分级判断值
            QhZDFRow = ZhangDieFu0Dic[QhJYBK]    # 找到板块的涨跌幅

            if QhFanWeiLen > 2:  # 校验参数是否超范围
                logger.error("【涨跌分级】分级范围参数超范围,请检查,本次不计算,QueHui!")
                continue

            # QZDFJ|涨跌分级  直接法
            QhFiledZD = "ZDF"
            if QhFanWeiLen == 1:  # 单条件
                QhFanWei0 = QhFanWei[0]
                QhFZ0 = round(QhFanWei0 * QhZDFRow,4)  # 阀值0
                if QhPanDuan == ">": QhDfData.loc[(QhDfData[QhFiledZD] > QhFZ0), "QZDFJ"] = QhFenJi       # 涨停
                elif QhPanDuan == "==": QhDfData.loc[(QhDfData[QhFiledZD] == QhFZ0), "QZDFJ"] = QhFenJi   # 平
                elif QhPanDuan == "<": QhDfData.loc[(QhDfData[QhFiledZD] < QhFZ0), "QZDFJ"] = QhFenJi     # 跌停
            elif QhFanWeiLen == 2:  # 多条件
                QhFanWei0 = QhFanWei[0]
                QhFZ0 = round(QhFanWei0 * QhZDFRow, 4)  # 阀值0
                QhFanWei1 = QhFanWei[1]
                QhFZ1 = round(QhFanWei1 * QhZDFRow, 4)  # 阀值1
                if QhPanDuan == ">|<=": QhDfData.loc[(QhDfData[QhFiledZD] > QhFZ0) & (QhDfData[QhFiledZD] <= QhFZ1),"QZDFJ"] = QhFenJi    # 涨
                elif QhPanDuan == "<|>=": QhDfData.loc[(QhDfData[QhFiledZD] < QhFZ0) & (QhDfData[QhFiledZD] >= QhFZ1),"QZDFJ"] = QhFenJi  # 跌

    return QhDfData

if __name__ == '__main__':
    QhDfData = QhStockHisJiaoYiModel(QhScode="Q000001",QhFrom="DF",QhShiChang="SZA",QhZhouQi="日",QhFuQuan="前复权")
    QhDfData = QhZhangDieFenJi(QhDfData)
    QhDfData.to_csv("test.csv",encoding="gbk")
    print(QhDfData)
    pass
相关推荐
zone773910 分钟前
001:简单 RAG 入门
后端·python·面试
F_Quant16 分钟前
🚀 Python打包踩坑指南:彻底解决 Nuitka --onefile 配置文件丢失与重启报错问题
python·操作系统
允许部分打工人先富起来1 小时前
在node项目中执行python脚本
前端·python·node.js
IVEN_1 小时前
Python OpenCV: RGB三色识别的最佳工程实践
python·opencv
haosend2 小时前
AI时代,传统网络运维人员的转型指南
python·数据网络·网络自动化
曲幽2 小时前
不止于JWT:用FastAPI的Depends实现细粒度权限控制
python·fastapi·web·jwt·rbac·permission·depends·abac
IVEN_20 小时前
只会Python皮毛?深入理解这几点,轻松进阶全栈开发
python·全栈
Ray Liang21 小时前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
AI攻城狮1 天前
如何给 AI Agent 做"断舍离":OpenClaw Session 自动清理实践
python
千寻girling1 天前
一份不可多得的 《 Python 》语言教程
人工智能·后端·python