# 幣本位合約 (反向合約) 以 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}}$ ![image](https://hackmd.io/_uploads/r1dM3je5C.png) ```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% ![image](https://hackmd.io/_uploads/SJ7BZhx9A.png) ```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$ ![image](https://hackmd.io/_uploads/Bk0kVTe50.png) ```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,恰好為美元基礎下的中性部位 ![image](https://hackmd.io/_uploads/B1vdYgb50.png) ```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% |