宇宙鱼排交易所 (FishpiStock) - 插件介绍与更新历史

宇宙鱼排交易所 (FishpiStock) - 插件介绍与更新历史

📖 插件简介

宇宙鱼排交易所插件(FishpiStock)是一款专为 FishPi.cn 社区打造的虚拟炒股游戏 Tampermonkey 油猴插件。插件模拟真实的股票交易市场,提供高度自由的自定义股票发行、买卖交易、数据同步等功能,为社区成员带来沉浸式的经营体验和竞技乐趣。


✨ 核心特性

🎮 游戏机制

  • 初始资金: 1 亿虚拟货币(成本锁定)
  • 默认股票: 6 只预设股票(蓝筹股、ST 股、ETF、妖股)
  • 价格波动: 每 10 秒自动更新,模拟真实市场
  • 涨跌停限制: ±20% 触发涨跌停
  • 交易冷却: 买入/卖出后需等待 5 分钟冷却时间
  • 上市冷却: 每次新股票上市后需等待 10 分钟

💼 股票类型

类型 代码前缀 特点 风险等级
💎 蓝筹股 FP-1xxx 低波动、稳定趋势 ⭐⭐
📉 ST 股 FP-2xxx 中波动、中等风险 ⭐⭐⭐
📈 ETF FP-5xxx 极低波动、分散风险
👹 妖股 FP-4xxx 高波动、高风险高收益 ⭐⭐⭐⭐⭐

🛠️ 功能亮点

  • 自定义上市: 玩家可创建新股票(名称、价格>100、类型自选)
  • 智能退市: 删除股票时自动强制清仓,资金返还
  • 云端同步: 支持跨设备数据同步(基于 FishPi 云存储)
  • 数据导出/导入: JSON 格式备份恢复
  • 实时事件预警: 重大行情提前 15-40 秒预告(v4 开发中)
  • 收益率排行: 实时显示各股票涨跌幅排名
  • 一键操作: 支持一键满仓/一键清仓
  • 聊天室集成: 交易记录自动发送到聊天室(暂时移除)

🎯 交易规则

  • 买入限制: 必须有足够可用资金
  • 卖出限制: 必须有足够持仓数量
  • 冷却机制:
    • 买入后 → 等待 5 分钟才能卖出
    • 卖出后 → 等待 5 分钟才能买入
  • 涨跌停: 单小时涨跌幅达±20% 触发停牌
  • 重置限制: 收益率 < -90%(亏损超 90%)才可重置账户

📜 更新历史

🔮 未来版本 (v4.x - 开发中)

v4.1.1 (未发布)

  • 📝 代码优化中

v4.1 (开发中)

  • 🔧 多项功能改进

v4.0 (规划中)

  • 🆕 实时事件预警系统

    • 🚨 提前 15-40 秒预警重大行情
    • 📺 滚动新闻条显示在排行榜上方
    • 🎨 四级严重性配色(极端/高/中/低)
    • 🔄 自动清理过期预警
  • 事件类型示例:

    • 🔴 妖股爆发:游资疯狂炒作!(提前 40 秒)
    • ⚠️ ST 暴跌:退市风险,巨亏警告!(提前 30 秒)
    • 📢 ETF 震荡:成交量萎缩(提前 15 秒)

🚀 v3.1.x 系列 - 完善与优化

v3.1.1 (2026-03-11) - 重置条件优化 + Emoji 优化

主要改进:

  1. 修改重置账户收益率条件

    • 从"收益率 ≥ 90% 禁止重置"改为"收益率 < -90% 才允许重置"
    • 只有严重亏损(亏损超过 90%)时才能重置账户
    • 防止用户在盈利或小幅亏损时随意重置
  2. 优化 GM 菜单 Emoji 标识

    • ♻️ 回收标志 - 重置账户(资金回收,重新开始)
    • 🗑️ 垃圾桶 - 删除股票(丢弃、移除)
    • 🧹 扫帚 - 清理数据(清扫、整理)

v3.1.0 (2026-03-11) - 菜单整合 + 重置限制

