首页 > 解决方案 > Tradingview Pine 脚本 - 如何让自定义交易量指标表现得像内置的 Vol

问题描述

我制作了一个自定义音量指示器,但是当应用于图表时,它不会像内置的那样自动缩放,不会自动粘在图表面板的底部,也不能没有自己明确的额外比例旁边。

有没有办法让它做所有这些事情?

我在原始指标代码中也没有发现任何帮助。例如,当我尝试应用 format.volume 时,它​​根本拒绝编译。

下面是我的代码,原代码在下面:

//This inddicator will show volume inversely. So if you are looking at an Altcoin, it will show volume in BTC, if you are looking at for example BTC/USD it will show volume in USD and so on. Works with all altcoins and fiat pairs.
//I find this most useful when shopping for alts to quickly get an idea of their liquidity.

//title the indicator and dont use decimals. (Otherwise when viewing fiat volume you get unreadably large numbers) you can change this in the settings dialog tho if you want.
study("Vol in Base asset 20MA", precision=0)

//Make the moving average user configurable
showMA = input(true)

//Get volume for current bar and multiply with vwap
vInverse = volume * vwap

//Plot fiat volume.
plot(vInverse, color = orange, title="VolumeBTC", style=columns, transp=65)

//Plot 20 candle moving average (changable in settings)
plot(showMA ? sma(vInverse,20) : na, color = white, title="Volume MA", style=area, transp=65)

原始代码:

//@version=4
study(title="Volume", shorttitle="Vol", format=format.volume)
showMA = input(true)
barColorsOnPrevClose = input(title="Color bars based on previous close", type=input.bool, defval=false)

palette = barColorsOnPrevClose ? close[1] > close ? color.red : color.green : open > close ? color.red : color.green

plot(volume, color = palette, style=plot.style_columns, title="Volume", transp=65)
plot(showMA ? sma(volume,20) : na, style=plot.style_area, color=color.blue, title="Volume MA", transp=65)

标签: pine-script

解决方案


对您的问题的简短回答是否定的,目前不可能做您想做的一切。要完成内置的独立卷,我们需要两件我们没有的东西:

  1. 在图表上显示哪些条形的松树可见性(因此我们可以动态缩放体积列的高度)。
  2. 一种在图表底部锚定独立的方法,同时仍允许指标的比例自动缩放。

这段代码也使用了 Michel 的scale.none想法,但它在顶部添加了一个不可见的图,允许您确定垂直空间中列的最大高度,而无需缩放列本身的值,因此您仍然可以获得正确的读数。使用“*设置/输入”,您可以:

  • 指定您希望最高列占据的垂直空间的最大百分比。
  • 指定如何确定用于缩放列的最大过去值,即使用:
    • 历史最高点,或
    • 最后n条中的最高列(这是n=400的默认值)。第二种方法可以更好地适应最近的图表环境。

在此处输入图像描述

//This indicator will show volume inversely. So if you are looking at an Altcoin, it will show volume in BTC, if you are looking at for example BTC/USD it will show volume in USD and so on. Works with all altcoins and fiat pairs.
//I find this most useful when shopping for alts to quickly get an idea of their liquidity.

//title the indicator and dont use decimals. (Otherwise when viewing fiat volume you get unreadably large numbers) you can change this in the settings dialog tho if you want.
//@version=4
study("Vol in Base asset 20MA", "", true, format.volume, 0, scale.none)

//Make the moving average user configurable
HIM1 = "1. Historical High"
HIM2 = "2. Highest in last..."
showMA = input(true)
scaleFactor = 100 / input(30, "% of vertical space used", step = 10, maxval = 100)
hiMethod = input(HIM2, "High point method", options = [HIM1, HIM2])
hiMethod2Len = input(400, "  2. Length", minval = 2, step = 100)

//Get volume for current bar and multiply with vwap
vInverse = volume * vwap

//Plot fiat volume.
plot(vInverse, color = color.orange, title="VolumeBTC", style=plot.style_columns, transp=0) //Originally: transp=65

//Plot 20 candle moving average (changable in settings)
plot(showMA ? sma(vInverse,20) : na, color = color.white, title="Volume MA", style=plot.style_area, transp=65)

//Plot high line to scale down the columns.
var histHi = 0.
histHi := max(histHi, nz(vInverse, histHi))
limit = hiMethod == HIM1 ? histHi : highest(vInverse, hiMethod2Len)
plot(limit * scaleFactor, "Historical High", #00000000)

这将给出如下内容: 在此处输入图像描述

有 2 种方法可以将列的底部置于图表底部,但没有一种方法是理想的:

  1. 使用图表的Settings/Appearance/Bottom margin将图表的下边距设置为 0% ,但随后图表栏继续与列重叠。
  2. 通过向上/向下拖动其比例(红色箭头)来稍微压缩独立的比例。然后抓住图表上的列(绿色箭头)并将它们拉下来,但这会冻结独立的规模,因此当您更改符号并且音量增加/减少时它不会调整大小。

在此处输入图像描述

TV 已将指标与垂直空间底部对齐的能力确定为潜在的改进——但目前还没有 ETA。


推荐阅读