遲到的分享,2014年每天收益5%的高頻機器人公開

遲到的分享,2014年每天收益5%的高頻機器人公開

  • 策略的介紹

    策略分享地址:
    https://www.botvs.com/strategy/1088
    這個策略是我做虛擬貨幣以來的主要策略,後面經過不斷完善和修改,複雜了很多,但主要思想並沒有改變,分享的這個版本是無明顯bug的 最初版本,最爲簡單清晰,沒有倉位管理,每次交易都是滿倉,沒有卡死後重啓等等,但也足夠說明問題。
    策略從2014年8月運行,直到今年年初交易所收手續費。期間運行的還算很好,虧損的時間很少。資金從最初的200元跑到了80比特幣。具體的過程可以看小草的新浪博客裏虛擬貨幣自動化交易之路系列文章。
    下圖是我具體統計的OKcoin平臺的收益曲線,初始資金1000元,可以看到初始錢穩定增加,中間的直線是我策略停止了,後期由於把策略全改爲賺幣策略,以人民幣計價的收益波動劇烈,具體的過程在策略交易兩年總結的文章裏有描述。

    圖1

    下圖是總資產摺合幣的曲線:

    圖2

  • 爲什麼分享這個策略

    • 1.交易所收取手續費後,幾乎殺死了所有的高頻策略,我的也不例外。但策略改改也許還能用,大家可以研究一下。
    • 2.好久沒有分享東西了,這篇文章早就想寫了。
    • 3.和大家共同交流學習。
  • 策略的原理

    這個策略原理極爲簡單,可以理解爲準高頻的做市策略,各位看了之後可能想打人,這都能賺錢,當時幾乎誰都能寫出來。我開始也沒預料到它能這麼有效,可見心中有想法要趕緊付出實踐,說不一定有意外之喜。在比特幣機器人初興的2014年,寫出賺錢的策略太容易了。
    和所有的高頻策略一樣,本策略也是基於orderbook,下圖就是一個典型的比特幣交易所的訂單分佈,

    圖3

      可以看到左側是買單,顯示了不同價格的掛單數量,右側是賣單。可以想象如果一個人要買入比特幣,如果不想掛單等待的話,只能選擇吃單,如果他的單子比較多,會使得賣單掛單大量成交,對價格造成衝擊,但是這種衝擊一般不會一直持續,還有人想吃單賣出,價格在極短時間很可能還會恢復,反過來理解有人要賣幣也類似。
    以圖中的掛單爲例,如果要直接買入5個幣,那麼價格會達到10377,在這時如果有人要直接賣出5個幣,價格會達到10348,這個空間就是利潤空間.策略會在稍低於10377的價格掛單,如10376.99,同時會以稍高於10348的價格買入,如10348.01,這是如果剛纔的情況發生了,顯然就會賺到其中的差價。雖然不會每次都如此完美,但在概率的作用下,賺錢的機率實際高得驚人。
    以現在策略的參數講解一下具體操作,這個參數當然無法使用了,僅作一個說明。它會向上尋找累計賣掛單量爲8個幣的價格,這裏是10377,那麼此時的賣價就是這個價格減去0.01(減去多少可以是隨機的),同理向下尋找累計買掛單爲8個幣,這裏是10348,那麼此時的賣價就是10348.01,此時買賣價的差價是10376.99-10348.01=28.98,大於策略預設的差價1.5,就以這兩個價格掛單等待成交,如果價差小於1.5,也會找一個價格進行掛單,如盤口價格加減10,等待撿漏(更合適的應該是繼續往下找跟多的深度)。
    另外注意到這個策略只和當前的深度掛單有關,並不關心歷史行情和自己的歷史成交,策略也沒有單筆虧損的概念,其實單次的勝率很高。

  • 進一步的說明

    • 沒有錢或幣了怎麼辦?
      這種情況在我的錢較少是十分普遍,大多數時候只掛一邊的單子,但不是大問題。其實可以加入幣錢平衡的邏輯,但在平衡的過程難免產生損失,畢竟每一次的成交都是概率的垂青,我選擇保持單邊等待成交,當然這樣也浪費了另一邊的成交機會。
    • 倉位是如何管理的?
      剛開始都是滿倉買入賣出,後來根據不同的參數分爲不同的組,不會一次完全成交。
      沒有止損嗎?
      策略有完整的買賣掛單的邏輯,我認爲不需要止損(可以討論),還有就是概率的垂青,成交就是機會,止損可惜了。
    • 如何調整爲賺幣的策略?
      此時的參數是對稱的,即向上8個幣的累計賣單,向下8個幣的累計買單,稍微不平衡一下,比如向上改爲15個幣的累計賣單,使得賣幣機會更難得,有更大的機率會以更低的價格接回來,這樣就會賺幣,反過來就賺錢。實際上前期策略如此有效,幣和錢都是增加的。
    • 如何處理浮虧?
      單筆的交易當然會出現虧損,如賣出後幣價上漲,買入後幣價下跌,這樣的浮虧是不需要處理的,因爲交易很頻繁,每天來爲幾千次都是正常的,浮虧是正常的,只要盈利的概率更大即可。
    • 如何防止黑天鵝?
      比特幣的黑天鵝時間很多,有時候就是一路下跌,一點賣出的機會都沒有,這種情況也不用太擔心,因爲黑天鵝時間往往會帶來高的波動性,策略賺的正是這部分的錢,虧損也能很快賺回來。
  • 代碼講解

    完整的代碼可以見我在www.botvs.com得策略分享,這裏只講解核心邏輯函數。在沒有改動的情況下,在botvs自帶的模擬盤竟然運轉完全正常,這是一個3年多前的策略,平臺還支持到現在,太讓人感動了。
    首先是獲取買賣價函數GetPrice(),需要獲取訂單深度信息,注意不同平臺的訂單深度信息長度不同,以及即使遍歷了所有訂單仍然沒有所需要的量的情況(在後期許多0.01的網格掛單會導致這種情況),調用是GetPrice(‘Buy’)就是獲取買價。

    function GetPrice(Type) {
      //_C()是平臺的容錯函數
      var depth=_C(exchange.GetDepth);
      var amountBids=0;
      var amountAsks=0;
      //計算買價,獲取累計深度達到預設的價格
      if(Type=="Buy"){
          for(var i=0;i<20;i++){
              amountBids+=depth.Bids[i].Amount;
              //參數floatamountbuy是預設的累計深度
              if (amountBids>floatamountbuy){
                  //稍微加0.01,使得訂單排在前面
                  return depth.Bids[i].Price+0.01;}
          }
      }   
      //同理計算賣價
      if(Type=="Sell"){
          for(var j=0; j<20; j++){
              amountAsks+=depth.Asks[j].Amount;
              if (amountAsks>floatamountsell){
                  return depth.Asks[j].Price-0.01;}
              }
          }
      //遍歷了全部深度仍未滿足需求,就返回一個價格,以免出現bug
      return depth.Asks[0].Price
    }

    每個循環的主函數onTick(),這裏定的循環時間3.5s,每次循環都會把原來的單子撤銷,重新掛單,越簡單越不會遇到bug.

    function onTick() {
      var buyPrice = GetPrice("Buy");
      var sellPrice= GetPrice("Sell");
      //diffprice是預設差價,買賣價差如果小於預設差價,就會掛一個相對更深的價格
      if ((sellPrice - buyPrice) <= diffprice){
              buyPrice-=10;
              sellPrice+=10;}
      //把原有的單子全部撤銷,實際上經常出現新的價格和已掛單價格相同的情況,此時不需要撤銷
      CancelPendingOrders() 
      //獲取賬戶信息,確定目前賬戶存在多少錢和多少幣
      var account=_C(exchange.GetAccount);
      //可買的比特幣量,_N()是平臺的精度函數
      var amountBuy = _N((account.Balance / buyPrice-0.1),2); 
      //可賣的比特幣量,注意到沒有倉位的限制,有多少就買賣多少,因爲我當時的錢很少
      var amountSell = _N((account.Stocks),2); 
      if (amountSell > 0.02) {
          exchange.Sell(sellPrice,amountSell);}
      if (amountBuy > 0.02) {
          exchange.Buy(buyPrice, amountBuy);}
      //休眠,進入下一輪循環
      Sleep(sleeptime);
    }
  • 尾巴

    整個程序也就40多行,看上去十分簡單,但當時也花了我一個多星期,這還是在botvs平臺上情況下。最大的優勢還是起步早,在2014年,市場上以搬磚爲主,網格和搶盤口的高頻也不多,使得策略如魚得水,後來競爭不可避免越來越激烈,我的錢也越來越多,面臨的挑戰很多,每隔一段時間都要進行較大的改動來應對,但總體還算順利。在交易平臺不收取手續費的情況下,是程序化交易的天堂,散戶因爲不收手續費跟傾向於操作,爲高頻和套利提供了空間,這一切也基本隨着動輒0.1-0.2%的雙向手續費終結了,不僅是自己被收費的問題,而是整個市場活躍度下降。
    但不需要高頻的量化策略任然有很大的空間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章