PSC daily candle history and pixel candlestick chart

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:47:34 +08:00
1 parent 7b5080984a
commit b8308e1010
10 files changed
+271 -4

No files matched your search

@@ -1408,6 +1408,32 @@ internal static class Program
Check(f2 == 0, "小额内幕卖出安全");
});
Test("日 K:开盘、日内高低、成交量、收盘、均线、保留天数", () =>
{
var cb = new CandleBook();
cb.Open(Assets.PSC, 5, 100);
cb.Tick(Assets.PSC, 5, 120, 3000);
cb.Tick(Assets.PSC, 5, 90, 500, true);
cb.Close(Assets.PSC, 5, 105);
var k = cb.Of(Assets.PSC)[0];
Check(k.O == 100 && k.H == 120 && k.L == 90 && k.C == 105 && k.Closed, "开高低收");
Check(k.VolNpc == 3000 && k.VolPlayer == 500, "成交量分大户和玩家");
cb.Tick(Assets.PSC, 5, 200);
Check(k.H == 120 && k.C == 105, "收盘后不再变");
cb.Tick(Assets.PSC, 6, 110);
Check(cb.Of(Assets.PSC).Count == 2 && cb.Of(Assets.PSC)[1].O == 110, "读档时没有当天的蜡烛就按现价开一根");
var cb2 = new CandleBook();
cb2.Open(Assets.PSC, 5, 100); cb2.Close(Assets.PSC, 5, 105);
cb2.Open(Assets.PSC, 6, 98);
var k6 = cb2.Of(Assets.PSC)[1];
Check(k6.O == 105 && k6.H == 105 && k6.L == 98 && k6.C == 98, "开盘接昨天收盘,夜间变动算进今天这根");
for (int d = 7; d < 7 + CandleBook.Keep + 10; d++) { cb.Open(Assets.PSC, d, d); cb.Close(Assets.PSC, d, d); }
Check(cb.Of(Assets.PSC).Count == CandleBook.Keep, "只保留最近若干天");
var ma = CandleBook.Ma(new List<Candle> { new Candle { C = 1 }, new Candle { C = 3 }, new Candle { C = 5 } }, 2);
Check(ma[0] == 1 && ma[1] == 2 && ma[2] == 4, "均线");
Check(cb.Of("SPARK").Count == 0, "没有的币种是空的");
});
Test("预测市场:先验概率", () =>
{
Check(Math.Abs(PredictMath.PurityAtLeast(8500, 8000, 8999) - 0.5) < 1e-9, "纯度 8500 以上一半");