BitMEXから日本人が締め出されました。
そこで今日はBitMEXの資金調達率をTradingViewで表示させるためのソースコードを公開します。海外の方が無料で公開しているソースコードを私のほうで微修正したものです。
無料です。
資金調達率の表示
そもそも資金調達率って何?といった基本についての説明は省きます。まとめてくださっている人はたくさんいるので、資金調達率が何かわからない人は調べてみてください。
TradingViewでの表示はこんな感じです。
XBTUSD、ETHUSD、XRPUSDのそれぞれの資金調達率と予測率を表示します。
使い方
- TradingViewを開く
- 本記事の最後に載せているソースコードをコピーする
- 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でした。