# 使用FTX量化空間做無限網格
###### tags: `加密貨幣`
例如我們有一筆美元價值$1000的BTC
漲了0.5%變成$1005時,就賣掉$5的BTC
跌了0.5%變成$995時,就買入$5的BTC
也就是BTC價格上升時,BTC現貨數量就減少
而BTC價格下跌時,BTC現貨數量就增加
讓BTC的美元價值始終保持在$1000
而在低買高賣之下,USD就會愈來愈來多
> 更新: BTC漲到5萬以上後,$5的BTC會小於最小交易數0.0001顆,可以改成漲跌1%買賣$10,或用$2000的BTC,漲跌0.5%買賣$5
開一個子帳戶「btc-grid」
先存入美元價值$1000的BTC,以及準備用來購買的USD
價值$1000的BTC數 = 1000 / BTC現價
例如BTC現價41666,那就轉入1000/41666=0.024個BTC
要在BTC跌到20%前持續買進的話,就存200USD
如果沒有$1000的BTC,可以先用定投的方法買入
參考這篇: https://hackmd.io/@knuckles/SyY8clYmt
## 建立新策略 sell BTC
Import string:
```
{
"name": "sell BTC",
"condition": "balance(\"BTC\") > 0.0001",
"actions": [
{
"ioc": false,
"side": "sell",
"size": "5 / price(\"BTC/USD\")",
"type": "place",
"market": "BTC/USD",
"postOnly": false,
"orderType": "limit",
"limitPrice": "1005 / balance(\"BTC\")",
"reduceOnly": false,
"replaceExisting": true,
"cancelIfNoLongerTriggered": false
}
]
}
```
![](https://i.imgur.com/Ixj0Rsi.png)
條件設定 balance("BTC")>=0.0001
代表有BTC現貨至少有0.0001時才執行
設定掛單的數量與價格
![](https://i.imgur.com/0PbbRaC.png)
設定「下自定義訂單」「限價委託」「賣出」「BTC/USD」
訂單數量
例如想在BTC現貨的價值為$1005時,賣掉$5的BTC
此時 BTC數量 * BTC價格 = $1005
所以訂單數量設為 5 / price("BTC/USD")
價格為 1005 / balance("BTC")
訂單數量是要賣掉價值$1000的BTC的0.5%,也就是價值$5的BTC,所以寫成 5/price("BTC/USD"),也可以改成BTC數量的0.5%,寫成 0.005 * balance("BTC"),不過在BTC價格34000~50000間,算出來都會是0.0001xxx,實際交易只會用0.0001,小數點後第5位無條件捨去,如果想要小數點後第5位四捨五入的話,可以寫成 5/price("BTC/USD")+0.00005
> 注意如果BTC價格>50000時,訂單數量 (5/BTC價格)<0.0001,會小於最小下單金額而下單失敗,可以改成上下10%掛單(10/BTC價格),或是增加要維持的BTC美元價值,例如改成$2000
不勾選「Post Only」,避免價格超過訂單限價時就停住不再賣了
而是直接用市價賣掉直到BTC現貨價值低於$1005
不想用市價賣的話,也可以把限價改為 max(1005/balance("BTC"), offer_price("BTC/USD")),當現價超過0.5%時,就會改用賣單第一筆來掛
點「保存草稿」
## 建立新策略 buy BTC
Import string:
```
{
"name": "buy BTC",
"condition": "balance(\"USD\") > 10",
"actions": [
{
"ioc": false,
"side": "buy",
"size": "5 / price(\"BTC/USD\")",
"type": "place",
"market": "BTC/USD",
"postOnly": false,
"orderType": "limit",
"limitPrice": "995 / balance(\"BTC\")",
"reduceOnly": false,
"replaceExisting": true,
"cancelIfNoLongerTriggered": false
}
]
}
```
![](https://i.imgur.com/nJFL04l.png)
設定條件 balance("USD")>10
代表USD存量大於10才執行
然後設定掛單的數量與價格
![](https://i.imgur.com/CGmkCEb.png)
設定「下自定義訂單」「限價委託」「買入」「BTC/USD」
訂單數量設為 5 / price("BTC/USD")
價格為 995 / balance("BTC")
不勾選「Post Only」,避免價格低於訂單限價時就停住不再買了
而是直接用市價買直到BTC現貨價值高於$995
不想用市價買的話,也可以把限價改為 min(995/balance("BTC"), bid_price("BTC/USD")),當現價跌超過0.5%時,就會改用買單第一筆來掛
點「保存草稿」
## 啟用策略
準備好要開始時,分別選取兩個策略後點「啟用策略」
![](https://i.imgur.com/laxf0r8.png)
將兩個策略執行後就會看到在上下0.5%的價位掛好了買單跟賣單了
![](https://i.imgur.com/BU3dkod.png)
當現價碰到買單或賣單而成交後,BTC現貨數量改變,
就會依現貨價值的上下0.5%處重新掛買單和賣單
執行了約十個小時的結果:
![](https://i.imgur.com/lO4MoIU.png)
![](https://i.imgur.com/aG4frUo.png)
![](https://i.imgur.com/vCv1eZA.png)
BTC的美元價值還是$1000,但USD多了$12
如果一開始轉入的0.024個BTC只是放著的話,美元價值會從$1000變成 0.024 * 42076 = 1009.8,只多了$9.8,因為剛好遇到下跌又上漲的行情,所以無限網格會比純買幣多賺一點
放了一天半後,又來一次下跌又上漲
![](https://i.imgur.com/E4D1aMy.png)
![](https://i.imgur.com/ORtxwk4.png)
BTC的美元價值$1000,USD多了$39
一開始的0.024個BTC只是放著的話,現在是
0.024 * 43346 = 1040.3,多了$40
結果跟無限網格差不多,因為漲上去但振盪次數不夠多的話,網格不會比純買幣好
之後BTC直接漲破5萬後就停掉沒有用網格了
## 使用FTT做無限網格
另外開一個FTT無限網格,放$1000USD與$3000的FTT
設定漲0.67%,賣$20的FTT,跌0.67%,買$20的FTT
新增一個變數usd_value,設定為3000,代表要鎖定的FTT美元價值,之後可以再調整成想要的值
![](https://i.imgur.com/5uTizmJ.png)
### 設定策略 buy FTT
![](https://i.imgur.com/5EsvW6z.png)
條件 balance("USD")>20
![](https://i.imgur.com/jaUo8lG.png)
訂單數量
(get_variable("usd_value")*0.0067) / price("FTT/USD") + 0.05
限價
(get_variable("usd_value")*0.9933) / balance("FTT")
### 設定策略 sell FTT
![](https://i.imgur.com/19cHiAi.png)
條件 balance("FTT")>=0.1
![](https://i.imgur.com/EcLdjum.png)
訂單數量
(get_variable("usd_value")*0.0067) / price("FTT/USD") + 0.05
限價
(get_variable("usd_value")*1.0067)/ balance("FTT")
### 執行結果
放了10天的結果
![](https://i.imgur.com/qRFk8mJ.png)
![](https://i.imgur.com/SmmO7dw.png)
使用無限網格的話賺了$257+$11=$268,如果是現貨放著的話51.3~55.3漲了約8%,賺$3000*8%=$240
放12天跌到52.6,只漲2.5%
![](https://i.imgur.com/SFtM2Dy.png)
![](https://i.imgur.com/yAS2RIC.png)
用無限網格的話賺 $117+$7=$124
現貨放著的話賺 $3000*2.5%=$75
放到第22天漲到63塊,漲22.8%
![](https://i.imgur.com/Ffn0KMv.png)
![](https://i.imgur.com/jXxChNO.png)
用無限網格的話賺 $706-$10=$696 (原本放著的$1000轉走了)
現貨放著的話賺 $3000*22.8%=$684
### 將獲利複投 自動增加 usd_value
若是希望將賺到的USD再重覆投入FTT網格的話,可以設定將鎖定的FTT美元價值慢慢提高,例如現在USD有$706,那設定每小時看USD有超過$710的話,就把 usd_value 加10,這樣買入的策略下次就會多買一點,賣出策略會賣少一點
但小心這樣相當於在高位複投,如果又大跌會賠更多
新增一個策略 set usd_value
![](https://i.imgur.com/1QJFIoH.png)
### 執行結果
又經歷了一段起起伏伏後,目前價格64塊,漲24.75%
![](https://i.imgur.com/FoWv5ig.png)
usd_value被自動增加到3160
![](https://i.imgur.com/n9Nu5aP.png)
無限網格獲利 $616+$168 = $784
現貨放著的話 $3000*24.75% = $742
### 計算獲利
如果將部份幣轉走,或是補了更多USD進來,久了可能就搞不清楚獲利是多少了,所以再寫個策略來自動計算獲利
先新增兩個變數來記錄轉走的幣和補進來的USD
spot_trans
usd_deposit
沒有把幣轉走的話,spot_trans就設為0
一開始存的USD是1000的話,usd_deposit就填1000
如果有提走或補進來的話,再手動更改這個值
新增變數來記錄獲利的值
profit
然後新增策略 count_profit
![](https://i.imgur.com/zkgRMF7.png)
計算的方法為
balance("USD")-get_variable("usd_deposit")+ (balance("FTT")+get_variable("spot_trans"))*price("FTT/USD")-3000
其中 balance("USD")-get_variable("usd_deposit") 代表目前的USD餘額減掉一開始存的USD數量
(balance("FTT")+get_variable("spot_trans"))*price("FTT/USD")代表幣的數量乘以幣的單價,也就是目前FTT的美金價值
最後減掉一開始幣的美金價值,例如之前一開始放的FTT美金價值為3000