Author [EN] [ZH] [ES] [PT] [IT] [DE] [FR] [NL] [TR] [SR] [AR] [RU] [EN] [ZH] [ES] [PT] [IT] [DE] [FR] [NL] [TR] [SR] [AR] [RU] [EN] [ZH] [ES] [PT] [IT] [DE] [FR] [NL] [TR] [SR] [AR] [RU] Topic: Bitshares X的基本市场操作和交易引擎撮合算法  (Read 2445 times)

0 Members and 1 Guest are viewing this topic.

Offline crazybit

  • Sr. Member
  • ****
  • Posts: 402
    • View Profile
Bitshares X的基本市场操作和交易引擎撮合算法
« on: August 13, 2014, 04:38:19 PM »

传统的证券交易市场有股票交易市场和期货交易市场,而且这两种市场在传统的证券交易系统里是两个分开的交易市场。而Bitshares X比较复杂的其中一个原因,就是因为将这两个交易市场集成在一个系统里,要清晰的理解还是有一定的难度的,我也是看了几遍白皮书并反复查看源代码来帮助理解,才算基本理解他的运行原理。交易引擎撮合算法也算是系统的核心逻辑,涉及Bitshare X的基本原理和证券市场操作的理论,我会试图用简单的语言描述。但是要做到通俗易懂还是比较困难的。同时因为系统也在不停的改进中,如果系统更新,我也会更新文章,当然如果理解有误差,也欢迎指出。

Bitshares X的交易撮合算法涉及几种操作,要理解其运行原理和撮合算法必须先理解一下以下几个基本操作。

买(bid)卖(ask)操作,这是股票市场里最基本的操作,比如在A股市场里,你用人民币买入股票,或者卖出手中的股票换得人民币,这两个操作很好理解。应该没有人不知道吧 ^_^

做空(Short Sell),平仓(cover),强制平仓,和增加保证金(add collateral)操作,则是期货市场里的基本操作。做空:你预期某资产将贬值,则你可向市场借入此资产然后卖出,而在你借入资产的同时每个做空单都会计算出一个自动平仓价。平仓:则是在价格上升至自动平仓价之前和期货交割之前从市场里买入你做空的资产平掉之前的做空仓位。而在期货市场做空资产会有两种可能,一是市场按你的预期运行,你可以在交割之前用比之前更低的价格买回做空的资产进行平仓,这样你将获利。二是市场按你预期的相反方向运行,则你将亏损,为了避免亏损进一步扩大,你可以主动买入资产平掉你的做空仓位,或者任由价格继续上涨到你的自动平仓价,系统将自动买入资产进行平仓称为强制平仓。当然为了避免系统强制平仓,你也可以增加保证金,从而提高自动平仓价避免被系统强制平仓。

在Bitshares X里也有以上这几种基本操作,而且是在同一个系统,同一个交易引擎里完成的。而且股市的交易操作可以交叉匹配期货的交易操作。

在Bitshares X里,你可以卖出比特股(BTSX)从而得到比特股资产(BTA,比如USD),当然也可以用比特股资产来购买比特股。这跟以上的股票交易市场的基本操作是一样的。刚才前面也提及,Bitshare X里将传统的股票交易和期货交易两个市场集成在一个系统里,所以在Bitshares X系统里,除了可以完成股票交易的操作,还可以完成期货交易的操作。如果你预期某比特股资产(比如USD)相对于比特股将贬值,或者说看多比特股,则可以做空你看空的比特股资产。只是与传统期货交易市场不同的是,在Bitshare X里做空比特股资产是通过向系统抵押比特股来产生比特股资产然后卖出的。还有一点需要注意的是Bitshare X里的任意两种资产都是可以交易的,而且Bitshares X系统的买和卖都是相对的。你买入一种资产就等于另卖出一种资产。以BTSX和USD的典型交易为例,你卖出USD实就是等于买入BTSX,虽然在交易引擎内部最终都是以比特股计价的,但是在操作界面里,当你下一个做空单(short sell)卖出比特股资产时,可以以BTSX/USD计价(1USD值多少BTSX)被放入卖出(aks)单队列或者以USD/BTSX计价(1BTSX值多少USD)被当作买入比特股放在买入单(bid)队列里。举个简单的例子,你想以每个BTSX等于0.5USD的价格买入BTSX,在操作界面里则可以以0.5 USD/BTSX计价方式挂买单队列,或者以2 BTSX/USD的计价方式挂入卖单队列。

