CC高頻策略經驗分享


https://zhuanlan.zhihu.com/p/321315337

我的經歷:

大概兩天時間寫好了策略,經過1天的調整,23號在幣安永續合約正式開始運行。收益率排名如下。由於統計有問題,實際上的排名應該更高。

 

一點經驗:

並不是所有的市場和時間都適合高頻策略,要運行高頻機器人的條件很苛刻。下面是幾點條件。

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。服務器在東京,可以獲得更低的延時。語言使用JavaScript,實際上高頻策略競爭也沒到很激烈的程度,Js的V8引擎性能強大,對於新手也更友好,並不需要C++。

//設置交易對與杠桿 var pair = Symbol+'USDT' exchange.SetCurrency(Symbol+'_USDT') exchange.SetContractType("swap") exchange.IO("api", "POST", "/fapi/v1/leverage", "symbol="+pair+"&leverage="+5+"&timestamp="+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&timestamp="+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) } } 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM