模拟规则
这是一个用币安真实行情驱动的模拟盘:行情是真的,账户、撮合、风控、强平全部由我们自己实现,不会产生任何真实下单,USDT 由本地服务发放。
和真实交易所的差别
下面 9 条是明确知道并选择接受的差距。每一条都对应一个「本可以造假但选择不造」的决定。
1.你的单不进真实盘口,不产生市场冲击
- 现象
- 无论下多大的单,币安那边的价格不会因为你而动一下。
- 为什么
- 要模拟「大单把价格推走」得建市场冲击模型,那是研究课题,不是能「大概估一个」的东西。
- 对你
- 你只会遇到逐档吃单的滑点。真实交易里大单还要承担把价格推走的成本,这部分你练不到。
2.多个模拟用户可以吃掉同一档流动性
- 现象
- 十个人同时市价买,都能按同一个价格成交。
- 为什么
- 要做流动性竞争就得引入一套全局流动性账本,所有人抢同一份深度。
- 对你
- 不会出现「别人抢先、你的成交价变差」。真实市场里会。
3.挂单的排队位置是估算的
- 现象
- 委托列表里的「前方排队」带 ≈ 号时,是估算值。
- 为什么
- 币安不公开队列内部顺序,任何人都只能从公开数据里推断。我们的办法是「下单时估一个上限,之后用盘口总量夹逼、用成交量消耗」。
- 对你
- 你的限价单成交时机可能比真实早一点或晚一点。
4.盘口深度最多 1,000 档
- 现象
- 吃穿一半以上可见深度的市价单会被**拒单**,不会硬成交。
- 为什么
- 币安快照上限就是 1,000 档,这已经是能拿到的全部。超出的部分价格是多少,我们不知道。
- 对你
- 特别大的单下不出去。这是有意的——拒单比编一个价格给你诚实。
5.没有保险基金,也没有自动减仓(ADL)
- 现象
- 极端行情下你不会被「自动减仓」。
- 为什么
- 这两套机制的工程量接近再做一个撮合引擎。
- 对你
- 比真实交易所安全。真实市场里盈利方的仓位可能被强制减掉。
6.穿仓不追偿
- 现象
- 全仓爆仓后余额归零,不会变成负数。
- 为什么
- 模拟盘让用户背一笔虚拟债务没有意义。
- 对你
- 真实交易里极端行情可能倒欠交易所钱,这里不会。
7.行情断线期间暂停撮合
- 现象
- 顶部出现黄色横幅时,下单入口全部禁用;这段时间的价格变动不产生任何成交。
- 为什么
- 拿不到行情就不知道那一刻的真实价格。恢复后也不补算——不伪造历史。
- 对你
- 断线期间你的挂单、止损、触发单都不会触发。恢复后按恢复那一刻的行情继续。
8.挂单冻结的保证金比币安保守
- 现象
- 同时挂多空对敲单时,占用的资金比币安多。
- 为什么
- 我们把预留的吃单手续费也算进冻结里。
- 对你
- 方向是保守的:你可能觉得「钱不够用」,但不会出现超额开仓。
9.杠杆分层表每天同步一次
- 现象
- 币安盘中调整分层表时,我们最多滞后到次日 UTC 00:05。
- 为什么
- 调表是低频事件,日级同步足够;同步失败时保留旧表,不猜新值。
- 对你
- 极少数情况下,「当前杠杆最多能开多大」和币安当下的值不一致。
还有一条曾经被记为差别的:跨层杠杆超限时我们直接拒单。后来和币安核对过, 币安也是拒单(错误码 -2027),所以这条不算差别。
撮合与排队
你的单不会发到币安。它们进的是我们自己的挂单簿,靠两股真实数据来推动:币安的盘口快照(你看到的深度)和币安的逐笔成交(谁在什么价位成交了多少)。
- ·市价单:按当前盘口逐档吃,成交均价就是逐档加权的结果。这就是你看到的滑点。
- ·限价单:价格比对手价更优、吃不到的部分挂进队列当挂单方(Maker); 价格已经穿透盘口的部分立刻成交,按吃单方(Taker)收费。
- ·条件单(止盈止损):入簿时不冻结保证金,触发那一刻才转成市价单或限价单, 重新走一遍完整的下单校验——所以触发时也可能被拒(比如那时候余额不够了)。
- ·模拟用户的挂单互相不撮合。你的挂单要成交,得等币安那边在你的价位上真的成交了足够的量。
盘口深度与市价单拒单
我们从币安拿到的深度最多 1,000 档,这已经是公开数据的全部。界面上的盘口按你选的精度合并之后每侧显示 20 行, 但撮合用的是完整的那 1,000 档。
前方排队是怎么估的
委托列表里有一列叫前方排队:在你这个价位上,排在你前面还有多少量没成交。 币安不公开队列内部顺序,这个数是推出来的,分三步:
- ·下单时估一个上限:你挂进去的那一刻,这个价位上已有的挂单量就是排在你前面的量。 如果这个价位超出了可见范围,只能估——这时候界面上会显示 ≈。
- ·盘口更新时夹逼:下一张快照里这个价位总量变小了,说明前面的人要么成交要么撤了, 前方排队量跟着往下压。估算过的单一旦进入可见范围,直接换成真实值。
- ·成交发生时消耗:币安在这个价位每成交一笔,就从你前方的量里扣掉。 扣到 0 之后,再成交的量才轮到你,按你的挂单价成交。
所以会出现这种情况:最新价已经碰到你的挂单价了,单子却还没成交。 这是对的——价格碰到只说明有人在那个价位成交,不等于排在你前面的量已经被吃完。真实交易所也是这样。
保证金、强平与资金费
公式和币安一致,唯一的区别是上面列出来的那几条。所有依赖账户全局状态的数(强平价、保证金率、 可用余额、未实现盈亏)都由服务端算,界面只负责显示,不自己算一份。
按成交价 × 数量收。全站一个费率档,不按等级分。手续费按币安规则在开仓和平仓时各收一次。
强平清算费(只在被强平时收,比普通手续费高)
--
- ·起始保证金 = 名义价值 ÷ 杠杆。名义价值按标记价算,不按最新成交价。
- ·维持保证金按杠杆分层表算:仓位越大,要求的维持保证金比例越高, 能用的最高杠杆也越低。这张表每天从币安官方接口同步。
- ·保证金率 = 维持保证金 ÷ 保证金余额。这个数达到 100% 就触发强平, 所以账户面板上它越高越危险。
- ·全仓用整个账户的钱扛所有仓位,一个仓位亏损会拉低全部仓位的安全垫;逐仓每个仓位单独一份保证金,爆了只亏那一份。
强平
触发条件是权益跌到维持保证金以下(恰好相等也触发)。逐仓逐个仓位判,全仓按整个账户判。 触发之后的执行顺序:
- ·先撤掉这个币对上的挂单,把冻结的保证金释放出来
- ·下一张强平单,按当前盘口逐档吃。比破产价还差的档位不吃——吃了就要亏到别人头上
- ·吃不完的部分,按破产价平掉(破产价就是「这个仓位的保证金刚好亏光」的那个价)
- ·依次扣:已实现盈亏 → 吃单手续费 → 清算费。每一项最多扣到剩余资产为 0,不会把余额扣成负数
两点和真实交易所不同:我们不做部分强平(触发就平掉整个仓位); 也没有保险基金和自动减仓,所以吃不完的部分直接按破产价接管。
仓位表里的强平价有时候会显示 --,背后有三种互不相同的原因:
- ·保证金相对仓位过于充足:算出来的强平价是负数或者根本不在合法价格区间内, 说明当前价格走到 0 也碰不到强平线。
- ·双向持仓下的对冲:这个币对的多空仓位数量接近对冲,理论上不会被强平, 暂时算不出一个具体价格。
- ·全仓行情未到齐:账户里还有别的币对没收到标记价,算不出全仓强平价。
三种情况都是"暂时算不出来",不是页面故障,我们不会拿一个凑出来的数字顶上。
资金费
永续合约靠资金费把合约价格拉回现货附近:费率为正时多头付给空头,为负时反过来。 费率用的是币安的真实费率,我们不自己算。
- ·结算时间跟着币安走:币安的标记价推送里带着下一次结算时间,到点就结算, 币安调整结算间隔(默认 8 小时,按币对设置)我们自动跟上。
- ·金额 = 仓位名义价值 × 费率,名义价值按标记价算。逐仓仓位从这个仓位的保证金里付。
- ·行情断过线、拿不准结算那一刻的费率和标记价时,这一期不结算,也不事后补——同样是不编数字。
- ·结算完会立刻扫一遍风控:资金费付出去之后保证金不够了,会当场触发强平。
账户与重置
- ·开户发 10,000 USDT 模拟资金,同时记一笔「开户赠送」流水。
- ·账户的铁律是余额等于全部流水之和。每一次余额变动——盈亏、手续费、资金费、强平、 逐仓划转——都有一条流水,在历史记录里能从上往下一路对到当前余额。
重置模拟账户
重置不是直接把余额改回去。为了守住上面那条铁律,服务端走的是正常流程: 撤掉全部挂单 → 按标记价平掉全部仓位 → 再补一笔「账户重置」流水把余额调回初始值。 所以重置之后,历史记录里那一串平仓成交是真实存在的。
- ·24 小时只能重置一次。冷却中时按钮不可点,界面会显示什么时候能再来。
- ·重置会影响排行榜:统计周期内重置过的账户,不进当期的日榜和周榜 (否则亏完就重置,收益率可以刷)。
- ·排行榜的收益率以期初权益为分母,胜率按平仓成交算, 当期有成交才上榜。权益快照每天 UTC 00:00 拍一次,错过的那天不补。