为了防止人为操作市场,BitShares X里还有自己独特的一个成交算法,简单的讲就是,如果符合成交条件,买方和卖方都以他们下单的价格成交,是不是不太好理解?举个例子,买方A以1USD的价格买入1BTSX,卖方B以0.5USD的价格卖出1BTSX.在传统的交易市场里,最终会以0.5USD的价格成交1BTSX。即A收到以0.5USD价格成交的1BTSX,付出0.5USD给B,B完成交易,而A剩下的0.5USD继续与卖单成交。但是Bitshares X却不是这样的,而是双方都以他们的下单价格成交,即是A收到1BTSX,付出1USD,B收到0.5USD,付出1BTSX,在这里不难发现双方都完成了交易,A支付1USD,而B只收到0.5USD,中间有0.5USD的差额,在BitsharesX里,这0.5USD是被当作交易费收入交易费池子里的。

理解以上系统里的基本操作,才可以进一步探讨交易引擎的撮合算法,然而系统要触发交易引擎进行撮合交易是有一定的前提条件的,其条件如下:
1.买入队列和卖出队列每边必须有2百万比特股的深度。
2.市场的第一笔成交指导价由受托人从外部导入,且过去24小时提供指导价的受托人数目必须大于51,最高的做空价不能高于平均指导价的4/3,最低的卖出价比不能低平均指导价的2/3.
3.之后的平均指导价格则不需要受托人导入的价格,而是根据过去的成交价格进行加权平均,其公式为((过去的平均指导价*(60*60/10-1)+成交买单价格+成交卖单价格)/(60*60/10+1)
4.买入价格大于或者等于卖出价格

根据以上的前提条件和买入及卖出队列的情况,交易引擎可以发生以下四种撮合交易。

一. 普通的买入单匹配普通的卖出单。买入方得到卖出方的比特股,卖出方得到买入方的比特股资产。
二. 做空单匹配普通的卖出单,卖出方得到比特股资产,而卖出方卖出的比特股将和做空方抵押的比特股相加和为两倍的比特股形成一个抵押单存入系统数据库,并且根据产生的比特股资产和抵押的2倍比特股计算出这个抵押单的自动平仓价。其价格为做空价的3/4,系统在撮合每一单交易时都会检查系统数据库中是否有符合自动平仓的抵押单,就是说当比特股相对于被做空的比特股资产贬值至原来的3/4者说被做空的比特股资产相对于比特股升值至原来的4/3,则会触发一个强制平仓操作,系统会卖出这个抵押单所抵押的比特股来买入比特股资产试图进行强制平仓。强制平仓会额外产生5%的手续费。而强制平仓的过程即是以下三和四的撮合交易。
三. 普通的买入单匹配平仓单,正常情况下,买入方得到平仓方卖出的比特股,而平仓方获得买入方的比特股资产试图平掉抵押单。但是在这个匹配过程中,有可能出现买入单价格过高,导致抵押单的平仓操作用完所有的比特股都都无法平仓的情况,在这里,系统引入了网络版的联邦存款保险公司(FDIC),系统为了确保系统稳定运行,如果出现用完保证金也无法平仓的情况,则可以自动为这个抵押单增加保证金以确保这个抵押单可以用系统增加的比特股来买入比特股资产进行完全平仓。
四. 做空单匹配平仓单,做空方得到平仓方卖出抵押的比特股,加上自己的抵押的比特股形成一个新的抵押单存入系统,并同时根据以上交易2中的算法计算出这个抵押单的自动平仓价格。而平仓方将得到做空方的比特股资产平掉自己的抵押单。如果未能完全平仓,则重复三和四。

如果你觉得本文对你理解Bitsharesx的运行原理和交易引擎撮合算法有帮助,请考虑给我打赏我一杯咖啡或者给我的受托人点个赞 ^_^
« Last Edit: August 21, 2014, 12:43:59 PM by crazybit »
Delegate IDs: dpos.crazybit | titan.crazybit | anchor.crazybit |crazybit

Online jojomaster

  • Sr. Member
  • ****
  • Posts: 205
    • View Profile
Re: 交易引擎撮合算法
« Reply #1 on: August 13, 2014, 04:49:51 PM »
:-*

Offline HackFisher

  • Hero Member
  • *****
  • Posts: 883
    • View Profile
Re: 交易引擎撮合算法
« Reply #2 on: August 13, 2014, 05:16:48 PM »
Quote
2.24小时内提供指导价的受托人数目必须大于101/32=3

应该是 101/3 = 33 个。
Anything said on these forums does not constitute an intent to create a legal obligation or contract between myself and anyone else.   These are merely my opinions and I reserve the right to change them at any time.

Offline hiver

  • Full Member
  • ***
  • Posts: 76
    • View Profile
Re: 交易引擎撮合算法
« Reply #3 on: August 13, 2014, 05:23:15 PM »
受益匪浅。

Offline Musewhale

  • Hero Member
  • *****
  • Posts: 2745
  • 丑,实在是太丑了 !
    • View Profile
Re: 交易引擎撮合算法
« Reply #4 on: August 13, 2014, 06:06:57 PM »
太好了,我正需要学习这个  :P :P :P

因为咖啡太贵,所以打赏了300个嫩模 ;D
当初你说炒币不烧钱,现在我全家都怀疑我吸毒

Offline ripplexiaoshan

  • Moderator
  • Hero Member
  • *****
  • Posts: 1981
    • View Profile
  • BTS: xiaoshan
Re: 交易引擎撮合算法
« Reply #5 on: August 13, 2014, 07:54:47 PM »
写的很清楚,多谢LZ,已经加入FAQ新手资源 +5% +5%
BTS ID:xiaoshan                   www.yoyow.org      www.btsabc.org      www.openledger.info

Offline 天籁

  • Hero Member
  • *****
  • Posts: 550
    • View Profile
Re: 交易引擎撮合算法
« Reply #6 on: August 13, 2014, 11:52:23 PM »
 +5%
BM发起了一个新帖子:

FDIC for BitUSD—— BitUSD之FDIC(联邦存款保险公司)
https://bitsharestalk.org/index.php?topic=6867.0

主要讨论空头头寸背后的抵押品不足时的三种应对方法:

1)冻结所有市场,直到持有BitUSD的某个人愿意亏本出售。
2)贬值BitUSD,通过允许无背书的BitUSD流通。
3)贬值XTS,通过发行新XTS来弥补损失。

