最近兩個月,一個print(money)的賬戶非常火,在幣安永續合約上賺了幾百倍收益,各個群里經常能看到他的賬戶收益截圖。基本不回撤的盈利曲線讓不少人眼紅,也讓一些人懷疑真實性。但我在10月23日-27日5天的經歷驗證了高頻策略在高波動市場是完全可以賺到這樣變態的收益率。
我的經歷:
大概兩天時間寫好了策略,經過1天的調整,23號在幣安永續合約正式開始運行。從充值的100USDT開始,27號賺到8800USDT,收益率是80多倍,期間幾乎沒有回撤。總收益率達到了幣安歷史收益排行榜的第15位,10月收益第2位。由於幣安的統計有問題,實際上的排名應該更高。
一點經驗:
並不是所有的市場和時間都適合高頻策略,要運行高頻機器人的條件很苛刻。下面是幾點條件。
1.適合高頻的市場
這5天只在幣安交易FIL永續合約,FIL剛上線市場十分混亂,永續價格和現貨的差價一度到了30%以上,導致多空在FIL分歧十分嚴重,16號開盤價從60一路跌到26開始反彈,又一度跌倒19反彈到37。交易額高的幾天排名所有交易對第三,僅次於老牌的BTC和ETH,這是高頻交易的黃金機會。遺憾的是我沒有第一時間准備好機器人,錯過了開始的幾天,但還好趕上24-25號的行情,大部分收益來自於此時間段。27號過后,差價逐漸減小,頂格的資金費率也沒有了,成交量萎縮,策略賺錢難度變大。
類似的機會還有SUSHI/YFI/YFII/UNI上線之初的一段時間,波動性和交易量都很大,print(money)也是抓住了這些機會。在這些幣無法繼續賺錢的時候,FIL又出現了。這兩波一次是炒的火熱的DEFI概念,一個是備受矚目的FIL,在現在的情況下,下一次的機會也需要等很久。
2.交易費率
高頻策略對手續費十分敏感,幣安maker返十萬分之2的門檻並不高,雖然返費很少,但是可以理解為免手續費,一批在古老的現貨無手續費時代的高頻策略得以復活。當然在行情波動劇烈時,手續費相對沒有那么重要。
3.頻率高
高頻機器人最有名的特點就是頻率極高,在行情變化快時,我的策略很多都是在100ms內完成開平倉。
4.策略的勝率
高頻策略需要對行情的短期趨勢做出准確的判斷,並且在勝率越高下單量越大,短時間交易量越大下單量越大。FIL由於交易量很大,交易頻繁,所以幾秒內的趨勢預測准確率很高。同樣多空博弈劇烈,給了maker建立相應倉位和平倉的機會。這一點和早期的現貨高頻不同,現在maker有返佣,但taker還是有很高的手續費,因此只能掛單。想象一下,如果所有人都短時間看多,高頻策略由於吃單手續費,maker買單無法成交,也就無法獲利,而如果市場完全沒有的趨勢,maker訂單能成交但獲利的概率不高。所以當前的高頻策略即要求市場有大趨勢保證高勝率,又要有局部的多空分歧保證能大量成交。
行情順利時,我的策略的勝率在80%以上,盈虧比大於1,當市場沒有明顯趨勢,長期勝率也在65%以上,盈虧比低於1 。
5.高頻策略的容量
高頻策略的容量顯然是不高的,由於永續的高杠桿,100u也能操作2000u以上的資金,所以高頻策略能以很小的資金起步。但整體的獲利凈額並不會太大。具體的容量要看市場上的成交量。
6.策略的風險
有開倉就有風險,但高頻的優勢在於交易次數很高,一次虧損還可以迅速的再交易10次把虧損補回來,拉長周期看回撤很小。持倉越大風險越大,所以不能無限制的增加持倉,要有一定的負反饋機制,倉位多了就增加平倉減少開倉,保證有持倉的時間短。有持倉是如果正好逆勢,會有很大的虧損,所以策略設計了對方向的判斷,保證了大暴漲或大暴跌時站在趨勢的一側開倉,進一步價降低了風險,代價是短期趨勢不明朗會頻繁虧小錢。
關於我的策略
策略原理:
獲取最近成交trades、深度depth和當前倉位,根據trades判斷趨勢,根據成交量決定開倉大小,判斷趨勢為上漲就掛單開多,同時平多頭,如果此時持有空頭倉位就先全部平掉。判斷趨勢下跌操作同理。
高頻策略的思想都是很一致的,我本次的策略吸取了我以前公開的2014年的高頻策略以及OKCoin韭菜收割機策略的思路。這兩個策略在FMZ都能找到源碼,如果把這兩個策略都吃的很透,高頻交易將對你沒有秘密。
策略架構:
策略使用異步架構(參考FMZ社區進階教程),這里沒有源碼只是簡單用到函數的說明,並不是可運行的完整的代碼,也沒有涉及到核心邏輯。API全部使用REST協議,並沒有用websocket。服務器在東京,可以獲得更低的延時。
//設置交易對與杠桿
var pair = Symbol+'USDT'
exchange.SetCurrency(Symbol+'_USDT')
exchange.SetContractType("swap")
exchange.IO("api", "POST", "/fapi/v1/leverage", "symbol="+pair+"&leverage="+5+"×tamp="+Date.now())
//基本的交易精度限制
var price_precision = null
var tick_size = null
var amount_precision = null
var min_qty = null
var exchange_info = JSON.parse(HttpQuery('https://fapi.binance.com/fapi/v1/exchangeInfo'))
for (var i=0; i<exchange_info.symbols.length; i++){
if(exchange_info.symbols[i].baseAsset == Symbol){
tick_size = parseFloat(exchange_info.symbols[i].filters[0].tickSize)
price_precision = exchange_info.symbols[i].filters[0].tickSize.length > 2 ? exchange_info.symbols[i].filters[0].tickSize.length-2 : 0
amount_precision = exchange_info.symbols[i].filters[1].stepSize.length > 2 ? exchange_info.symbols[i].filters[1].stepSize.length-2 : 0
min_qty = parseFloat(exchange_info.symbols[i].filters[1].minQty)
}
}
function updatePosition(){//獲取持倉,Symbol為交易對,加入交易對參數而不是返回全幣種可以減少一次API占用
position = exchange.IO("api", "GET","/fapi/v2/positionRisk","timestamp="+Date.now()+"&symbol="+Symbol+"USDT")
}
function updateTrades(){//獲取最近成交
trades = exchange.IO("api", "GET","/fapi/v1/trades","limit=200×tamp="+Date.now()+"&symbol="+Symbol+"USDT")
}
function updateDepth(){//獲取深度
depth = exchange.IO("IO", "api", "GET","/fapi/v1/depth","timestamp="+Date.now()+"&symbol="+Symbol+"USDT")
}
function onTick(){
updateDepth()
updateTrades()
updatePosition()
makeOrder() //計算下單價格、數量並下單
updateStatus() //更新狀態信息
}
//主循環,休眠時間100ms,策略的循環延時通常在在30ms以內。
function main() {
while(true){
if(Date.now() - update_loop_time > 100){
onTick()
update_loop_time = Date.now()
}
Sleep(1)
}
}
這個策略對市場要求太苛刻,大部分時間不賺錢,並且容量也不大。如果大家積極在微博微信群朋友圈等平台轉發傳播這篇文章,閱讀量達到10萬以上,我會考慮以租用的方式讓大家實際運行感受一下,甚至未來在這篇文章里公開策略源碼。加FMZ首頁微信回復幣安可拉FMZ幣安微信群交流。