# 幣本位合約 (反向合約)
以 BTC 本位合約為範例
## 概述
* 美元本位與 BTC 本位
* 美元本位 : 以 USDT 當作保證金,交易 BTC (以 USDT 結算損益、期望賺更多 USDT)
* BTC 本位 : 以 BTC 當作保證金,交易 BTC (以 BTC 結算損益、期望賺更多 BTC)
* 理論上把 BTC 當基準,應該是要拿來交易 USDT 才對
* 比方說 : 買入 USDT,USDT 上漲則可累積更多 BTC
* 但這項商品仍是「看漲 BTC」,期望 BTC 上漲能累積更多的幣?
* 所以也稱為反向合約,可以視為一種「把標的價格看反的特殊衍生品」
* BTC 本位合約
* 可以把 BTC 想像成美元,拿這個東西買賣美元合約,但卻是「反向」的損益模式
* 用美元本位的角度,因為本身持有 BTC,又看漲 BTC,做多合約有點類似開兩倍槓桿
* 不用傳統的模式思考,可以想成,拿 BTC 操作一個「有特殊損益計算方式」的衍生品就好
## 損益計算
* 買賣的標的是 USD
* 假設每張合約價值為 1U
* 需持有 BTC 作為保證金
* unrealized_PL
* $\text{Long Position} : \text{倉位大小} \times ({1 \over \text{entry_price}} - {1 \over \text{exit_price}})$
* $\text{Short Position} : \text{倉位大小} \times ({1 \over \text{exit_price}} - {1 \over \text{entry_price}})$
### 倉位價值
1. 在 price = 50000 時,做多 100U 的倉位,價值為 100 / 50000 = 0.002 顆
2. 在 price = 40000 時,做多 100U 的倉位,價值為 100 / 40000 = 0.0025 顆
3. 在 price = 80000 時,做空 100U 的倉位,價值為 -100 / 80000 = -0.00125 顆
### 平均開倉價格
* 平均開倉價格 = 合約總數量 / BTC 合約總價值
* 計算範例
* 於 price = 50000 時,做多 1000U 的倉位
* 於 price = 60000 時,做多 2000U 的倉位
* 平均開倉價格 = $3000 \div ({1000 \over 50000} + {2000 \over 60000}) = 56250$
* 示範一個錯的算法 : $(1000 \times 50000 + 2000 \times 60000) \div 3000 = 56666.67$
### 做多合約
1. 假設初始保證金為 0.002 BTC
2. entry_price = 50000,做多 100U 的倉位 => 100 / 50000 => 此時做多 0.002 顆 BTC
3. 假設 current_price = 80000
* $\text{unrealized_PL} = 100 \times ({1 \over 50000} - {1 \over 80000}) = 0.00075$
* 此時的保證金 (含未實現損益) 為 0.00275 BTC
* BTC/USD 價格上漲 60%,對於該部位獲利 37.5%
4. 假設 current_price = 40000
* $\text{unrealized_PL} = 100 \times ({1 \over 50000} - {1 \over 40000}) = -0.0005$
* 此時的保證金 (含未實現損益) 為 0.0015 BTC
* BTC 價格下跌 20%,對於該部位虧損 25%
```python!
# 開 100U 多倉在 50000 元
entry_price = 50000
exit_price = 80000
# PnL for coin
100 * (1 / entry_price - 1 / exit_price)
```
#### BTC 損益曲線
* 假設 entry_price = 50000,做多 100U 的倉位
* 本金為 0.002 顆 BTC,同部位價值 (初始做多 0.002 顆 BTC)
* 幣價跌 50%,本金虧損 100%
* 幣價漲 100%,本金獲利 50%
* 公式解 (y: 報酬率 ; x: 資產價格變動百分比)
* $y = 1 - {1 \over {1+x}}$

```python!
x = range(25000, 101000, 1000)
y = [(100 * (1/entry_price - 1/i) / 0.002) * 100 for i in x] ## 幣的顆數損益 (%)
plt.plot(x,y)
plt.axvline(x=50000, color='r', linestyle='--', linewidth=2)
plt.title('BTC PNL (%) - Long BTC Inverse Contract')
plt.xlim(25000, 100000)
plt.xticks(list(range(25000, 125000, 25000)))
plt.ylim(-100, 50)
plt.yticks(list(range(-100, 75, 25)))
plt.show();
```
#### 若轉換成美元價值的損益曲線
* 通常做幣本位不會這樣轉換,這邊只是作為參考
* 轉換美元本位後,一倍部位相當於兩倍槓桿的損益曲線
* 幣價跌 50%,本金虧損 100%
* 幣價漲 100%,本金獲利 200%

