合约交易,一般来说指的是期货合约,是期货交易所统一制定的、规定在未来某一特定时间和地点交割一定数量标的物的标准化合约。
笔者在学习合约交易系统开发的过程中,常常会思考期货合约存在的意义,目前我比较接受的说法是「无论是何种期货,其产生的根源都是市场对风险管理工具的需求」,直白说就是可以转嫁风险,同时承担风险的一方可以获得高额回报或者大额亏损。
这里我们以数字资产的期货合约为例,来实现一个基于 BTC/USDT 价格指数的期货合约。
期货合约需要交易双方以约定的「份数」进行买卖,例如黄金期货,外盘通常以「盎司」为单位进行买卖,只能买卖整数倍的合约。
在期货杠杆交易系统开发的期货交易中,通常不需要支付全额费用,而只需要支付一定比例的保证金。根据保证金比例不同,期货交易的杠杆也不同。例如,10% 的保证金率就是 10 倍杠杆,5% 的保证金率就是 20 倍杠杆。杠杆可以放大收益,也能扩大亏损。
很重要的一点,如果不计算交易所提取的手续费,期货合约的买卖双方就是一个零和博弈,即所有交易方的盈利和亏损相加为 0 。
先来看期货合约系统【搭建-可看我昵称】的组成模块:
和任何其他系统一 样,当用户的订单请求到来时,首先需要对【用户系统】进行身份认证,验证完成后,确认用户所选择的期货合约是否在有效期限内,接下来就需要【账户系统】验证用户用户是否有足够的余额来作为保证金进行交易。
如果以上验证均通过,该订单请求就由【订单系统】创建成功,并进入定序系统排队等待撮合,到达【撮合引擎】后,如果完成成交,订单由【清算系统】进行清算
和我们一般见过的现货交易不同的是,用户订单成交后,同时创建一个【仓位】(你可以理解为双方签订了合约),所以期货合约系统需要一个【仓位管理模块】来管理平台上所有的用户的仓位。
市场价格在实时变动,传统的期货交易所实行「当日无负债结算」的制度,用以防范风险和保障期货市场正常流转,收盘后要求亏损的用户补足保证金。数字资产交易所一般都是 24 小时交易,无法每日结算,因此需要一个动态的【爆仓引擎】。
爆仓引擎一般也是合约交易系统开发-交易所的核心所在。爆仓引擎会根据当前市场价格实时计算所有用户的仓位权益是否降至 0 ,如果期货杠杆交易系统开发用户的仓位保证金不足,爆仓引擎就会启动爆仓流程:
l 监测用户是否设置了「自动转入保证金」,并且账户是否有足够余额;
l 如果能自动转入保证金,则自动转入,权益提高,不需要爆仓;
l 如果不能自动转入,则爆仓引擎首先接管仓位,用户对此仓位的权益归零;
l 爆仓引擎计算用户权益为 0 的价格,并按照该价格平仓。平仓是否成功取决于市场波动性和流动性。
如果市场缺乏足够的流动性,导致爆仓引擎所持有的仓位无法及时平仓,交易所本身就会承受损失。在某个期货合约周期内,交易所可以选择所有盈利用户共同分担损失,也可以优先选择高风险盈利用户强制减仓来提高流动性。
如果选择强制减仓,系统还需要一个【 ADL 自动减仓系统 】,自动减仓系统根据用户风险和盈利高低对盈利仓位排序,排在靠前的仓位更有可能被强制减仓。
合约到期后,由【清算系统】对所有仓位进行交割,按照盈亏更新账户,然后平掉所有仓位,合约交割完成。