主要改进:

  1. 删除重复的 GM 菜单项

    • 移除两个相同的"🧹 清理无效股票数据"命令
    • 菜单按功能排序,更加清晰
  2. 添加重置账户收益率限制

    • 收益率 ≥ 90% 时禁止重置
    • 保护高收益账户不被误操作

    收益率判断逻辑

    if (Number(roi.value) >= 90) {
        msgbox.alert('⚠️ 当前收益率 ≥ 90%,不允许重置账户');
        return;
    }
    

v3.0.9 (2026-03-11) - JSON 解析修复

严重 Bug 修复:

  • 问题: TypeError: customStocks.push is not a function
  • 原因: FishPi 的 cloudStorage.getItem() 返回 JSON 字符串而非对象
  • 修复: 添加 JSON.parse() 解析和类型检查

修复代码:

let customStocks = await cloudStorage.getItem(STOCK_KEY);
if (typeof customStocks === 'string') {
    customStocks = JSON.parse(customStocks);
}
if (!Array.isArray(customStocks)) {
    customStocks = [];
}
customStocks.push(newStock);

v3.0.8 (2026-03-11) - 菜单优化 + 上市修复

主要改进:

  1. 脚本菜单合理化
    • 重新组织 GM 菜单命令顺序
    • 统一 emoji 使用
  2. 上市功能修复
    • 增加详细的错误处理
    • 添加调试日志输出
    • 优化错误提示
  3. 代码优化
    • 移除重复的 GM 菜单注册
    • 统一清理工具逻辑

v3.0.7 (2026-03-11) - 云同步修复

主要改进:

  • 修复 syncFromCloud() 不再从 fishpi_stock_data 恢复股票数据
  • 添加专用的云端残留数据清理工具
  • 更改重置账户 emoji 为 '♻️'

技术细节:

  • syncFromCloud() 只恢复 account、lastTradeType、tradeCooldowns
  • customStocksstockPrices 以独立键值为准

v3.0.6 (2026-03-11) - 批量删除优化

主要改进:

  • "删除全部自定义股票"功能无需比对数量,直接清除
  • 简化确认对话框内容
  • 只删除自定义股票数据,保留默认 6 只股票

v3.0.5 (2026-03-11) - 强制清仓 + 上市冷却

新增功能:

  1. 退市强制清仓

    • 删除自定义股票时自动按当前价格卖出所有持仓
    • 清仓所得资金自动返还到可用账户
    • 交易记录标注"退市强制清仓"
    • 彻底清除该股票的云端数据
  2. 上市冷却时间机制

    • 每次成功上市后需等待 10 分钟
    • 实时提示剩余时间(分 + 秒)
    • 云端记录上市时间,刷新页面/更换设备均有效

    操作流程

    1. 点击"退市"按钮
    2. 勾选要删除的股票
    3. 确认对话框显示:
       - 待删除的股票列表
       - 需要强制清仓的股票及数量
       - 预估回收资金
    4. 确认后自动执行清仓和删除
    

新增常量

const LIST_COOLDOWN_PERIOD = 600000; // 10 分钟
const LAST_LIST_TIME_KEY = 'lastStockListTime';

v3.0.4 (2026-03-10) - 持仓列表显示修复

主要改进:

  • 修复持仓列表显示问题
  • 优化小时价格逻辑
  • 增强数据兼容性

v3.0.3 (2026-03-10) - 添加退市管理功能

新增功能:

  • 支持删除自定义股票
  • 批量删除功能
  • 数据清理工具

v3.0.2 (2026-03-10) - FishPi 适配版

主要改进:

  • 修复 msgbox 组件
  • 修复 modal 弹窗
  • 适配 FishPi.cn 平台

v3.0.1 (2026-03-11) - AI 辅助修复版

严重 Bug 修复:

  1. 修复 loadCustomStocks 函数

    • 问题:localStorage.getItem 错误地传递了两个参数
    • 修复:删除无效的第二参数,添加 try-catch 错误处理
  2. 修复 syncToCloud 函数

    • 问题:localStorage.setItem 返回 undefined,导致保存到云端的 customStocks 字段为空
    • 修复:改为 JSON.stringify(STOCKS)
  3. 修复 syncFromCloud 函数

    • 问题:localStorage(STOCK_KEY,<span> </span>data.customStocks) 缺少方法名 .setItem
    • 修复:改为 localStorage.setItem(STOCK_KEY, data.customStocks)

    一般问题修复:

  4. 修复 clearAccountData 函数 - 取消注释 await syncToCloud()

  5. 优化 getAccount 函数 - 添加 try-catch 错误处理

  6. 优化 initAccount 函数 - 添加 try-catch 块

