Candles and volume for every traded asset, chart asset switcher
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
b8308e1010
commit
e1390a6921
9 files changed
+105
-27
No files matched your search
@@ -246,7 +246,7 @@ namespace Decentralized
|
||||
if (_poinTab == PoinTab.Perp) { PerpPage(b); return; }
|
||||
Columns(b, l =>
|
||||
{
|
||||
CandleChart.Add(l, "poin", d.Candles.Of(Assets.PSC));
|
||||
CandleChart.AddPicker(l, "poin", Assets.PSC, Open);
|
||||
l.AddSeparator();
|
||||
l.AddHeader(L.T("poin.account.h"));
|
||||
Holdings(l, w, a => true);
|
||||
@@ -313,7 +313,7 @@ namespace Decentralized
|
||||
l.AddLabel(L.T("perp.rate", p, Fmt.Num(PerpSpot(p)), (bk.Rate(p) * 100).ToString("+0.00;-0.00;0.00", CultureInfo.InvariantCulture)));
|
||||
l.AddLabel(L.T("perp.fund", Fmt.Credits(bk.InsuranceFund)));
|
||||
l.AddSeparator();
|
||||
CandleChart.Add(l, "perp", d.Candles.Of(Assets.PSC));
|
||||
CandleChart.Add(l, "perp", _perpProduct);
|
||||
}, r =>
|
||||
{
|
||||
r.AddHeader(L.T("perp.open"));
|
||||
@@ -613,7 +613,7 @@ namespace Decentralized
|
||||
l.AddLabel(L.T("predict.acct", WalletWindow.NameOf(w), Fmt.Num(w.Avail(Assets.CRC))));
|
||||
l.AddSeparator();
|
||||
// 选中 PSC 价格盘时,在列表上方画日 K 和阈值线
|
||||
if (sel != null && sel.Kind == PredictKind.Price) { CandleChart.Add(l, "predict", d.Candles.Of(Assets.PSC), sel.Param); l.AddSeparator(); }
|
||||
if (sel != null && sel.Kind == PredictKind.Price) { CandleChart.Add(l, "predict", Assets.PSC, sel.Param); l.AddSeparator(); }
|
||||
if (open.Count == 0) l.AddLabel(L.T("predict.none"));
|
||||
foreach (var m in open)
|
||||
{
|
||||
@@ -827,6 +827,7 @@ namespace Decentralized
|
||||
if (!ReadAmount(out double v)) return;
|
||||
var d = Session.Data;
|
||||
var res = d.Perps.Open(d.Poinbase, _perpProduct, _perpLong, v, _perpLev, PerpSpot(_perpProduct), StoreStation.GetDayCounter(), Session.Price);
|
||||
if (res == PerpResult.Ok) CandleChart.Trade(_perpProduct, v * _perpLev);
|
||||
_message = res == PerpResult.Ok ? L.T("perp.opened", _perpProduct, L.T(_perpLong ? "perp.long" : "perp.short"), Fmt.Num(v), _perpLev) : PerpErr(res);
|
||||
if (res == PerpResult.Ok) Session.Save();
|
||||
Open();
|
||||
@@ -848,6 +849,7 @@ namespace Decentralized
|
||||
var pos = d.Perps.Of(_perpProduct);
|
||||
if (pos == null) { _message = PerpErr(PerpResult.NoPosition); Open(); return; }
|
||||
double margin = pos.Margin;
|
||||
CandleChart.Trade(_perpProduct, pos.Notional(PerpSpot(_perpProduct)));
|
||||
double paid = d.Perps.Close(d.Poinbase, _perpProduct, PerpSpot(_perpProduct), StoreStation.GetDayCounter(), out double deficit);
|
||||
// 操纵:平仓盈利,而且盈利方向和玩家自己推价的方向一致,按推价幅度被查:盈利没收,记诈骗罪证,永续账户冻结几天
|
||||
double push = d.Market.PlayerPush, profit = paid - margin;
|
||||
@@ -1008,6 +1010,8 @@ namespace Decentralized
|
||||
l.AddLabel(L.T("wallet.total", Fmt.Credits(w.Value(Session.Price))));
|
||||
if (w.Taint > 0.5) l.AddLabel(L.T("wallet.taint", Fmt.Credits(w.Taint)));
|
||||
StableTable(l);
|
||||
l.AddSeparator();
|
||||
CandleChart.AddPicker(l, "web3", Assets.PSC, Open);
|
||||
}, r =>
|
||||
{
|
||||
r.AddHeader(L.T("trade.h"));
|
||||
@@ -1453,6 +1457,7 @@ namespace Decentralized
|
||||
int day = StoreStation.GetDayCounter();
|
||||
double got = _deskIn ? d.Black.ToPonero(pw, _deskAsset, v, day, Session.Price) : d.Black.FromPonero(pw, _deskAsset, v, day, Session.Price);
|
||||
if (got < 0) { _message = L.T("black.desk.fail"); Open(); return; }
|
||||
{ double cr = v * Session.Price(_deskIn ? _deskAsset : Assets.Ponero); CandleChart.Trade(Assets.Ponero, cr); CandleChart.Trade(_deskAsset, cr); }
|
||||
// 从 Ponero 出来的币来源不明:出金审查按"来自混币器"加重
|
||||
if (!_deskIn) d.Mixer.LastReturnDay = day;
|
||||
_message = _deskIn ? L.T("msg.trade", Fmt.Num(v), _deskAsset, Fmt.Num(got), Assets.Ponero) : L.T("msg.trade", Fmt.Num(v), Assets.Ponero, Fmt.Num(got), _deskAsset);
|
||||
@@ -1622,6 +1627,7 @@ namespace Decentralized
|
||||
Execute = pw =>
|
||||
{
|
||||
double got = mint ? d.Stable.Mint(pw, v) : d.Stable.Burn(pw, v);
|
||||
if (got >= 0) { double cr = v * Session.Price(pay); CandleChart.Trade(Assets.SPARK, cr); CandleChart.Trade(Assets.CRA, cr); }
|
||||
_message = got < 0 ? L.T("msg.balance") : L.T("msg.trade", Fmt.Num(v), pay, Fmt.Num(got), get);
|
||||
Session.Save();
|
||||
Open();
|
||||
@@ -1713,8 +1719,9 @@ namespace Decentralized
|
||||
if (w.Avail(pay) + 1e-9 < v) { _message = L.T(frozenPay(w, pay) ? "msg.frozen" : "msg.balance"); Open(); return; }
|
||||
double before = p.Price;
|
||||
double got = buy ? p.BuyBase(v) : p.SellBase(v);
|
||||
if (p == Session.Data.Market.Main) { Session.Data.Market.PlayerPush += Math.Log(p.Price / before); Session.Data.Candles.Tick(Assets.PSC, StoreStation.GetDayCounter(), p.Price, v * Session.Price(pay), true); Log.Info($"现货推价:累计 {Session.Data.Market.PlayerPush:0.000}"); }
|
||||
if (p == Session.Data.Market.Main) { Session.Data.Market.PlayerPush += Math.Log(p.Price / before); Log.Info($"现货推价:累计 {Session.Data.Market.PlayerPush:0.000}"); }
|
||||
double spent = v * Session.Price(pay);
|
||||
CandleChart.Trade(pay, spent); CandleChart.Trade(get, spent);
|
||||
w.Add(pay, -v);
|
||||
w.Add(get, got);
|
||||
w.RecordBuy(get, got, spent);
|
||||
|
||||
Reference in new issue
Block a user