//@version=4 //©CryptoManiac //Credits to Checkmate from ReadySetCrypto study(title="BTC Onchain Indicator", shorttitle="BTC Onchain", overlay=true) showDiffRibbon = input(true, "Show Difficulty Ribbon") showTopAvgPrice = input(false, "Show Top & Avg Price") showMas = input(true, "Show MAs") showS2fPrice = input(false, "Show S2F Price") showMmPriceBands = input(false, "Show MM Price Bands") showVwapRibbon = false //input(false, "Show VWAP Ribbon") //Onchain data diff = security("QUANDL:BCHAIN/DIFF", "D", close) supplyCur = security("QUANDL:BCHAIN/TOTBC", "D", close) mktCap = security("QUANDL:BCHAIN/MKTCP", "D", close) etrvu = security("QUANDL:BCHAIN/ETRVU","D",close) etrav = security("QUANDL:BCHAIN/ETRAV","D",close) mkpru = security("QUANDL:BCHAIN/MKPRU","D",close) toutv = security("QUANDL:BCHAIN/TOUTV","D",close) //VWAP VWAP() => l_src = mkpru l_t = time("D") l_start = na(l_t[1]) or l_t > l_t[1] l_sumSrc = l_src * etrvu l_sumVol = etrvu l_sumSrc := l_start ? l_sumSrc : l_sumSrc + l_sumSrc[1] l_sumVol := l_start ? l_sumVol : l_sumVol + l_sumVol[1] l_vwapPs = l_sumSrc / l_sumVol l_vwapPs //Linear regression of difficulty issuedBTC = supplyCur - supplyCur[1] diffPrice = exp(-4.4)*pow(diff, 0.443) diffPriceDma9 = security(syminfo.tickerid, "D", sma(exp(-4.4)*pow(diff, 0.443), 9)) diffPriceDma14 = security(syminfo.tickerid, "D", sma(exp(-4.4)*pow(diff, 0.443), 14)) diffPriceDma25 = security(syminfo.tickerid, "D", sma(exp(-4.4)*pow(diff, 0.443), 25)) diffPriceDma40 = security(syminfo.tickerid, "D", sma(exp(-4.4)*pow(diff, 0.443), 40)) diffPriceDma60 = security(syminfo.tickerid, "D", sma(exp(-4.4)*pow(diff, 0.443), 60)) diffPriceDma90 = security(syminfo.tickerid, "D", sma(exp(-4.4)*pow(diff, 0.443), 90)) diffPriceDma128 = security(syminfo.tickerid, "D", sma(exp(-4.4)*pow(diff, 0.443), 128)) diffPriceDma200 = security(syminfo.tickerid, "D", sma(exp(-4.4)*pow(diff, 0.443), 200)) //Stock to flow price inflation = issuedBTC*365/supplyCur s2f = 1/inflation s2f90dma = security(syminfo.tickerid, "D", sma(s2f, 90)) s2fprice = exp(-1.84) * pow(s2f90dma, 3.36) //Average and Top Price tfFactor = 0.0 timeMeasStart = timestamp(2010, 08, 18, 0, 0, 0) if (timeframe.period == "D") tfFactor := 1 if (timeframe.period == "W") tfFactor := 7 if (timeframe.period == "2W") tfFactor := 14 if (timeframe.period == "2D") tfFactor := 2 if (timeframe.period == "3D") tfFactor := 3 if (timeframe.period == "M") tfFactor := 30 timeDiff = (time - timeMeasStart) / 1000 / 3600 / 24 / tfFactor var mktCapSum = 0.0 mktCapSum := mktCapSum + mktCap avgCap = mktCapSum / timeDiff avgPrice = avgCap/supplyCur topPrice = 35 * avgPrice //128 DMA and 200 DMA dma128 = security(syminfo.tickerid, "D", sma(close, 128)) dma200 = security(syminfo.tickerid, "D", sma(close, 200)) wma128 = security(syminfo.tickerid, "D", sma(close, 896)) wma200 = security(syminfo.tickerid, "D", sma(close, 1400)) //VWAP dayDiff = (time - timeMeasStart) / 1000 / 3600 / 24 var vwapSum = 0.0 vwapSum := vwapSum + VWAP() vwapAvg = vwapSum / timeDiff * 2.618 vwapDma14 = security(syminfo.tickerid, "D", sma(VWAP(), 14)) vwapDma30 = security(syminfo.tickerid, "D", sma(VWAP(), 30)) vwapDma60 = security(syminfo.tickerid, "D", sma(VWAP(), 60)) vwapDma90 = security(syminfo.tickerid, "D", sma(VWAP(), 90)) vwapDma128 = security(syminfo.tickerid, "D", sma(VWAP(), 128)) vwapDma200 = security(syminfo.tickerid, "D", sma(VWAP(), 200)) vwapDma365 = security(syminfo.tickerid, "D", sma(VWAP(), 365)) //Mayer Multiple dma = security(syminfo.tickerid, "D", sma(close, 200)) mkpruDma = security(syminfo.tickerid, "D", sma(mkpru, 200)) mayerMultiple = mkpru / dma //Plot var n = 0 n := n+1 plot(showMmPriceBands ? n % 5/tfFactor == 0 ? 0.6*dma : na : na, title="Generation Buy", color=color.lime, style=plot.style_linebr, linewidth=2) plot(showMmPriceBands ? n % 5/tfFactor == 0 ? 0.8*dma : na : na, title="Accumulation Buy", color=color.green, style=plot.style_linebr, linewidth=2) plot(showMmPriceBands ? n % 5/tfFactor == 0 ? dma : na : na, title="DMA 200", color=color.white, style=plot.style_linebr, linewidth=2) plot(showMmPriceBands ? n % 5/tfFactor == 0 ? 1.6*dma : na : na, title="Caution", color=color.yellow, style=plot.style_linebr, linewidth=2) plot(showMmPriceBands ? n % 5/tfFactor == 0 ? 2.4*dma : na : na, title="Local Top Sell", color=color.maroon, style=plot.style_linebr, linewidth=2) plot(showMmPriceBands ? n % 5/tfFactor == 0 ? 3.4*dma : na : na, title="Blow-Off Top Sell", color=color.red, style=plot.style_linebr, linewidth=2) plot(showTopAvgPrice ? n % 5/tfFactor == 0 ? topPrice : na : na, title="Top Price", color=color.aqua, style=plot.style_linebr, linewidth=2) plot(showTopAvgPrice ? n % 5/tfFactor == 0 ? avgPrice : na : na, title="Avg Price", color=color.aqua, style=plot.style_linebr, linewidth=2) plot(showS2fPrice ? s2fprice : na, color=color.lime, title="S2F Price", linewidth=2) plot(showDiffRibbon ? diffPrice : na, color=color.yellow, title="Diff Price", linewidth=1) plot(showMas ? dma128 : na, color=color.purple, title="DMA128", linewidth=2) plot(showMas ? dma200 : na, color=color.white, title="DMA200", linewidth=2) plot(showMas ? wma128 : na, color=color.aqua, title="WMA128", linewidth=2) plot(showMas ? wma200 : na, color=color.orange, title="WMA200", linewidth=2) plot(showDiffRibbon ? diffPriceDma9 : na, color=color.yellow, title="Diff Price DMA9", linewidth=1) plot(showDiffRibbon ? diffPriceDma14 : na, color=color.yellow, title="Diff Price DMA14", linewidth=1) plot(showDiffRibbon ? diffPriceDma25 : na, color=color.yellow, title="Diff Price DMA25", linewidth=1) plot(showDiffRibbon ? diffPriceDma40 : na, color=color.yellow, title="Diff Price DMA40", linewidth=1) plot(showDiffRibbon ? diffPriceDma60 : na, color=color.yellow, title="Diff Price DMA60", linewidth=1) plot(showDiffRibbon ? diffPriceDma90 : na, color=color.yellow, title="Diff Price DMA90", linewidth=1) plot(showDiffRibbon ? diffPriceDma128 : na, color=color.yellow, title="Diff Price DMA128", linewidth=1) plot(showDiffRibbon ? diffPriceDma200 : na, color=color.yellow, title="Diff Price DMA200", linewidth=1) plot(showVwapRibbon ? vwapAvg : na, color=color.teal, title="VWAP Avg", linewidth=1) plot(showVwapRibbon ? vwapDma14 : na, color=color.teal, title="VWAP DMA14", linewidth=1) plot(showVwapRibbon ? vwapDma30 : na, color=color.teal, title="VWAP DMA30", linewidth=1) plot(showVwapRibbon ? vwapDma60 : na, color=color.teal, title="VWAP DMA60", linewidth=1) plot(showVwapRibbon ? vwapDma90 : na, color=color.teal, title="VWAP DMA90", linewidth=1) plot(showVwapRibbon ? vwapDma128 : na, color=color.teal, title="VWAP DMA128", linewidth=1) plot(showVwapRibbon ? vwapDma200 : na, color=color.teal, title="VWAP DMA200", linewidth=1) plot(showVwapRibbon ? vwapDma365 : na, color=color.teal, title="VWAP DMA365", linewidth=1) //Alerts //DMA 128 alertcondition(crossover(close, dma128), title="DMA128 crossover", message='{"content": "DMA128 crossover: \\n {{exchange}}:{{ticker}}: price: {{close}}"}') alertcondition(crossunder(close, dma128), title="DMA128 crossunder", message='{"content": "DMA128 crossunder:\\n {{exchange}}:{{ticker}}: price: {{close}}"}') //DMA 200 alertcondition(crossover(close, dma200), title="DMA200 crossover", message='{"content": "DMA200 crossover: \\n {{exchange}}:{{ticker}}: price: {{close}}"}') alertcondition(crossunder(close, dma200), title="DMA200 crossunder", message='{"content": "DMA200 crossunder:\\n {{exchange}}:{{ticker}}: price: {{close}}"}') //DMA 128/200 cross alertcondition(crossover(dma128, dma200), title="DMA128/DMA200 crossover", message='{"content": "DMA128 crossed above DMA200:\\n {{exchange}}:{{ticker}}: price: {{close}}"}') alertcondition(crossunder(dma128, dma200), title="DMA128/DMA200 crossunder", message='{"content": "DMA128 crossed below DMA200:\\n {{exchange}}:{{ticker}}: price: {{close}}"}') //WMA 128 alertcondition(crossover(close, wma128), title="WMA128 crossover", message='{"content": "WMA128 crossover: \\n {{exchange}}:{{ticker}}: price: {{close}}"}') alertcondition(crossunder(close, wma128), title="WMA128 crossunder", message='{"content": "WMA128 crossunder:\\n {{exchange}}:{{ticker}}: price: {{close}}"}') //WMA 200 alertcondition(crossover(close, wma200), title="WMA200 crossover", message='{"content": "WMA200 crossover: \\n {{exchange}}:{{ticker}}: price: {{close}}"}') alertcondition(crossunder(close, wma200), title="WMA200 crossunder", message='{"content": "WMA200 crossunder:\\n {{exchange}}:{{ticker}}: price: {{close}}"}') //WMA 128/200 cross alertcondition(crossover(wma128, wma200), title="WMA128/WMA200 crossover", message='{"content": "WMA128 crossed above WMA200:\\n {{exchange}}:{{ticker}}: price: {{close}}"}') alertcondition(crossunder(wma128, wma200), title="WMA128/WMA200 crossunder", message='{"content": "WMA128 crossed below WMA200:\\n {{exchange}}:{{ticker}}: price: {{close}}"}')