見出し画像

VIX + RCI 戦略(BitMEX)第一回

こんばんわ。マルゲリータに大興奮のブラックかふぇです。ここのピザはいつきても美味しい。赤ワイン+ピザ、悶絶ものです。
流行りのVIX に RCIを組み合わせた単純なBotを作ってみました。
Python3.6です。
Macで作っています。テストはCloud 9 => BitMEXです。

VIXやRCIの説明は他の方の説明が詳しいため、ここでは割愛いたします。
どーみさん VIX戦術がよくまとまっています。
私も参考にさせてもらいました。

ロジックとしては、 
価格が下落した際に、
VIXの買いサイン
かつ 
短期RCI線の買いサイン
でLONG(買い)をエントリー
短期RCI線が売りのサインになったら、ポジョンクローズ
という流れになります。ショートはその反対。

RCIの計算はこちら。

def ord(seq, idx, itv):
   p = seq[idx]
   o = 1
   for i in range(0,itv):
       if p < seq[i]:
           o = o + 1
           #print (seq[i])
   return o

def d(itv,src):
   sum = 0.0
   for i in range(0,itv):
       sum = sum + pow((i + 1) - ord(src, i, itv),2)
       #print (src[o])
       print(ord(src, i, itv))
   return sum

def rci(itv,src):
   rciM = (1.0 - 6.0 * d(itv,src) / (itv * (itv * itv - 1.0))) * 100.0
   print(d(itv,src))

   return rciM


VIXの計算は、GAMI先生のツイートを参考にさせてもらいました。GAMI先生コードの部分は、掲載許可の確認をしていないので(勝手に載せる訳にもいかず。)、自分が書いたコードのみ記載します。
=>ご許可いただきました。GAMI先生、快諾していただきありがとうざいます。

VIX緑点灯(恐怖)、赤点灯(狂喜)対応にしました。
状況に応じて売り買いサインを出す(この辺はまだまだ工夫しないとダメですね)

def vix(close,low):    
  global FLG
  global FLGR
#略(GAMI先生コード)
   #print('Vix')
   prd = 22
   bbl = 20
   mult = 2.0
   lb = 50
   ph = 0.85
   pl = 1.01
   hp = False
   sd = False
   wvf = (pd.rolling_max(close,prd,1)-low)/pd.rolling_max(close,prd,1)*100
    #wvfR = (pd.rolling_min(close,prd,1)-low)/pd.rolling_min(close,prd,1)*100
   sDev = mult * pd.rolling_std(wvf,bbl,1)
   midLine = pd.rolling_mean(wvf,bbl,1)
   lowerBand = midLine - sDev
   upperBand = midLine + sDev
   rangeHigh = pd.rolling_max(wvf,lb,1) * ph
   rangeLow = pd.rolling_min(wvf,lb,1) * pl

    if wvf[len(wvf)-1] >= rangeHigh[len(wvf)-1] or wvf[len(wvf)-1] >= upperBand[len(wvf)-1]:
       print('Vix=>Greeeen点灯')
       print('wvf',wvf[len(wvf)-1],'>',rangeHigh[len(wvf)-1],'or',upperBand[len(wvf)-1])
       FLG = 1
       return 'Greeeen'
   elif wvf[len(wvf)-1] <= rangeLow[len(wvf)-1] or wvf[len(wvf)-1] <= lowerBand[len(wvf)-1]:
       print('Vix=>RedChili点灯')
       print('wvf',wvf[len(wvf)-1],'<',rangeLow[len(wvf)-1],'or',lowerBand[len(wvf)-1])
       FLGR = 1
       return 'RedChili'
   else:
       if FLG == 1:
           print('Long Entry Greeeen==>Glay点灯')
           FLG = 0
           return 'buy'
       elif FLGR == 1:
           print('Short Entry RedChili==>Glay点灯')
           FLGR = 0
           return 'sell'    
       else:
           print('Vix=>Glay')
           print('wvf',wvf[len(wvf)-1],'HighBand',rangeHigh[len(wvf)-1],'or',upperBand[len(wvf)-1])
           print('wvf',wvf[len(wvf)-1],'LowBand',rangeLow[len(wvf)-1],'or',lowerBand[len(wvf)-1])

           return 'none'


オーダーエントリーはこんな感じで。

callback = vixfix(close,low)
RCIShort = rci(itvs,closeR)            
if callback == 'buy' and RCIShort == 'buy':
  entryPrice = bitmex.fetch_ticker('BTC/USD')['last'] - 1
  entry('buy', order_size,entryPrice)
  
elif callback == 'sell' and RCIShort == 'sell':
  entryPrice = bitmex.fetch_ticker('BTC/USD')['last'] + 1
  entry('sell', order_size,entryPrice)
  


絶賛稼働中です。豆腐メンタルな私には、あのタイミングで、オーダーを入れることはできないので、BOT様任せです。

うまく動いたらGAMIコンに応募しようかな。自作枠で。もう遅いか。。。

BTCアドレス 3BMEXWoSg5i9zegtEZ3QTEAUDeAV7rKXde