
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コンに応募しようかな。自作枠で。もう遅いか。。。
いいなと思ったら応援しよう!
