Stage 7 numeric pass and market legibility (price moves, history, insider exits)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ZHU MINCHAOandClaude Opus 5.5 committed 2026-11-04 08:36:17 +08:00
1 parent 6c5db17758
commit 7b5080984a
9 files changed
+152 -21

No files matched your search

+30 -1
View File
@@ -1156,7 +1156,7 @@ internal static class Program
var aa = new Wallet { Address = "p" };
m4.Outcome = -1;
var ee = bb.Night(5, new string[0], mm => true, _ => aa, new Rng(sd));
if (ee[0].Kind == "caught") { Check(Math.Abs(aa.Get(Assets.CRC) - (b4.Positions[0].Cost)) < 1e-6, "被查只退本金"); break; }
if (ee[0].Kind == "caught") { Check(aa.Get(Assets.CRC) < 1e-6, "被查本金和收益全部没收"); break; }
}
});
@@ -1201,6 +1201,8 @@ internal static class Program
var closing = PredictMarket.Create(++bk.Seq, PredictKind.Event, "e", "t", 0, 5, 6, 6, 0.1); bk.Markets.Add(closing);
double before = closing.PYes; bk.Drift(5, x => 0.9, rng);
Check(Math.Abs(closing.PYes - before) < 1e-12, "明天封盘的盘口不再反应");
var mv = bk.Drift(5, x => 0.9, rng);
Check(mv.Count == 1 && mv[0].Market == m && Math.Abs(mv[0].To - m.PYes) < 1e-12 && m.PrevP == mv[0].From, "反应记下前后价格");
Check(m.PYes >= Tuning.PredictPMin && m.PYes <= Tuning.PredictPMax, "价格夹在范围内");
// 反应是有噪声的:同一目标多次结果不全一样
var set = new System.Collections.Generic.HashSet<double>();
@@ -1220,6 +1222,7 @@ internal static class Program
var w = new Wallet { Address = "x" };
bk.Night(6, new string[0], mm => true, _ => w, rng);
Check(bk.Tips.Count == 0, "盘口结算后情报作废");
Check(bk.Stats.TryGetValue("Event", out var stE) && stE.Count >= 1 && stE.Hits >= 1, "结算计入按类型的历史");
// gas / CRA / 时代 先验
double flat = PredictMath.GasFlat(10, 1.2);
double phase0 = PredictMath.GasAtLeast(10, 0, 1.2), sum2 = 0;
@@ -1379,6 +1382,32 @@ internal static class Program
Check(Math.Abs(rugs / 400.0 - Tuning.YieldRugNightly) < 0.05, $"骗局池每晚跑路概率:{rugs / 400.0:0.00}");
});
Test("预测市场:内幕先买后卖也会被查", () =>
{
int caught = 0, n = 400;
for (ulong sd = 1; sd <= (ulong)n; sd++)
{
var bk = new PredictBook(); var w = new Wallet { Address = "w" }; w.Add(Assets.CRC, 1e6);
var m = PredictMarket.Create(++bk.Seq, PredictKind.Event, "e", "t", 0, 4, 7, 7, 0.05); bk.Markets.Add(m);
double target = Tuning.PredictInsiderShare * m.ShareCap * 1.02;
bk.Buy(w, m, true, m.BuyCost(true, target) * (1 + Tuning.PredictFee), 4, a => 1, true, out _);
double cost = bk.PosOf(m.Id, "w").Cost;
double p1 = m.PYes, p2 = p1 + (1 - p1) / 2;
m.QYes = m.QNo + m.B * Math.Log(p2 / (1 - p2)); // 夜里价格又涨了一截
bk.SellAll(w, m, 5, new Rng(sd), out double got, out double fraud);
if (fraud > 0) { caught++; Check(got == 0 && fraud <= Tuning.PredictFraudCap, "被查本金和收益全部没收"); }
else Check(got > cost, "没被查时赚到价差");
}
Check(Math.Abs(caught / (double)n - Tuning.PredictInsiderCatch) < 0.08, $"约一半被查:{caught}/{n}");
// 小额内幕、非内幕卖出不查
var bk2 = new PredictBook(); var w2 = new Wallet { Address = "w" }; w2.Add(Assets.CRC, 1e6);
var m2 = PredictMarket.Create(++bk2.Seq, PredictKind.Event, "e", "t", 0, 4, 7, 7, 0.05); bk2.Markets.Add(m2);
bk2.Buy(w2, m2, true, 200, 4, a => 1, true, out _);
m2.QYes = m2.QNo + m2.B * Math.Log(0.6 / 0.4);
bk2.SellAll(w2, m2, 5, new Rng(1), out _, out double f2);
Check(f2 == 0, "小额内幕卖出安全");
});
Test("预测市场:先验概率", () =>
{
Check(Math.Abs(PredictMath.PurityAtLeast(8500, 8000, 8999) - 0.5) < 1e-9, "纯度 8500 以上一半");