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:
1 parent
6c5db17758
commit
7b5080984a
9 files changed
+152
-21
No files matched your search
@@ -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 以上一半");
|
||||
|
||||
Reference in new issue
Block a user