历史交易数据涨跌分级

历史交易数据涨跌分级

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
相关推荐
wyiyiyi2 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
mit6.8242 小时前
[1Prompt1Story] 滑动窗口机制 | 图像生成管线 | VAE变分自编码器 | UNet去噪神经网络
人工智能·python
没有bug.的程序员3 小时前
JVM 总览与运行原理:深入Java虚拟机的核心引擎
java·jvm·python·虚拟机
甄超锋3 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
AntBlack4 小时前
不当韭菜V1.1 :增强能力 ,辅助构建自己的交易规则
后端·python·pyqt
杜子不疼.6 小时前
《Python学习之字典(一):基础操作与核心用法》
开发语言·python·学习
myzzb7 小时前
基于uiautomation的自动化流程RPA开源开发演示
运维·python·学习·算法·自动化·rpa
TLuoQiu7 小时前
小电视视频内容获取GUI工具
爬虫·python
我叫黑大帅7 小时前
【CustomTkinter】 python可以写前端?😆
后端·python
胡耀超7 小时前
DataOceanAI Dolphin(ffmpeg音频转化教程) 多语言(中国方言)语音识别系统部署与应用指南
python·深度学习·ffmpeg·音视频·语音识别·多模态·asr