请相关金融领域从业者参与讨论。
BTS account: disneyland
PLAY account: playone

Offline yidaidaxia

  • Full Member
  • ***
  • Posts: 179
    • View Profile
Re: 交易引擎撮合算法
« Reply #7 on: August 14, 2014, 12:24:51 AM »
Quote
2.24小时内提供指导价的受托人数目必须大于101/32=3

应该是 101/3 = 33 个。

之前不是说25个吗?
« Last Edit: August 14, 2014, 01:58:29 AM by yidaidaxia »
PTS: PmUT7H6e7Hvp9WtKtxphK8AMeRndnow2S8   /   BTC: 1KsJzs8zYppVHBp7CbyvQAYrEAWXEcNvmp   /   BTSX: yidaidaxia (暂用)
新浪微博: yidaidaxia_郝晓曦 QQ:36191175试手补天

Offline cranecpa

  • Full Member
  • ***
  • Posts: 199
    • View Profile
Re: 交易引擎撮合算法
« Reply #8 on: August 14, 2014, 01:19:20 AM »
非常感谢,楼主辛苦了。

Offline gyhy

  • Hero Member
  • *****
  • Posts: 848
    • View Profile
Re: 交易引擎撮合算法
« Reply #9 on: August 14, 2014, 01:33:38 AM »
 8)

Offline crazybit

  • Sr. Member
  • ****
  • Posts: 402
    • View Profile
Re: 交易引擎撮合算法
« Reply #10 on: August 14, 2014, 01:44:52 AM »
Quote
2.24小时内提供指导价的受托人数目必须大于101/32=3

应该是 101/3 = 33 个。
我重新看了宏BTS_BLOCK_MIN_FEED的配置,确实是101/32,不知是不是我理解错误。
Delegate IDs: dpos.crazybit | titan.crazybit | anchor.crazybit |crazybit

Offline yidaidaxia

  • Full Member
  • ***
  • Posts: 179
    • View Profile
Re: 交易引擎撮合算法
« Reply #11 on: August 14, 2014, 01:57:56 AM »
+5%
BM发起了一个新帖子:

FDIC for BitUSD—— BitUSD之FDIC(联邦存款保险公司)
https://bitsharestalk.org/index.php?topic=6867.0

主要讨论空头头寸背后的抵押品不足时的三种应对方法:

1)冻结所有市场,直到持有BitUSD的某个人愿意亏本出售。
2)贬值BitUSD,通过允许无背书的BitUSD流通。
3)贬值XTS,通过发行新XTS来弥补损失。

请相关金融领域从业者参与讨论。

说下我的理解:
方案1,不是正常市场机制,在无背书BitUSD出现后会导致市场交易暂停,且解除暂停的条件依靠某个人的自愿“牺牲”,不靠谱。
方案2,允许无背书BitUSD流通,会从根本上动摇锚定机制,使得BitUSD : USD越来越小,亦即单位BitUSD相对于USD越来越贬值,不可取。
方案3,通过增发BTSX来替这些BitUSD背书,虽然等同于全体持股人付出代价为某个或某些在市场中操作失败的人收拾残局,但是:
       1. 这种损失是机制化的,参与者都应知道可能发生,对持股人而言是可预见风险;
       2. 由于主贴里提到的种种机制(感谢楼主),目前已经无法利用该机制套取大量BTSX牟利,原本担心的这方面风险和对系统影响已经很低;
      3. 导致无背书BitUSD出现的爆仓,肇因是BitUSD相对BTSX大幅贬值,即BTSX升值,而增发BTSX是削弱BTSX价值,两者一定程度上是对冲
