历史交易数据涨跌分级

历史交易数据涨跌分级

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
相关推荐
朝凡FR20 小时前
AIShareTxt入门:快速准确高效的为金融决策智能体提供股票技术指标上下文
python·ai编程
Q_Q51100828520 小时前
python+django/flask的城市供水管网爆管预警系统-数据可视化
spring boot·python·django·flask·node.js·php
小白学大数据1 天前
增量爬取策略:如何持续监控贝壳网最新成交数据
爬虫·python·性能优化
@forever@1 天前
【JAVA】LinkedList与链表
java·python·链表
程序员爱钓鱼1 天前
Python编程实战:面向对象与进阶语法——类型注解与代码规范(PEP 8)
后端·python·ipython
程序员爱钓鱼1 天前
Python实战:用高德地图API批量获取地址所属街道并写回Excel
后端·python·ipython
reasonsummer1 天前
【教学类-97-06】20251105“葡萄”橡皮泥黏贴(小班主题《苹果与橘子》)
python
卖个几把萌1 天前
【16】Selenium+Python 接管已打开谷歌浏览器
python·selenium·测试工具
像风一样的男人@1 天前
python --两个文件夹文件名比对(yolo 图和label标注比对检查)
windows·python·yolo
lllsure1 天前
【Python】Dict(字典)
开发语言·python