代码优化:

  1. 删除冗余代码 - 移除重复初始化 window.openTradeModal 和 window.openListStockModal
  2. 版本号确认 - 确认日志中的版本号已正确显示

🏗️ v3.0.0 系列 - 架构升级

v3.0.0 (2026-03-10) - 支持自定义上市 + 买卖冷却

新增功能:

  1. 自定义上市股票

    • 支持玩家申请上市新股票
    • 可设置股票名称、初始价格(>100)、股票类型
    • 自动生成股票代码(FP-7xxx 起)
    • 新股上市消息发送到聊天室
  2. 买卖冷却时间

    • 买入后需等待 5 分钟才能卖出
    • 卖出后需等待 5 分钟才能买入
    • 实时倒计时显示冷却时间
    • 冷却状态在按钮上禁用显示
  3. 1 小时前价格替代昨日收盘价

    • 每小时更新一次一小时前价格
    • 排行榜显示 1 小时前价 instead of 昨日收盘价
    • 更符合实时交易场景
  4. 数据导出/导入增强

    • 导出包含自定义股票、交易冷却时间等完整数据
    • 导入时自动恢复所有状态
    • JSON 格式便于备份

    技术实现:

// 生成股票代码
function generateStockCode() {
    const existingCodes = STOCKS.map(s => s.code);
    let startNum = 7001;
    while (true) {
        const code = `FP-${startNum}`;
        if (!existingCodes.includes(code)) {
            return code;
        }
        startNum++;
    }
}

// 检查冷却时间
function checkCooldown(stockCode, actionType) {
    const cooldownKey = `${stockCode}_${actionType}`;
    const lastTradeTime = globalState.tradeCooldowns[cooldownKey];
    const now = Date.now();
    const elapsed = now - lastTradeTime;
    const cooldownPeriod = 5 * 60 * 1000; // 5 分钟
  
    if (elapsed >= cooldownPeriod) {
        return { canTrade: true, remaining: 0 };
    }
  
    return {
        canTrade: false,
        remaining: cooldownPeriod - elapsed
    };
}

📦 v2.x 系列 - 基础构建

v2.1.0 (2026-03-09) - ChatRoom 深度集成

新增功能:

  1. 交易冷却时间

    • 初步引入冷却机制概念
    • 为 v3.0 的完整冷却系统奠定基础
  2. 10 秒价格波动周期

    • 从 30 秒缩短到 10 秒
    • 提高游戏节奏感
  3. 一小时前价格记录

    • 引入 lastHourPrices 状态
    • 替代传统的昨日收盘价

    代码优化:

  • 改进全局状态管理
  • 增强 Logger 工具
  • 优化 ChatRoom 环境检测

v2.0.0 (2026-03-08) - ChatRoom 深度集成版

核心功能:

  1. 聊天室通知

    • 交易记录自动发送到聊天室编辑器
    • 支持自动发送或手动编辑后发送
    • 格式化交易信息(买入/卖出详情)
  2. Toast 提示系统

    • 四种类型:success/error/warning/info
    • 自动淡入淡出动画
    • 可配置显示时长
  3. 性能优化

    • 优化定时器管理
    • 减少不必要的 DOM 操作
    • 改进数据持久化策略

    技术实现:

// 发送到聊天室
function sendToChatRoom(message, autoSend = false) {
    if (!globalState.chatRoomAvailable) {
        return false;
    }
  
    if (autoSend && ChatRoom.send) {
        ChatRoom.send();
        Logger.log('消息已发送到聊天室');
        return true;
    } else if (ChatRoom.editor) {
        const current = ChatRoom.editor.getValue();
        const separator = current.trim() ? '\n\n---\n' : '';
        ChatRoom.editor.setValue(current + separator + message);
        Logger.log('消息已添加到聊天室编辑器');
        return true;
    }
}

