diff --git a/CHANGELOG.md b/CHANGELOG.md index 88504d3..035580e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - 浏览器:转出、转入分成两列,按列宽显示完整地址和名称,放不下时先去名称、再用缩写,鼠标悬停显示完整地址和名称。 - RatDigg 矿机的状态面板加了算力(GH/s)、耗电和成色(烧毁显示“已烧毁”),和矿架一致。 - 矿机、矿架状态面板里的收款地址在读档、睡觉之后会按标签重新读取,不再显示成“未设置”(地址本来就保存在物品标签里)。 +- 操纵检出:免查线 2% → 15%,斜率 6 → 3。池加深之后,推价幅度 15% 约对应第 0 天 7,000 信用点的现货单(深度随天数增长,免查额度也跟着涨);超线后被查概率 = 25% + 3 × (幅度 − 15%),推价约 30%(现货约 14,000)时约 70%。 - 市场深度:现货池基础深度 50,000 → 120,000,永续成交深度倍数 3 → 5。大额现货单和永续单的滑点明显变小(永续 20,000 名义价值的单边滑点约 3%,原来约 12%;现货买 20,000 价格约涨 36%,原来约 83%)。 ## 1.0.0-rc9 diff --git a/src/Decentralized.Domain/Tuning.cs b/src/Decentralized.Domain/Tuning.cs index c20afde..66d1fa1 100644 --- a/src/Decentralized.Domain/Tuning.cs +++ b/src/Decentralized.Domain/Tuning.cs @@ -244,7 +244,7 @@ namespace Decentralized.Domain public const int IntelRep = 20; /// 操纵检出:玩家自己的大单把价格推离"没有你时的水平"的对数幅度(取绝对值)低于 ManipFree 不查; /// 超过后被查概率 = ManipBase + ManipSlope × (幅度 − ManipFree),封顶 ManipMax;被查后永续账户冻结几天。 - public const double ManipFree = 0.02, ManipBase = 0.25, ManipSlope = 6, ManipMax = 0.95; + public const double ManipFree = 0.15, ManipBase = 0.25, ManipSlope = 3, ManipMax = 0.95; public const int ManipFreezeDays = 3; /// 高息理财(庞氏):第几天起开放、开张的宣传费(CRC)、可选日息、每晚新存入的基数(随天数)和对日息的敏感指数、 diff --git a/tests/Decentralized.Domain.Tests/Program.cs b/tests/Decentralized.Domain.Tests/Program.cs index c514f5e..023b2ac 100644 --- a/tests/Decentralized.Domain.Tests/Program.cs +++ b/tests/Decentralized.Domain.Tests/Program.cs @@ -1478,8 +1478,8 @@ internal static class Program Test("操纵检出:被查概率随推价幅度升高,推价每晚衰减,行情盘押中按方向被判", () => { - Check(Market.ManipChance(0.01) == 0 && Market.ManipChance(-0.01) == 0, "幅度低于免查线不查"); - Check(Market.ManipChance(0.05) > Market.ManipChance(0.03) && Market.ManipChance(-0.05) == Market.ManipChance(0.05), "幅度越大越容易被查,方向无关"); + Check(Market.ManipChance(Tuning.ManipFree / 2) == 0 && Market.ManipChance(-Tuning.ManipFree / 2) == 0, "幅度低于免查线不查"); + Check(Market.ManipChance(Tuning.ManipFree + 0.05) > Market.ManipChance(Tuning.ManipFree + 0.03) && Market.ManipChance(-(Tuning.ManipFree + 0.05)) == Market.ManipChance(Tuning.ManipFree + 0.05), "幅度越大越容易被查,方向无关"); Check(Market.ManipChance(5) == Tuning.ManipMax, "封顶"); var mk = Market.CreateDefault(5); double p0 = mk.Price; mk.PlayerPush += Math.Log(1.1); @@ -1490,7 +1490,7 @@ internal static class Program int manip = 0, win = 0, noPush = 0; for (ulong sd = 1; sd <= 200; sd++) { - foreach (var (yes, push, outcome) in new[] { (true, 0.06, true), (false, 0.06, false), (true, 0.0, true) }) + foreach (var (yes, push, outcome) in new[] { (true, Tuning.ManipFree + 0.06, true), (false, Tuning.ManipFree + 0.06, false), (true, 0.0, true) }) { var bk = new PredictBook(); var w = new Wallet { Address = "w" }; w.Add(Assets.CRC, 1e5); var m = PredictMarket.Create(++bk.Seq, PredictKind.Price, "PSC", "PSC", 100, 4, 5, 5, 0.3); bk.Markets.Add(m); @@ -1500,8 +1500,8 @@ internal static class Program else if (yes && push > 0) win++; else if (push == 0) noPush++; } } - double expect = Market.ManipChance(0.06) * 200; - Check(Math.Abs(manip - expect) < 40 && manip + win == 200 && noPush == 200, $"推价 6% 约 {expect:0} 次被判,被判 {manip},没被判 {win}"); + double expect = Market.ManipChance(Tuning.ManipFree + 0.06) * 200; + Check(Math.Abs(manip - expect) < 40 && manip + win == 200 && noPush == 200, $"推价超线 6% 约 {expect:0} 次被判,被判 {manip},没被判 {win}"); }); Test("高息理财:开张条件、每晚存入与利息、崩盘、被举报、卷走", () =>