股票/期货/基金/港股/可转债插件介绍和安装教程
1. 安装1.1 环境要求Chrome 102 及以上或新版 Edge已获取扩展安装包dist文件夹或压缩包1.2 开发者模式加载打开浏览器扩展管理页Chrome地址栏输入chrome://extensions/Edge地址栏输入edge://extensions/打开右上角「开发者模式」开关点击「加载已解压的扩展程序」选择扩展的dist文件夹即构建产物所在目录不是压缩包加载成功后点击浏览器工具栏的拼图图标将「财运Up」固定到工具栏方便随时打开1.3 打开方式点击工具栏上的「财运Up」图标即可弹出面板再次点击空白处或按Esc关闭。::: tip图标角标会显示持仓盈亏角标与提醒无需打开弹窗即可一眼看到持仓盈亏情况。:::2. 快速上手点击工具栏「财运Up」图标打开弹窗默认停留在「自选」页签在上方搜索框输入股票名称/代码/拼音支持股票、ETF、指数点击搜索结果添加自选行情会按设置的刷新间隔自动更新底部状态栏显示「N 秒前更新 · 共 M 只」点击任意行情行或大盘指数卡片可打开该品种的分时/K 线图弹窗共 5 个页签页签用途自选自选股行情列表本地保存持仓持仓成本、数量与盈亏已注册账号可云端同步大盘三大指数、涨跌家数、两市成交额资金北向资金成交额、主力资金净流入设置注册码、行情、外观、角标与提醒等3. 功能详解3.1 自选自选列表保存在本地浏览器中不同设备之间不同步。添加自选在「自选」页顶部搜索框输入关键词股票名称/代码/拼音在下拉结果中点击所需品种即可添加再次点击同名股票可快速查看或避免重复添加。行情列固定列名称、现价、涨跌%、涨跌额可选列在「设置 → 自选列」中勾选今开、昨收、量、额、量比、换手、振幅、PE动、PE(TTM)、PB、总市值、流通市值、买一、卖一分页自选数量超过「每页行数」时列表下方出现翻页按钮‹ ›。删除鼠标悬停在某一行时行尾出现红色×按钮点击删除。打开图表点击任意行情行打开该品种的分时/K 线图。::: warning 未注册限制未注册或 VIP0 用户自选股最多2 只。验证注册码后可添加任意数量。:::3.2 持仓「持仓」页用于记录持仓成本与数量并计算盈亏。添加持仓在顶部搜索框搜索股票点击结果后在弹层中输入成本价与数量点击「添加持仓」。编辑持仓点击持仓行中「代码 · 成本xx · N股 ✎」字样修改成本价/数量后点「保存」。持仓信息每行显示名称、现价、盈亏额与盈亏百分比。仅关注标签未填写成本与数量数量0 且成本0的持仓会标记「仅关注」仅用于观察、不计入盈亏汇总。添加到自选点击行右侧 ☆/★ 图标可将该股票加入自选★ 表示已在自选中。删除持仓点击行右侧红色×。汇总列表底部显示「总市值」与「持仓盈亏金额与百分比」。::: tip 云端同步已注册账号的持仓会与服务器双向同步注册与授权换设备后重新验证注册码即可恢复持仓。自选不会同步。:::::: warning 未注册限制未注册或 VIP0 用户最多可添加2 只持仓且持仓列表仅显示前 2 只。验证注册码后显示全部。:::3.3 大盘「大盘」页提供市场总览三大指数卡片上证指数、深证成指、创业板指显示点位、涨跌额与涨跌幅点击卡片打开对应指数图表涨跌家数上涨 / 下跌 / 平盘个股数量两市成交额沪深两市合计成交额沪、深、创业三大指数成交额之和页面底部同时显示数据更新时间。数据在弹窗打开期间按刷新间隔自动更新。3.4 资金「资金」页提供两类资金数据北向资金成交额沪深港通沪股通 深股通当日成交额合计::: note交易所自 2024-08 起不再实时披露沪深港通净买额因此本页展示成交额而非净买入。休市如周末成交额为 0.00 亿属正常。:::主力资金沪深合计两市主力净流入合计以及「沪市主力净流入」「深市主力净流入」明细单位均为亿元正数红色、负数绿色。3.5 图表点击自选/持仓行情行或大盘指数卡片可打开图表浮层支持周期切换分时、日K、周K、月K顶部页签切换成交量分时图与 K 线图下方同步显示成交量柱图表随弹窗放大显示点击遮罩或右上角×关闭性能说明首次打开某只股票的图表时扩展会尝试多个行情服务器备用分片主机若主站被限流会切换到可用主机因此第一次打开可能稍慢之后同只股票图表在 30 秒内有本地缓存可秒开且会记住上次可用的服务器、后续打开更快。4. 设置说明设置项全部位于弹窗「设置」页签修改后自动保存并立即生效。4.1 账号设置项说明服务器固定为stockapi1 / stockapi2主备自动切换无需手动配置注册码联系管理员获取输入后点击「验证」或按回车状态显示当前注册状态与 VIP 等级未注册限制自选 / 持仓各限 2 只验证后解锁4.2 行情设置项默认值说明刷新间隔 (ms)1500行情刷新间隔范围 1000–60000步长 500非交易时段暂停轮询关开启后非交易时段周一至周五 09:15–15:00 之外不含节假日判断暂停刷新4.3 自选列勾选在自选表中显示的可选列今开、昨收、量、额、量比、换手、振幅、PE、PB、市值、买一、卖一等。弹窗宽度会随所选列数自动调整。4.4 外观主题浅色默认/ 深色涨跌颜色默认涨红跌绿/ 自定义可分别设置涨色、跌色4.5 角标与提醒设置项默认值说明工具栏角标持仓盈亏开在浏览器工具栏图标上显示持仓盈亏数字角标内容总盈亏总盈亏按现价-成本× 数量汇总今日盈亏按今日涨跌额 × 数量汇总价格提醒开触发高价/低价提醒时发送桌面通知通知权限需在浏览器中授权4.6 其他重置为默认设置将全部设置恢复为出厂默认值5. 注册与授权扩展的持仓同步与数量限制与「注册码」绑定。如何注册联系管理员QQ63579228QQ群164653500获取注册码打开「设置」页签在「注册码」输入框粘贴并点击「验证」验证成功后会显示用户名与 VIP 等级注册后的权益自选股、持仓不再受 2 只上限限制持仓与服务器双向同步在其他设备重新验证同一注册码即可恢复持仓列表受限时持仓列表仅显示前 2 只数据同步机制服务端 持仓镜像已注册后本地持仓与服务器互相覆盖同步删除持仓会同步删除服务器记录自选纯本地自选列表仅保存在当前浏览器不参与服务器同步网络不可用时保留本地数据联网后自动重试同步6. 角标与提醒6.1 工具栏角标后台每 1 分钟更新一次持仓行情并计算盈亏显示在工具栏图标上颜色区分方向盈利显示涨色默认红、亏损显示跌色默认绿、持平灰色数字格式小于 1 万显示整数元如520达到 1 万显示x.x万如1.5万不带正负号靠颜色区分盈亏关闭「工具栏角标」后图标不再显示数字6.2 价格提醒开启「价格提醒」后后台会检测自选股是否触发高价/低价提醒触发时发送桌面通知同一提醒触发一次后需等价格回到提醒区间内才会再次触发通知权限首次触发时浏览器会请求通知权限请选择「允许」::: note当前版本自选股的高价/低价阈值暂未提供界面配置入口属预留功能若后续版本开放配置请在对应位置设置阈值。:::6.3 工具栏悬停提示鼠标悬停在工具栏「财运Up」图标上时浏览器会显示一个原生提示框内容为自选股行情摘要每行一只自选股格式为「名称 现价 涨幅」如贵州茅台 1280.66 4.57%最多显示前 5 只超出后末尾显示…与角标一样约每 1 分钟刷新一次数据可能滞后最多 1 分钟无自选股时提示框显示「财运Up」::: note该提示框为浏览器原生的纯文本提示无法自定义颜色、排版或展示更多字段如需查看完整行情请点击图标打开弹窗。:::// 生成扩展图标深色圆角方块 两根K线绿涨/红跌// 纯 Node 实现 PNG 编码zlib CRC32无第三方依赖import{deflateSync}fromnode:zlibimport{mkdirSync,writeFileSync}fromnode:fsimport{dirname,join}fromnode:pathimport{fileURLToPath}fromnode:urlconst__dirnamedirname(fileURLToPath(import.meta.url))constOUTjoin(__dirname,..,public,icons)// ---------- PNG 编码 ----------constCRC_TABLE((){consttnewUint32Array(256)for(letn0;n256;n){letcnfor(letk0;k8;k)cc1?0xedb88320^(c1):c1t[n]c0}returnt})()functioncrc32(buf){letc0xfffffffffor(leti0;ibuf.length;i)cCRC_TABLE[(c^buf[i])0xff]^(c8)return(c^0xffffffff)0}functionchunk(type,data){constlenBuffer.alloc(4)len.writeUInt32BE(data.length)constbodyBuffer.concat([Buffer.from(type,ascii),data])constcrcBuffer.alloc(4)crc.writeUInt32BE(crc32(body))returnBuffer.concat([len,body,crc])}functionencodePng(width,height,rgba){constsigBuffer.from([0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a])constihdrBuffer.alloc(13)ihdr.writeUInt32BE(width,0)ihdr.writeUInt32BE(height,4)ihdr[8]8// bit depthihdr[9]6// color type RGBAconstrawBuffer.alloc((width*41)*height)for(lety0;yheight;y){constrowStarty*(width*41)raw[rowStart]0// filter: nonergba.copy(raw,rowStart1,y*width*4,(y1)*width*4)}returnBuffer.concat([sig,chunk(IHDR,ihdr),chunk(IDAT,deflateSync(raw,{level:9})),chunk(IEND,Buffer.alloc(0)),])}// ---------- 绘制 ----------constGREEN[0x00,0xb5,0x78,255]// A股 涨绿constRED[0xe3,0x4d,0x59,255]// A股 跌红constBG[0x0f,0x12,0x18,255]// 深色底constROUND0.22// 圆角比例functiondraw(size){constpxBuffer.alloc(size*size*4)constssizeconstrMath.round(s*ROUND)constinRoundRect(x,y){// 圆角矩形内判定constnearLeftxrconstnearRightxs-rconstnearTopyrconstnearBottomys-rif(nearLeftnearTop){constdxx-r0.5constdyy-r0.5returndx*dxdy*dyr*r}if(nearRightnearTop){constdxx-(s-r)0.5constdyy-r0.5returndx*dxdy*dyr*r}if(nearLeftnearBottom){constdxx-r0.5constdyy-(s-r)0.5returndx*dxdy*dyr*r}if(nearRightnearBottom){constdxx-(s-r)0.5constdyy-(s-r)0.5returndx*dxdy*dyr*r}returntrue}constput(x,y,[cr,cg,cb,ca]){consti(y*sx)*4constaca/255// 与背景做 alpha 混合px[i]Math.round(cr*aBG[0]*(1-a))px[i1]Math.round(cg*aBG[1]*(1-a))px[i2]Math.round(cb*aBG[2]*(1-a))px[i3]255}// 蜡烛: 左绿(涨) 右红(跌)// 左边蜡烛constlxMath.round(s*0.16)constlwMath.round(s*0.3)constbodyTopMath.round(s*0.34)constbodyBotMath.round(s*0.62)constwickTopMath.round(s*0.22)constwickBotMath.round(s*0.76)// 右边蜡烛constrxMath.round(s*0.54)constrwMath.round(s*0.3)constrBodyTopMath.round(s*0.40)constrBodyBotMath.round(s*0.70)constrWickTopMath.round(s*0.24)constrWickBotMath.round(s*0.80)for(lety0;ys;y){for(letx0;xs;x){if(!inRoundRect(x,y))continue// 左侧蜡烛绿涨constinLBodyxlxxlxlwybodyTopybodyBotconstinLWickxlxMath.round(lw*0.42)xlxMath.round(lw*0.58)ywickTopywickBot// 右侧蜡烛红跌constinRBodyxrxxrxrwyrBodyTopyrBodyBotconstinRWickxrxMath.round(rw*0.42)xrxMath.round(rw*0.58)yrWickTopyrWickBotif(inLBody||inLWick)put(x,y,GREEN)elseif(inRBody||inRWick)put(x,y,RED)}}returnencodePng(s,s,px)}mkdirSync(OUT,{recursive:true})for(constsizeof[16,32,48,128]){writeFileSync(join(OUT,icon${size}.png),draw(size))console.log(generated icon${size}.png)}