BitMEX資金調達率をTradingViewで表示させるためのソースコードを無料で公開

BitMEXから日本人が締め出されました。
そこで今日はBitMEXの資金調達率をTradingViewで表示させるためのソースコードを公開します。海外の方が無料で公開しているソースコードを私のほうで微修正したものです。
無料です。

資金調達率の表示

そもそも資金調達率って何?といった基本についての説明は省きます。まとめてくださっている人はたくさんいるので、資金調達率が何かわからない人は調べてみてください。

TradingViewでの表示はこんな感じです。
XBTUSD、ETHUSD、XRPUSDのそれぞれの資金調達率と予測率を表示します。

使い方

  1. TradingViewを開く
  2. 本記事の最後に載せているソースコードをコピーする
  3. TradingViewのpine script欄にソースコードをペーストしてチャート上に表示させる

これだけです。

デフォルトではXBTUSDの資金調達率が表示されるようになっています。

ETHUSDやXRPUSDの資金調達率を表示したいときは、⚙マークをクリックしてETHUSDやXRPUSDを選択してください。

私はXBTUSD、ETHUSD、XRPUSDのチャートと資金調達率を1画面で表示させ、俯瞰的に見られるようにして使っています。

このソースコードがあれば、
「資金調達率が〇〇になったときにロング/ショートしたらどうなるんだろう?」
といった検証はすぐに行えます。

またTradingViewにはチャートデータをエクスポートする機能があります。
資金調達率と予測率のCSVデータとOHLCVのデータを一緒にダウンロードできるので、簡単な相関分析程度であればExcel上で5分もかからずに行うことができます。

ソースコード

ソースコードです。

//@version=3
study("BitMEX_Funding", precision=4, max_bars_back=481)

contract = input("XBTUSD", title="Contract", options=[ "XBTUSD", "ETHUSD" ,"XRPUSD"])
capFunding = input(true, "Cap Funding")
useAlternateColorsWhenAccuracyReduced = input(true, title="Use Alternate Colors When Accuracy Reduced")

CONTRACT_XBTUSD = "XBTUSD"
CONTRACT_ETHUSD = "ETHUSD"
CONTRACT_XRPUSD = "XRPUSD"

clamp (lowest, highest, subject) => max(lowest, min(highest, subject))

minutesToBars (minutes) =>
    dailyMinutes = 1440
    weeklyMinutes = 10080
    monthlyMinutes = weeklyMinutes * 30
    resolutionBaseMinutes = ismonthly ? monthlyMinutes :
       isweekly ? weeklyMinutes :
       isdaily ? dailyMinutes :
       1
    barMinutes = interval * resolutionBaseMinutes
    minutes / barMinutes

total (src, length) =>
    result = 0.0
    for i = 0 to length - 1
        if (i < 0)
            result := na
            break
        result := result + src[i]
    result

simpleMovingAverage (src, length) => total(src, length) / length

barsSince (condition) =>
    bars = 0
    bars := condition ? 0 : bars[1] + 1

twap (resetWhen, src) =>
    bars = barsSince(resetWhen) + 1
    simpleMovingAverage(src, bars)

isBitmexFundingBar = ((hour == 4 or hour == 12 or hour == 20) and (minute == 0)) or isdwm

fundingTwap (src) => twap(isBitmexFundingBar, src)

bitmexInterestRateTwap (asset) =>

    interestBaseIndex = security("BITMEX:" + asset + "BON", period, close) // The Interest Rate for borrowing the Base currency
    interestQuoteIndex = security("BITMEX:USDBON", period, close) // The Interest Rate for borrowing the Quote currency
    fundingInterval = 3 // (Since funding occurs every 8 hours)
    interestRate = nz((interestQuoteIndex - interestBaseIndex) / fundingInterval, 0.0001)
    fundingTwap(interestRate)

bitmexPremiumIndexTwap (asset) =>
    premiumIndexTwap_fallback = security("BITMEX:" + asset + "USDPI", period, fundingTwap(ohlc4))
    premiumIndexTwap = security("BITMEX:" + asset + "USDPI", "1", fundingTwap(ohlc4))
    [ premiumIndexTwap, premiumIndexTwap_fallback ]
    