```python!
x = range(25000,101000,1000)
y = [(((0.002 * i) + (100 * (1/entry_price - 1/i) * i)) - 100) / 100 * 100 for i in x] ## 轉換成美元損益 (%)
plt.axvline(x=50000, color='r', linestyle='--', linewidth=2)
plt.plot(x,y)
plt.title('USDT PNL (%) - Long BTC Inverse Contract')
plt.xlim(25000, 100000)
plt.xticks(list(range(25000, 125000, 25000)))
plt.ylim(-100, 200)
plt.yticks(list(range(-100, 250, 50)))
plt.show();
```
#### 損益比較
* 以 0.002 顆 BTC 作為保證金,初始做多 0.002 顆 BTC 的部位價值
| 幣價 | 幣本位損益 | 美元本位損益 |
|:----:|:----------:|:------------:|
| 200% | 66.67% | 400% |
| 150% | 60% | 300% |
| 100% | 50% | 200% |
| 80% | 44.44% | 160% |
| 60% | 37.5% | 120% |
| 40% | 28.57% | 80% |
| 20% | 16.67% | 40% |
| 0% | 0% | 0% |
| -10% | -11.11% | -20% |
| -20% | -25.0% | -40% |
| -30% | -42.86% | -60% |
| -40% | -66.67% | -80% |
| -50% | -100% | -100% |
| -60% | -150% | -120% |
| -70% | -233.33% | -140% |
| -80% | -400% | -160% |
| -90% | -900% | -180% |
| -99% | -9900% | -198% |
### 做空合約
目的 : 給早期礦工避險用途
1. 假設初始保證金為 0.002 BTC
2. entry_price = 50000,做空 100U 的倉位 => 100 / 50000 => 此時做空 0.002 顆 BTC
3. 假設 current_price = 40000
* $\text{unrealized_PL} = 100 \times ({1 \over 40000} - {1 \over 50000}) = 0.0005$
* 此時的保證金 (含未實現損益) 為 0.0025 BTC
* BTC/USD 價格下跌 20%,對於該部位獲利 25%
4. 假設 current_price = 80000
* $\text{unrealized_PL} = 100 \times ({1 \over 80000} - {1 \over 50000}) = -0.00075$
* 此時的保證金 (含未實現損益) 為 0.00125 BTC
* BTC/USD 價格上漲 60%,對於該部位虧損 37.5%
```python!
# 開 100U 空倉在 50000 元
entry_price = 50000
exit_price = 40000
# PnL for coin
100 * (1 / exit_price - 1 / entry_price)
```
#### BTC 損益曲線
* 假設 entry_price = 50000,做空 100U 的倉位
* 本金為 0.002 顆 BTC,同部位價值 (初始做空 0.002 顆 BTC)
* 幣價跌 50%,本金獲利 100%
* 幣價漲 100%,本金虧損 50%
* 公式解 (y: 報酬率 ; x: 資產價格變動百分比)
* $y = {1 \over {1+x}} - 1$

```python!
x = range(10000, 101000, 1000)
y = [(100 * (1/i - 1/entry_price) / 0.002) * 100 for i in x] ## 幣的顆數損益 (%)
plt.plot(x,y)
plt.axvline(x=50000, color='r', linestyle='--', linewidth=2)
plt.axvline(x=25000, color='grey', linestyle='--', linewidth=2, alpha=0.5)
plt.title('BTC PNL (%) - Short BTC Inverse Contract')
plt.xlim(10000, 100000)
plt.xticks(list(range(10000, 110000, 10000)))
plt.ylim(-50, 400)
plt.yticks(list(range(-50, 450, 50)))
plt.show();
```
#### 若轉換成美元價值的損益曲線
* 以 BTC 本位做空一倍的 BTC,恰好為美元基礎下的中性部位

```python!
x = range(25000,101000,1000)
y = [(((0.002 * i) + (100 * (1/i - 1/entry_price) * i)) - 100) / 100 * 100 for i in x] ## 轉換成美元損益 (%)
plt.axvline(x=50000, color='r', linestyle='--', linewidth=2)
plt.plot(x,y)
plt.title('USDT PNL (%) - Short BTC Inverse Contract')
plt.xlim(25000, 100000)
plt.xticks(list(range(25000, 125000, 25000)))
plt.ylim(-100, 100)
plt.yticks(list(range(-100, 150, 50)))
plt.show();
```
#### 損益比較
* 以 0.002 顆 BTC 作為保證金,初始做空 0.002 顆 BTC 的部位價值
| 幣價 | 幣本位損益 | 美元本位損益 |
|:----:|:----------:|:------------:|
| 200% | -66.67% | 0% |
| 150% | -60% | 0% |
| 100% | -50% | 0% |
| 80% | -44.4% | 0% |
| 60% | -37.5% | 0% |
| 40% | -28.57% | 0% |
| 20% | -16.67% | 0% |
| 0% | 0% | 0% |
| -10% | 11.11% | 0% |
| -20% | 25% | 0% |
| -30% | 42.86% | 0% |
| -40% | 66.67% | 0% |
| -50% | 100% | 0% |
| -60% | 150% | 0% |
| -70% | 233.33% | 0% |
| -80% | 400% | 0% |
| -90% | 900% | 0% |
| -99% | 9900% | 0% |