-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
TigerZH
committed
Mar 8, 2022
1 parent
42bd258
commit 1e97a14
Showing
30 changed files
with
335 additions
and
131 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
# ETF | ||
|
||
## 概述 | ||
|
||
ETF全称Exchange Traded Fund:交易所交易基金。 | ||
|
||
## 序言 | ||
|
||
在交易所,可以满仓梭哈一只股票:如果早年梭哈了茅台,现在就走上了人生巅峰,如果早年梭哈了乐视,现在……已经退市了。可见,梭哈不是一种好的投资策略。 | ||
|
||
## 商场需求 | ||
|
||
为了防范单一股票存在的暴雷风险,可以把资金分成10份,分别买入10只股票,即使有一只股票暴跌退市了,亏损最多也才10%。如果把资金分成100份,买入100只股票,风险就更加分散了。 | ||
|
||
但是一个小散本身资金量不大,可能连一手茅台都梭哈不了,怎么分散买入100只股票? | ||
|
||
可以投资基金,因为基金汇集了很多投资人的钱,体量很大,几亿到几十亿的规模,分散买入100只股票是完全可以而且能轻松实现的。但是,常规的基金有申购和赎回的时间窗口,不能自由交易,赎回价格也是一天收盘后算一次,白天交易所交易时并不能赎回,价格也不会波动。用流动性来说,就是常规基金的流动性不如股票。 | ||
|
||
## ETF解决的问题 | ||
|
||
而ETF基金解决了常规基金交易不便的问题。例如沪深300ETF,它就是按沪深300的指数构成买入这300种股票。一个小散买入一手沪深300ETF,就相当于按比例买入了300只股票。更重要的是,300ETF和普通股票一样,在交易所交易。由于沪深300ETF跟踪的是沪深300指数,指数时刻在波动,因此,沪深300ETF的价格也在时刻波动 | ||
|
||
因此,一个ETF完全可以看作是一揽子组合型股票。根据投资策略,想投大盘股选上证50ETF,想投中小股选中证500ETF,折中就选沪深300ETF。此外,各行业也有各自的ETF。选择ETF主要看资产配比,下图是沪深300ETF的资产配比 | ||
|
||
即每投入100元相当于5.46元买入了茅台,3.05元买入了招行,等等。 | ||
|
||
在A股,由于没有个股期权,投资ETF还有一个额外的好处,就是某些ETF,有对应的期货和期权,可以实现风险对冲。关于期货和期权,我们在后面讨论。 | ||
|
||
既然持有ETF就相当于持有了一揽子股票,它最大的好处就是分散风险。但是在A股,ETF也有一个缺点,就是持有ETF不计入持股市值,无法参与新股申购。 | ||
|
||
## 特点 | ||
|
||
1. 能按比例打包一揽子资产,方便购买; | ||
2. 能在交易时间段像普通股票一样在场内交易。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
# Uniswap | ||
|
||
## 引言 | ||
|
||
在现货交易中,买卖双方各自报价,然后撮合成交,这是最简单,最直接,也是微观层面可以直接实现的一种交易方式。因此,自世界上第一家证券交易所诞生以来,撮合交易一直是最主流的方式。 | ||
|
||
## 问题 | ||
|
||
随着DeFi的兴起,在以太坊这样的去中心化链上怎么实现买卖双方的交易?最直接的想法是把买卖盘搬到链上。然而,严重的技术问题导致了这种方式既慢又不经济。 | ||
|
||
## 解决方案 | ||
|
||
对以太坊这种可以运行智能合约的链来说,交易实际上就是执行合约的函数。一个合约部署在链上,实际上相当于一组函数代码存放在链上。任何用户都可以通过钱包软件来调用这些函数,实现与合约的交互。但是,有几个限制: | ||
|
||
1. 每次只能调用一个函数,不过这个问题不大,因为合约内部,一个函数又可以调用其他函数; | ||
2. 用户必须主动发起调用,合约自身无法主动调用任何函数,也不存在定时调用机制,这是区块链的确定性计算和可验证性决定的,因此,价格涨到某个位置自动卖出或者价格跌到某个位置自动买入是无法在链上实现的; | ||
3. 买卖订单写入链上非常昂贵,如果一个订单写入是$0.1,那么100万个订单就要$10万,并且,第二天100 万个新订单又需要$10万,这个成本是不可能被用户接受的; | ||
4. 链上极低的TPS(一般在每秒几十到几百),无法支持传统撮合交易高达每秒上百万的性能。 | ||
|
||
## 智能合约 | ||
|
||
而智能合约有几个独特的技术特性: | ||
|
||
1. 智能合约没有私钥,即使是合约部署者,也没有合约的控制权。所谓的合约控制人,只能写到代码逻辑里; | ||
2. 合约可以持有资产,这意味着与合约交互时,既可以把资产转移到合约,也可以从合约转移资产出去。 | ||
|
||
一句话总结,就是链上的交易,总是交易员与合约交互,这与传统的撮合交易,总是人与人的交互不同。因此,简单照搬撮合模式的链上交易,无一例外都不成功。 | ||
|
||
## Uniswap 解决了这个问题 | ||
|
||
直到2018年底,Uniswap上线,一个全新的Swap交易模式诞生了。 | ||
|
||
需要特别指出的是,此Swap不是指金融衍生品的掉期,它是Uniswap的现货交易模式。 | ||
|
||
Uniswap首先解决的问题是任何交易员都是在与链上的合约程序交易,由合约本身充当做市商,即自动化做市商 AMM:Automated Market Maker。对于两种资产组成的交易对,例如UNI/ETH,卖出ETH,买入UNI,或者卖出UNI,买入ETH,要与程序完成这笔交易,合约本身首先要持有这两种资产,比如100个ETH和2000个UNI,这样,交易员用1个ETH买入20个UNI后,合约持有资产可能变成101个ETH和1980个UNI。如果另一个交易员稍后卖出40个UNI,合约持有的资产又可能变成2020个UNI和99个ETH。 | ||
|
||
程序做市的资产从哪来呢?只能由流动性提供者LP(Liquidity Provider)先存入合约。为了鼓励LP将资产作为流动性存入合约,需要以手续费返还的形式作为激励。 | ||
|
||
和撮合产生市场价不同,和程序交易,需要用算法产生市场价。Uniswap引入了最简单的固定乘积公式`x * y = k`来由程序决定价格。 | ||
|
||
还是以UNI/ETH为例,如果初始状态下LP注入2000个UNI和100个ETH到流动性池子里,那么初始价格就是1ETH=20UNI,或者1UNI=0.05ETH,而乘积`k = 2000 * 100 = 200000`就是固定常数。 | ||
|
||
假设下一个交易员准备卖1个ETH,他将买入N个UNI,池子里会有100+1个ETH和2000-N个UNI,带入公式`(100 + 1) * (2000 - N) = 100 * 2000`,计算得知N=19.802,因此,不计手续费的情况下该交易员花费1ETH获得19.802个UNI,买入UNI后价格变为1ETH=19.606UNI,或者1UNI=0.051ETH,即UNI的价格略微上涨。 | ||
|
||
在Uniswap交易对中,两种资产的地位是等价的,且任何人都可以注入流动性充当做市商。对做市商来说,任何时候,都可以按照当前价格的比例注入两种资产,Uniswap会计算新注入的LP的占比,并返回给做市商一个LP代币作为做市凭证。做市商稍后可以将LP凭证兑换出两种资产,并在兑换时一次性获得累计的手续费。 | ||
|
||
做市商的风险在于,做市的价格和退出做市的价格很可能不一样,例如做市时注入了100ETH和2000UNI,退出时取出了50ETH和4000UNI,价格变化可能造成做市商损失,这种损失被称为无常损失:Impermanent Loss。 | ||
|
||
## 裂变机制 | ||
|
||
对交易员来说,往一个交易池里扔进去一种资产,就自动获得另一种资产,数量由Uniswap计算后确定,这就是Swap。 | ||
|
||
每次Swap交易都会改变交易池里两种资产的数量,从而引起价格的变动。那么,影响滑点大小的因素有哪些呢?由Uniswap价格公式可知,如果做Swap交易的数量较少,则滑点较小。如果流动性池子的资产数量越多,则滑点越小。因此,注入到池子里的资产数量至关重要,Uniswap用总锁仓量TVL:Total Value Locked表示池子的大小,可以从Uniswap交易页看到TVL排名靠前的交易池: | ||
|
||
![图片](/Users/zh/Documents/workspace/web/NoteBook/src/public/images/1111.png) | ||
|
||
如果交易员想要交易UNI/WBTC,但是Uniswap没有这个交易池,或者交易池太小,怎么办?可以找两个较大的交易池,例如UNI/ETH和WBTC/ETH,做两次Swap,完成UNI和WBTC的交易: | ||
|
||
|
||
|
||
![图片](../public/images/open-2.png) | ||
|
||
|
||
|
||
这种借助中介资产的交易方式会付出更多的手续费,但滑点会大大降低。 | ||
|
||
由于流动性池子的大小对于滑点有重要影响,而通常价格只会在某个范围波动,为了更好地利用做市商的流动性池子,Uniswap的V3协议允许做市时指定价格区间,超过区间后该做市商的资金就不会被使用。这种改进的目的在于使用更少的资金提供相同的流动性: | ||
|
||
![图片](../public/images/open-3.png) | ||
|
||
除了Uniswap,还有其他基于链上Swap的DEX。 | ||
|
||
Balancer允许多个资产在同一个池子中交易,它采用的公式如下: | ||
|
||
![图片](../public/images/open-4.png) | ||
|
||
Curve也允许多个资产在同一个池子中交易,它采用的公式如下: | ||
|
||
![图片](../public/images/open-5.png) | ||
|
||
数学功底过硬的同学可以自行推导价格变化曲线,这里我们就不展开细讲了。 | ||
|
||
## **术语** | ||
|
||
- 自动化做市商AMM:Automated Market Maker | ||
- 流动性提供商LP:Liquidity Provider | ||
- 无常损失:Impermanent Loss | ||
- 总锁仓量TVL:Total Value Locked | ||
|
||
## **小结** | ||
|
||
Uniswap开创了自动化做市的AMM机制,使得程序化在链上做市成为可能。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
# 做市 | ||
|
||
## 序言 | ||
|
||
在撮合交易中,如果买卖双方交易不频繁,或者换一种说法,就是市场不活跃,这个时候,会导致原本就比较难成交的买卖更难成交。 | ||
|
||
举个例子,如果一个卖家想在5块钱卖出1万股,但是发现盘口没有5元的买单,原本想卖出的意愿可能就打消了。几分钟后,如果有人想在5元买入,也会发现没有合适的卖单。 | ||
|
||
## 做市的出现 | ||
|
||
所以为了提高市场的流动性,交易所通常会引入做市商:Market Maker。一个做市商通常会同时在5元附近挂出5.01的卖单和4.99的买单,这样,想要卖出的人可以直接和做市商的买单成交,想要买入的人可以直接和做市商的卖单成交。通过这个中间商,买卖双方不一定要在同一时间报价才能成交,他解决了买卖双方时间错位的问题。这个中间商有点像二手车贩子,如果没有二手车贩子,想要买卖二手车在某一时间点是非常难以匹配的。但是和二手车贩子不同的是,做市商在金融市场每一单能赚的差价是很小的。此外,如果买卖双方数量有一定差额,做市商手里就会积累净头寸而产生风险,好比二手车贩子收购的二手车砸手里没卖出去,就只能亏损处理,因此做市商需要想办法对冲掉这些风险。 | ||
|
||
## 专业的做市 | ||
|
||
专业的做市商是由交易所登记的,他们的账户买卖手续费很低甚至为零。从做市商的行为来看,他需要先在盘口摆上买卖单,等卖家吃掉买单,买家吃掉卖单。因此,任何一笔成交,都有一方是挂在盘口的,称为挂单(Maker),另一方主动吃掉对方,称为吃单(Taker)。做市商的单,绝大部分都是Maker。 | ||
|
||
从流动性的角度看,下单挂在盘口的Maker,负责提供流动性,吃掉盘口订单的Taker,负责消灭流动性。实现流动性,既需要提供流动性的交易者,也需要消灭流动性的交易者,否则就无法成交。做市商充当的是提供流动性的一方。 | ||
|
||
从广义的做市角度看,凡是下单后挂在盘口的订单,都是Maker。Maker不一定要由专业的做市商充当,任何交易员都可以充当Maker,即流动性提供者。交易所提供的高级订单指令有一种Post Only类型的订单,就是保证做市订单。一个Post Only订单发送后,如果不会与对手盘成交,它就挂在盘口成为Maker,如果会与对手盘成交,它将自动取消。 | ||
|
||
与Post Only订单只做Maker对应的,还有一种只做Taker的IoC订单:Immediate or Cancel,它会先吃掉对手盘符合价格条件的订单,如果没有完全成交,未成交部分自动取消。 | ||
|
||
大部分普通订单,是先以Taker身份吃掉对手盘符合价格条件的订单,未成交部分自动挂在盘口成为Maker。 | ||
|
||
交易所为了鼓励交易员提供流动性,通常以Maker成交的订单享有更低的费率,甚至是负费率,即交易所返还手续费给Maker。假设Taker费率为0.1%,Maker费率为-0.05%,则做市商即使在同一价位买卖,也可以赚取手续费差价。只要Taker和Maker的费率之和大于0,做市商自身就没有自买自卖造假的动力,因为要付出手续费成本。 | ||
|
||
## 现状 | ||
|
||
最后补充一下,现在所有的做市商都是程序化做市,即依靠高频交易程序获取市场价格与盘口深度,然后决定做市策略,成交后如何自动对冲风险,等等。人工做市的时代早就结束了。 |
Oops, something went wrong.