所以我觉得方案3合理,实际也是社区主流支持的方案和第14轮测试使用的方案。

Edit: 支持方案3的第三条理由我理解反了([email protected] 指正),实际爆仓说明BTSX贬值,而增发会加剧,但考虑到增发量很有限,应该不是一个方案3强有力的反对理由。
       
« Last Edit: August 14, 2014, 08:02:21 AM by yidaidaxia »
PTS: PmUT7H6e7Hvp9WtKtxphK8AMeRndnow2S8   /   BTC: 1KsJzs8zYppVHBp7CbyvQAYrEAWXEcNvmp   /   BTSX: yidaidaxia (暂用)
新浪微博: yidaidaxia_郝晓曦 QQ:36191175试手补天

Offline crazybit

  • Sr. Member
  • ****
  • Posts: 402
    • View Profile
Re: 交易引擎撮合算法
« Reply #12 on: August 14, 2014, 02:12:09 AM »
太好了,我正需要学习这个  :P :P :P

因为咖啡太贵,所以打赏了300个嫩模 ;D
嫩模比咖啡更高大上,熊是不是准备开嫩模公司?到时候一嫩模股兑换一嫩模 :-)
Delegate IDs: dpos.crazybit | titan.crazybit | anchor.crazybit |crazybit

Offline crazybit

  • Sr. Member
  • ****
  • Posts: 402
    • View Profile
Re: 交易引擎撮合算法
« Reply #13 on: August 14, 2014, 02:18:33 AM »
+5%
BM发起了一个新帖子:

FDIC for BitUSD—— BitUSD之FDIC(联邦存款保险公司)
https://bitsharestalk.org/index.php?topic=6867.0

主要讨论空头头寸背后的抵押品不足时的三种应对方法:

1)冻结所有市场,直到持有BitUSD的某个人愿意亏本出售。
2)贬值BitUSD,通过允许无背书的BitUSD流通。
3)贬值XTS,通过发行新XTS来弥补损失。

请相关金融领域从业者参与讨论。
这是撮合交易过程中,如果价格剧烈变化可能引发的一种保护机制,昨晚写得比较急,很多细节都没涉及到,后面会加入正文。
Delegate IDs: dpos.crazybit | titan.crazybit | anchor.crazybit |crazybit

Offline Musewhale

  • Hero Member
  • *****
  • Posts: 2745
  • 丑,实在是太丑了 !
    • View Profile
Re: 交易引擎撮合算法
« Reply #14 on: August 14, 2014, 02:20:31 AM »
+5%
BM发起了一个新帖子:

FDIC for BitUSD—— BitUSD之FDIC(联邦存款保险公司)
https://bitsharestalk.org/index.php?topic=6867.0

主要讨论空头头寸背后的抵押品不足时的三种应对方法:

1)冻结所有市场,直到持有BitUSD的某个人愿意亏本出售。
2)贬值BitUSD,通过允许无背书的BitUSD流通。
3)贬值XTS,通过发行新XTS来弥补损失。

请相关金融领域从业者参与讨论。

说下我的理解:
方案1,不是正常市场机制,在无背书BitUSD出现后会导致市场交易暂停,且解除暂停的条件依靠某个人的自愿“牺牲”,不靠谱。
方案2,允许无背书BitUSD流通,会从根本上动摇锚定机制,使得BitUSD : USD越来越小,亦即单位BitUSD相对于USD越来越贬值,不可取。
方案3,通过增发BTSX来替这些BitUSD背书,虽然等同于全体持股人付出代价为某个或某些在市场中操作失败的人收拾残局,但是:
       1. 这种损失是机制化的,参与者都应知道可能发生,对持股人而言是可预见风险;
       2. 由于主贴里提到的种种机制(感谢楼主),目前已经无法利用该机制套取大量BTSX牟利,原本担心的这方面风险和对系统影响已经很低;
       3. 导致无背书BitUSD出现的爆仓,肇因是BitUSD相对BTSX大幅贬值,即BTSX升值,而增发BTSX是削弱BTSX价值,两者一定程度上是对冲

所以我觉得方案3合理,实际也是社区主流支持的方案和第14轮测试使用的方案。
     

我只能蹲墙角看看了... :'( :'( :'(
当初你说炒币不烧钱,现在我全家都怀疑我吸毒

 

Google+