// Toast 提示
function showToast(message, type = 'info', duration = 3000) {
    let container = document.querySelector('.toast-container');
    if (!container) {
        container = document.createElement('div');
        container.className = 'toast-container';
        container.style.cssText = 'position:fixed;top:20px;left:50%;...';
        document.body.appendChild(container);
    }
  
    const toast = document.createElement('div');
    const colors = {
        success: '#4CAF50',
        error: '#f44336',
        warning: '#ff9800',
        info: '#2196F3'
    };
  
    toast.style.cssText = `padding:12px 24px;border-radius:8px;...`;
    toast.textContent = message;
    container.appendChild(toast);
  
    setTimeout(() => {
        toast.style.opacity = '0';
        setTimeout(() => toast.remove(), 300);
    }, duration);
}

🌱 早期版本

v1.0.0 (2026-03-01) - 初始版本

基础功能:

  • 6 只默认股票
  • 基本买卖操作
  • 简单价格波动
  • 本地数据存储

🎯 数据统计

版本演进

  • v1.x: 1 个版本(基础功能)
  • v2.x: 2 个版本(ChatRoom 集成)
  • v3.0.x: 10+ 个版本(架构升级、功能完善)
  • v3.1.x: 2 个版本(优化与修复)
  • v4.x: 开发中(实时预警系统)

代码统计

  • 最新版本: v3.1.1 (2417 行)
  • 最大版本: v4.0 (135.6KB)
  • 累计修改: 100+ 次提交

🛠️ 技术栈

核心技术

  • Tampermonkey: 油猴脚本框架
  • JavaScript ES6+: 异步编程、箭头函数
  • Lightweight Charts: K 线图绘制库
  • FishPi Cloud Storage: 云端数据同步

API 使用

// ==UserScript==
// @grant        GM_addStyle
// @grant        GM_registerMenuCommand
// @require      https://unpkg.com/lightweight-charts/dist/lightweight-charts.standalone.production.js
// @run-at       document-end
// ==/UserScript==

📊 游戏经济系统

资金流动

初始资金:100,000,000
股票交易:买入/卖出
资产变化:可用资金 + 持仓市值
收益率计算:((总资产 - 初始资金) / 初始资金) × 100%

股票定价机制

// 价格波动公式
newPrice = currentPrice × (1 + trend + random + eventImpact)

// 限制条件
minSinglePrice  newPrice  maxSinglePrice
|hourlyChangeRate|  20%

🎮 玩法指南

新手入门

  1. 打开插件: 点击页面右上角图标
  2. 查看排行: 了解各股票涨跌幅
  3. 买入股票: 选择看好的股票,输入数量
  4. 等待波动: 价格每 10 秒自动更新
  5. 卖出获利: 价格上涨后卖出赚取差价

进阶技巧

  • 分散投资: 不要全仓一只股票
  • 关注事件: 留意实时预警信息
  • 利用冷却: 合理安排买卖时机
  • 自定义上市: 发行自己的股票测试市场

高手策略

  • 妖股博弈: 高风险高收益,适合激进玩家
  • 蓝筹稳健: 低波动稳定收益,适合保守玩家
  • ETF 避险: 市场不明朗时的避风港
  • ST 投机: 重组预期带来的暴利机会

🔧 常见问题

Q1: 如何重置账户?

A: 当收益率 < -90%(亏损超过 90%)时,通过【脚本菜单】选择"♻️ 重置虚拟炒股账户"。

Q2: 自定义股票如何删除?

A: 通过【脚本菜单】选择"🗑️ 删除全部自定义股票",会强制清仓并删除所有自定义股票。

Q3: 数据如何备份?

A: 使用"导出数据"功能生成 JSON 文件,或依赖云端自动同步。

Q4: 为什么无法卖出股票?

A: 检查是否在买入后 1 分钟冷却期内,或股票是否触发涨跌停停牌。

Q5: 如何跨设备使用?

A: 登录同一 FishPi 账号,云端数据会自动同步。


👥 开发团队

  • 作者: 余念(AM178)
  • 卓越贡献者: 沐里(muli)
  • AI 助手:【Lingma】【TRAE】【Claude Code
  • 特别感谢: FishPi.cn 社区

📄 开源协议

MIT License


🔗 相关链接