python实现a股股票量比与换手率范围筛选排行榜代码

代码语言:python

所属分类:其他

代码描述:python实现a股股票量比与换手率范围筛选排行榜代码

代码标签: python a股 股票 量比 换手率 范围 筛选 排行榜 代码

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

# -*- coding: utf-8 -*-
"""
实时股票行情看板 + K线图 (副图Tab切换: 成交量/MACD/KDJ/RSI/OBV) + A股每日排行榜
 (行情/K线) + 东方财富 (排行榜)

"""

import time
import requests
from flask import Flask, jsonify, request, Response

app = Flask(__name__)

DEFAULT_SYMBOLS = ["sh000001", "sz399001", "sz399006", "sh600511"]


# ===================== 内嵌HTML页面 =====================
HTML_PAGE = r"""<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>实时行情看板</title>
<script src="https://cdn.jsdelivr.net/npm/echarts@5.5.0/dist/echarts.min.js"></script>
<style>
*{margin:0;padding:0;box-sizing:border-box}
:root{
  --bg:#0a0e17;--card:#131a2b;--border:#1e2d4a;
  --text:#e8edf5;--sub:#7a8ba8;
  --up:#ef4444;--down:#22c55e;--flat:#7a8ba8;
  --accent:#3b82f6;--accent-hover:#2563eb;
  --modal-bg:rgba(0,0,0,.7);
}
body{background:var(--bg);color:var(--text);font-family:"SF Pro Display","PingFang SC","Microsoft YaHei",sans-serif;min-height:100vh}

/* Header */
.header{
  display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;
  padding:20px 32px;border-bottom:1px solid var(--border);
  background:rgba(19,26,43,.85);backdrop-filter:blur(12px);position:sticky;top:0;z-index:100;
}
.header h1{font-size:22px;font-weight:700;letter-spacing:.5px}
.header h1 span{color:var(--accent);margin-right:6px}
.status-bar{display:flex;align-items:center;gap:16px;font-size:13px;color:var(--sub)}
.dot{width:8px;height:8px;border-radius:50%;background:#22c55e;display:inline-block;margin-right:4px;animation:pulse 2s infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.4}}

/* Controls */
.controls{display:flex;align-items:center;gap:10px;padding:16px 32px;flex-wrap:wrap}
.input-group{display:flex;align-items:center;gap:6px}
.input-group label{font-size:13px;color:var(--sub);white-space:nowrap}
input[type="text"],input[type="number"]{
  background:var(--card);border:1px solid var(--border);color:var(--text);
  border-radius:8px;padding:8px 12px;font-size:14px;outline:none;transition:border .2s;
}
input:focus{border-color:var(--accent)}
input[type="text"]{width:200px}
input[type="number"]{width:80px;text-align:center}
button{
  background:var(--accent);color:#fff;border:none;border-radius:8px;
  padding:8px 18px;font-size:14px;cursor:pointer;transition:background .2s;font-weight:600;
}
button:hover{background:var(--accent-hover)}
.tag-list{display:flex;gap:6px;flex-wrap:wrap;margin-left:8px}
.tag{
  display:inline-flex;align-items:center;gap:4px;
  background:rgba(59,130,246,.12);color:var(--accent);border:1px solid rgba(59,130,246,.25);
  border-radius:20px;padding:4px 12px;font-size:12px;font-weight:600;
}
.tag .remove{cursor:pointer;opacity:.7;font-size:14px;line-height:1;margin-left:2px}
.tag .remove:hover{opacity:1}

/* View Toggle */
.view-toggle { display: flex; gap: 8px; margin-left: auto; }
.view-toggle button {
  background: var(--card); color: var(--sub); border: 1px solid var(--border);
  border-radius: 8px; padding: 8px 16px; font-size: 13px; cursor: pointer;
  font-weight: 600; transition: all .2s;
}
.view-toggle button.active {
  background: rgba(59,130,246,.15); color: var(--accent); border-color: var(--accent);
}

/* Grid */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;padding:0 32px 32px}

/* Card */
.card{
  background:var(--card);border:1px solid var(--border);border-radius:16px;
  padding:20px 24px;transition:transform .15s,border-color .2s,box-shadow .2s;
  position:relative;overflow:hidden;cursor:pointer;user-select:none;
}
.card:hover{transform:translateY(-2px);border-color:rgba(59,130,246,.3);box-shadow:0 8px 32px rgba(0,0,0,.3)}
.card.up{border-left:3px solid var(--up)}
.card.down{border-left:3px solid var(--down)}
.card.flat{border-left:3px solid var(--flat)}
.card-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:12px}
.stock-name{font-size:18px;font-weight:700}
.stock-code{font-size:12px;color:var(--sub);margin-top:2px}
.badge{font-size:12px;font-weight:700;padding:3px 10px;border-radius:20px}
.badge.up{background:rgba(239,68,68,.12);color:var(--up)}
.badge.down{background:rgba(34,197,94,.12);color:var(--down)}
.badge.flat{background:rgba(122,139,168,.12);color:var(--flat)}
.price-row{display:flex;align-items:baseline;gap:12px;margin-bottom:14px}
.price{font-size:32px;font-weight:800;letter-spacing:-.5px}
.change{font-size:15px;font-weight:600}
.detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px 16px}
.detail-item{display:flex;justify-content:space-between;font-size:12px}
.detail-item .label{color:var(--sub)}
.detail-item .val{font-weight:600;font-variant-numeric:tabular-nums}
.card-time{font-size:11px;color:var(--sub);margin-top:12px;text-align:right}
.click-hint{
  position:absolute;bottom:8px;right:12px;font-size:10px;color:var(--sub);
  opacity:0;transition:opacity .2s;pointer-events:none;
}
.card:hover .click-hint{opacity:1}
.up-text{color:var(--up)}.down-text{color:var(--down)}.flat-text{color:var(--flat)}

/* Card Delete Button */
.card-delete-btn {
  width: 24px; height: 24px; border-radius: 50%; border: 1px solid var(--border);
  background: transparent; color: var(--sub); font-size: 14px; cursor: pointer;
  display: flex; align-items: center; justify-content: center; transition: all .15s;
  padding: 0; line-height: 1;
}
.card-delete-btn:hover {
  background: rgba(239,68,68,.12); color: var(--up); border-color: var(--up);
}

/* Prediction Box */
.prediction-box {
  grid-column: 1 / -1;
  justify-content: center !important;
  gap: 10px;
  margin-top: 8px;
  padding: 8px;
  background: rgba(255,255,255,0.03);
  border-radius: 8px;
  border: 1px dashed var(--border);
}
.prediction-.........完整代码请登录后点击上方下载按钮下载查看

网友评论0