Stage 7.2: high-yield scheme (Ponzi), prediction/manipulation docs
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
786de325da
commit
5b0af9af8f
9 files changed
+272
-5
No files matched your search
@@ -1267,6 +1267,40 @@ internal static class Program
|
||||
Check(Math.Abs(manip - expect) < 40 && manip + win == 200 && noPush == 200, $"推价 6% 约 {expect:0} 次被判,被判 {manip},没被判 {win}");
|
||||
});
|
||||
|
||||
Test("高息理财:开张条件、每晚存入与利息、崩盘、被举报、卷走", () =>
|
||||
{
|
||||
var acct = new Wallet { Address = "pb" }; acct.Add(Assets.CRC, 5000);
|
||||
var p = new Ponzi();
|
||||
Check(!p.Start(acct, 0.04, Tuning.PonziMinDay - 1), "没到开放日不能开");
|
||||
Check(p.Start(acct, 0.04, Tuning.PonziMinDay) && Math.Abs(acct.Get(Assets.CRC) - (5000 - Tuning.PonziAdCost)) < 1e-9, "开张扣宣传费");
|
||||
Check(!p.CanOpen(Tuning.PonziMinDay + 1), "已经开着不能再开");
|
||||
// 池子增长不超过上限;利息先用新存入的付,不够才动账户
|
||||
var rng = new Rng(3);
|
||||
double maxPool = 0; bool ended = false;
|
||||
for (int d = Tuning.PonziMinDay; d < Tuning.PonziMinDay + 40 && p.Open; d++)
|
||||
{
|
||||
var ev = p.Night(d, 50, acct, rng);
|
||||
maxPool = Math.Max(maxPool, p.Pool);
|
||||
Check(p.Pool <= Ponzi.Cap(d) + 1e-6, "池子不超过上限");
|
||||
if (ev != null) { ended = true; Check(ev.Amount >= 0 && p.Done && !p.Open && p.Pool == 0, "崩盘后池子清零、产品关闭"); }
|
||||
}
|
||||
Check(maxPool > 0 && ended, "池子涨起来、最后会崩盘(40 晚内)");
|
||||
Check(!p.CanOpen(100) && p.Rug(acct) == 0, "崩盘后不能重开也不能卷走");
|
||||
// 付不出利息就挤兑
|
||||
var poor = new Wallet { Address = "x" }; poor.Add(Assets.CRC, Tuning.PonziAdCost);
|
||||
var q = new Ponzi(); q.Start(poor, 0.10, 20);
|
||||
q.Pool = 100000; var ev2 = q.Night(20, 50, poor, new Rng(1));
|
||||
Check(ev2 != null && ev2.Kind == "collapse", "账户里没钱补利息:崩盘");
|
||||
// 卷走:池子进账户、污点全额
|
||||
var w = new Wallet { Address = "y" }; w.Add(Assets.CRC, 2000);
|
||||
var r = new Ponzi(); r.Start(w, 0.04, 20); r.Pool = 5000;
|
||||
double cash = w.Get(Assets.CRC);
|
||||
Check(Math.Abs(r.Rug(w) - 5000) < 1e-9 && Math.Abs(w.Get(Assets.CRC) - cash - 5000) < 1e-9 && Math.Abs(w.Taint - 5000) < 1e-9 && r.Done, "卷走:池子进账户,污点全额");
|
||||
// 被举报概率随日息和池子升高
|
||||
Check(Ponzi.ReportChance(0.10, 5000, 20) > Ponzi.ReportChance(0.02, 5000, 20) && Ponzi.ReportChance(0.04, 9000, 20) > Ponzi.ReportChance(0.04, 100, 20), "日息越高、池子越大越容易被举报");
|
||||
Check(Ponzi.InflowMean(20, 0.08, 50) > Ponzi.InflowMean(20, 0.04, 50) * 2, "日息高于 4% 时存入按指数放大");
|
||||
});
|
||||
|
||||
Test("预测市场:先验概率", () =>
|
||||
{
|
||||
Check(Math.Abs(PredictMath.PurityAtLeast(8500, 8000, 8999) - 0.5) < 1e-9, "纯度 8500 以上一半");
|
||||
|
||||
Reference in new issue
Block a user