历史交易数据涨跌分级

历史交易数据涨跌分级

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
相关推荐
VidDown4 小时前
24fps 转 25fps 不只是改个数字:帧率转换、PAL/NTSC 与音频补偿
python·网络协议·音视频·视频编解码·视频
死磕音视频6 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
凤山老林6 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
pride.li8 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
databook8 小时前
用 Pydantic AI 从零搭建一个能干活的 AI Agent
人工智能·python
康小旺8 小时前
把 markitdown 做成 Windows 桌面版:拖进文档就出 Markdown,附 233MB→64MB 打包裁剪全过程
python
启观川9 小时前
数据结构与算法-第 3 章 常用算法-贪心算法
数据结构·笔记·python·算法·贪心算法
南笙北梦9 小时前
本地开源大模型多轮对话显存泄漏排查与修复实录
python
小羊没烦恼!9 小时前
如何在IIS6,7中部署ASP.NET网站?
数据库·后端·python·web安全·asp.net
钱栈up10 小时前
扫完 3.5 万文件后,我发现了 521 组散落的同名文件
爬虫·python·数据分析