koishi-plugin-monetary-bourse 1.0.0-alpha.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.js +6 -2
- package/package.json +1 -1
- package/readme.md +37 -13
package/lib/index.js
CHANGED
|
@@ -380,7 +380,10 @@ function apply(ctx, config) {
|
|
|
380
380
|
endTime
|
|
381
381
|
};
|
|
382
382
|
if (!state) await ctx.database.create("bourse_state", newState);
|
|
383
|
-
else
|
|
383
|
+
else {
|
|
384
|
+
const { key, ...updateFields } = newState;
|
|
385
|
+
await ctx.database.set("bourse_state", { key: "macro_state" }, updateFields);
|
|
386
|
+
}
|
|
384
387
|
state = newState;
|
|
385
388
|
}
|
|
386
389
|
}
|
|
@@ -414,7 +417,8 @@ function apply(ctx, config) {
|
|
|
414
417
|
if (!state) {
|
|
415
418
|
await ctx.database.create("bourse_state", newState);
|
|
416
419
|
} else {
|
|
417
|
-
|
|
420
|
+
const { key, ...updateFields } = newState;
|
|
421
|
+
await ctx.database.set("bourse_state", { key: "macro_state" }, updateFields);
|
|
418
422
|
}
|
|
419
423
|
state = newState;
|
|
420
424
|
}
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -4,23 +4,39 @@
|
|
|
4
4
|
|
|
5
5
|
为 Koishi 提供基于 `monetary` 通用货币系统的股票交易所功能。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
本插件模拟了一个具备**自动宏观调控**、**丰富日内走势形态**和**资金冻结机制**的拟真股票市场。用户可以使用机器人通用的货币(如信用点)进行股票买卖、炒股理财。
|
|
8
8
|
|
|
9
|
-
## ✨ 特性
|
|
9
|
+
## ✨ 特性 (Alpha 2 更新)
|
|
10
10
|
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
11
|
+
- **📈 拟真 K 线引擎**:
|
|
12
|
+
- 内置 **12 种日内走势形态**(如:早盘冲高回落、V型反转、尾盘拉升、M顶/W底等)。
|
|
13
|
+
- 走势不再是单纯的随机波动,每天自动或随机切换不同的操盘剧本,大幅提升观察乐趣。
|
|
14
|
+
- 结合 **周级波浪** 与 **宏观趋势**,模拟真实市场的多周期叠加效应。
|
|
15
|
+
- **📊 精美 K 线渲染**:使用 Puppeteer 渲染实时/日/周线图,Alpha 2 版本优化了坐标轴标签算法,防止文字重叠,观感更佳。
|
|
16
|
+
- **❄️ 资金冻结机制**:交易采用 T+0 但资金/股票非即时到账模式(根据金额计算冻结时间),增加博弈深度。
|
|
17
|
+
- **🏦 银行联动**:支持与 `koishi-plugin-monetary-bank` 联动,现金不足时自动扣除银行活期存款。
|
|
18
|
+
- **🕹️ 宏观调控**:管理员可手动干预股价目标,或强制切换当天的 K 线剧本。
|
|
19
|
+
|
|
20
|
+
## 更新记录
|
|
21
|
+
|
|
22
|
+
- **1.0.0(正式版)**:
|
|
23
|
+
- 修复:解决长期运行时触发的 `TypeError: cannot modify primary key`(更新 `bourse_state` 时排除主键字段,仅按条件写入非主键字段),提高数据库兼容性与稳定性。
|
|
24
|
+
|
|
25
|
+
- **Alpha.2 (功能增强 — K 线多样化)**:
|
|
26
|
+
- 在 Alpha.1 的基础上,扩展并完善了 K 线引擎,新增 12 种日内走势剧本、周级波浪叠加以及坐标轴标签冲突修复等视觉与体验改进。
|
|
27
|
+
- 该版本引入了更丰富的日内走势(例如早盘冲高回落、V 型反转、尾盘拉升、M 顶/W 底等),并改进了 Puppeteer 渲染逻辑以减少横轴标签重叠。
|
|
28
|
+
- 致命问题说明:长期运行时可能触发 `TypeError: cannot modify primary key`(根因:更新持久化 `bourse_state` 时不小心将主键字段包含在更新负载中,某些数据库实现会拒绝修改主键),该问题在后续修复版本中已处理,请在生产环境中尽量升级至稳定版本。
|
|
29
|
+
|
|
30
|
+
- **Alpha.1 (初始 Alpha 版本)**:
|
|
31
|
+
- 发布基础功能:买卖、资金冻结、挂单、历史行情存储以及 `stock` 家族指令(`stock` / `stock.buy` / `stock.sell` / `stock.my`)。
|
|
32
|
+
- 支持与 `monetary` 与 `monetary-bank` 的基本联动,提供最小可用的股票交易所模拟能力。
|
|
17
33
|
|
|
18
34
|
## 📦 依赖
|
|
19
35
|
|
|
20
36
|
本插件需要以下服务:
|
|
21
37
|
- `database`: 用于存储持仓、历史行情和挂单记录。
|
|
22
38
|
- `puppeteer`: 用于渲染股市行情图。
|
|
23
|
-
- `monetary`: (可选)
|
|
39
|
+
- `monetary`: (可选) 用于获取用户货币余额(本插件直接操作数据库表,monetary 插件需安装以建立表结构)。
|
|
24
40
|
|
|
25
41
|
## 🔧 配置项
|
|
26
42
|
|
|
@@ -38,7 +54,6 @@
|
|
|
38
54
|
- **marketStatus**: 股市总开关,可选 `open` (强制开启)、`close` (强制关闭)、`auto` (自动按时间)。
|
|
39
55
|
|
|
40
56
|
### 冻结机制
|
|
41
|
-
为了防止高频刷钱,交易后资金/股票需要冻结一段时间。
|
|
42
57
|
- **freezeCostPerMinute**: 每多少货币金额计为1分钟冻结时间(默认 `100`)。
|
|
43
58
|
- **minFreezeTime**: 最小冻结时间(分钟,默认 `10`)。
|
|
44
59
|
- **maxFreezeTime**: 最大冻结时间(分钟,默认 `1440` 即24小时)。
|
|
@@ -60,7 +75,7 @@
|
|
|
60
75
|
- **`stock.buy <amount>`**
|
|
61
76
|
- 买入股票。
|
|
62
77
|
- 参数 `amount`: 购买股数(整数)。
|
|
63
|
-
-
|
|
78
|
+
- 说明:扣除现金(优先)或银行活期,股票将在冻结时间结束后到账。
|
|
64
79
|
|
|
65
80
|
- **`stock.sell <amount>`**
|
|
66
81
|
- 卖出股票。
|
|
@@ -78,14 +93,23 @@
|
|
|
78
93
|
- 说明:强行引导股价在指定时间内向目标价格移动。
|
|
79
94
|
- 示例:`stock.control 5000 12` (在12小时内让股价涨/跌到5000)。
|
|
80
95
|
|
|
96
|
+
- **`stock.pattern`** *(Alpha 2 新增)*
|
|
97
|
+
- 强制切换 K 线模型。
|
|
98
|
+
- 说明:手动随机切换当前使用的日内走势剧本(如从“单边下跌”切换为“尾盘拉升”)。
|
|
99
|
+
|
|
81
100
|
- **`bourse.admin.market <status>`**
|
|
82
101
|
- 设置股市开关状态。
|
|
83
102
|
- 参数 `status`: `open` (开启), `close` (关闭), `auto` (自动)。
|
|
103
|
+
- 说明:手动开市时会自动重置并切换一个新的日内 K 线形态。
|
|
84
104
|
|
|
85
105
|
## 💡 常见问题
|
|
86
106
|
|
|
87
107
|
**Q: 为什么买了股票没有立刻到账?**
|
|
88
|
-
A:
|
|
108
|
+
A: 本插件设计了基于交易金额的动态冻结机制。交易额越大,冻结时间越长(可配置)。请使用 `stock.my` 查看剩余解冻时间。
|
|
89
109
|
|
|
90
110
|
**Q: 股价是如何波动的?**
|
|
91
|
-
A:
|
|
111
|
+
A: 股价由四部分叠加而成:
|
|
112
|
+
1. **宏观趋势**:根据自动或手动的目标价格计算的线性趋势。
|
|
113
|
+
2. **周级波浪**:7天为一个大周期的正弦复合波浪。
|
|
114
|
+
3. **日内形态**:每天随机从 12 种剧本中选择多种(如 V 型、倒 V 型、阶梯上涨等)。
|
|
115
|
+
4. **随机噪音**:微小的随机波动。
|