bitmexPredictedFundingRate (asset, capFunding, fundingCapAmount, dampenerAmount, interestRateTwap, premiumIndexTwap) =>
    predictedBaseFundingRateRatio = premiumIndexTwap + clamp(-dampenerAmount, dampenerAmount, interestRateTwap - premiumIndexTwap)
    predictedFundingRateRatio = capFunding ? clamp(-fundingCapAmount, fundingCapAmount, predictedBaseFundingRateRatio) : predictedBaseFundingRateRatio
    predictedFundingRateRatio * 100
    
bitmexNextFundingRate (predictedFundingRate) =>
    nextFundingRate = 0.01
    nextFundingRate := isBitmexFundingBar ? predictedFundingRate[1] : nextFundingRate[1]

bitmexFundingBarValue (assetTicker, predictedFundingRate) =>
    fundingPeriodMinutes = 480
    fundingPeriodBars = max(1, floor(minutesToBars(fundingPeriodMinutes)))
    fundingOffset = fundingPeriodBars + 1
    
    dwmIntervalModifier = isdaily ? 3 :
       isweekly ? 3 * 7 :
       ismonthly ? 3 * 30 :
       na
    dwmModifier = interval * dwmIntervalModifier
    
    intradayFundingBarValue = predictedFundingRate[fundingOffset]
    nonIntradayFundingBarValue = security(assetTicker, "240", intradayFundingBarValue) * dwmModifier
    (not isBitmexFundingBar) ? na : (isintraday ? intradayFundingBarValue : nonIntradayFundingBarValue)

asset = contract == CONTRACT_XBTUSD ? "XBT" :
   contract == CONTRACT_ETHUSD ? "ETH" : 
   contract == CONTRACT_XRPUSD ? "XRP" :
   "XBT"
   
assetTicker = asset + "USD"

[ premiumIndexTwap_ideal, premiumIndexTwap_fallback ] = bitmexPremiumIndexTwap(asset)
premiumIndexTwap = na(premiumIndexTwap_ideal) ? premiumIndexTwap_fallback : premiumIndexTwap_ideal
interestRateTwap = bitmexInterestRateTwap(asset)

predictedFundingRate = bitmexPredictedFundingRate(asset, capFunding,  0.00375, 0.0005, interestRateTwap, premiumIndexTwap)
nextFundingRate = bitmexNextFundingRate(predictedFundingRate)
fundingBarValue = bitmexFundingBarValue(assetTicker, predictedFundingRate)
accuracyReduced = na(premiumIndexTwap_ideal)

longsColor = green
shortsColor = red
longsAlternateColor = green
shortsAlternateColor = red
useAlternateColors = useAlternateColorsWhenAccuracyReduced and accuracyReduced

FundingColor (rate) => rate < 0 ? (useAlternateColors ? shortsAlternateColor : shortsColor) : (useAlternateColors ? longsAlternateColor : longsColor)

nextFundingColor = FundingColor(nextFundingRate)
fundingBarColor = FundingColor(fundingBarValue)

plot(predictedFundingRate, title="Predicted Funding Rate", style=line, linewidth=2, color=white, transp=70)
plot(nextFundingRate, title="Next Funding Rate", style=circles, linewidth=1, color=nextFundingColor, transp=0)
plot(fundingBarValue, title="Funding Bar", style=area, linewidth=4, color=fundingBarColor, transp=0)//plotshape(interestRateTwap * 100, location=location.top, color=#104677, transp=100)

hline(0, title="Zero Line", linestyle=dotted, color=red)

丸々コピペして使用してください。
ソースコードを読むことは資金調達率の計算方法の理解を深めるためにも有効です。
BitMEXに限らず資金調達率の仕組みを採用している仮想通貨取引所は多くあるので参考になると思います。
ぜひ読んでみてください。

BBBでした。

シェアしていただけると嬉しいです!

 

【お知らせ】

仮想通貨を自動売買するための仕組み「はむとれ」を無料で配布しています。

● 誰でもカンタンに
● 24時間365日
● オープンソースで無料

を特徴にした仮想通貨の自動売買を行える仕組みです。
どのような売買を行うのかの売買ルールや売買戦略は自分で考えてセットします。

自分の考えるトレードを自動化させるための手段として活用してみてください。永年無料で使用できます。

>無料で使用してみる<

また他の人が作成した売買戦略を活用・参考にしたい場合は、有料コミュニティに参加することで300種類以上の売買戦略が活用できるようになります。