Преобразование Float в значения Int Pine-скрипт - PullRequest
1 голос
/ 20 апреля 2020

Здравствуйте, я пытаюсь включить этот тип скользящей средней (elasti c объемная скользящая средняя)


evwma = 0.0
evwma := ((volumeSum - volume) * nz(evwma[1]) + volume * src) / volumeSum

в мой индикатор (VWGSV), где верхний форум должен заменить функцию vwma


//@version=4
study(shorttitle="VWGSV", title="Greatest swing value",overlay=true)
src = input(open)
lenght = input(4, minval=1 ,title="lenght")
multi = input (1.8,title="multiplier")
hx= if src>close[1]
    close[1]
else
    src
lx= if src<close[1]
    close[1]
else
    src
hg= (high-hx)
lg= (lx-low)

bgsv = (vwma(hg,lenght))*multi+hx
sgsv= lx-(vwma(lg,lenght))*multi
plot(bgsv,offset=1, color=color.green)
plot(sgsv,offset=1, color=color.red)

то, что я пробовал, выглядит примерно так (извините, нет опыта кодирования вообще ...)

//@version=4
study(shorttitle="VWGSV", title="Greatest swing value",overlay=true)
src = input(open)
lenght = input(4, minval=1 ,title="lenght")
multi = input (1.8,title="multiplier")
volumeSum = sum(volume, lenght)
hx= if src>close[1]
   close[1]
else
   src
lx= if src<close[1]
   close[1]
else
   src
hg= (high-hx)
lg= (lx-low)
hevwma = 0.0
levwma = 0.0
hevwma := ((volumeSum - volume) * nz(hevwma[1]) + volume * hx) / volumeSum
levwma := ((volumeSum - volume) * nz(levwma[1]) + volume * lx) / volumeSum
bgsv = hevwma*multi+hx
sgsv= lx-levwma*multi
plot(series=bgsv,offset=1, color=color.green)
plot(series=sgsv,offset=1, color=color.red) 

это то, что я пытался

hevwma = 0.0
levwma = 0.0
hevwma := ((volumeSum - volume) * nz(hevwma[1]) + volume * hx) / volumeSum
levwma := ((volumeSum - volume) * nz(levwma[1]) + volume * lx) / volumeSum
bgsv = round(hevwma)*multi+hx
sgsv= lx-round(levwma)*multi

что я получаю

Как это должно выглядеть

Я думаю, потому что формула, которую я пытаюсь интегрировать, дает мне значение с плавающей точкой, но мне нужно, чтобы оно было целое число, и я попытался преобразовать его в целое как-то, но безуспешно. Пожалуйста, помогите мне, мне нужно как-то получить результат, как на картинке

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

используется круглая функция и все хорошо

//@version=4
study(shorttitle="EVWGSV", title="Greatest swing value elastic volume weighted version by BackPackRack",overlay=true)
src = input(open)
lenght = input(4, minval=1 ,title="lenght")
multi = input (1.8,title="multiplier")
volumeSum = sum(volume, lenght)
hx= src>close[1] ? close[1] : src
lx= src<close[1] ? close[1] : src
hg= (high-hx)
lg= (lx-low)
hevwma = 0.0
levwma = 0.0
hevwma := ((volumeSum - volume) * nz(hevwma[1]) + volume * hg) / volumeSum
levwma := ((volumeSum - volume) * nz(levwma[1]) + volume * lg) / volumeSum
rhevwma=round(hevwma)
rlevwma=round(levwma)
mrlevwma=rhevwma*multi
mrhevwma=rlevwma*multi
bgsv = mrhevwma+hx
sgsv= lx-mrlevwma
plot(bgsv,offset=1, color=color.green)
plot(sgsv,offset=1, color=color.red)
0 голосов
/ 20 апреля 2020

Я не уверен, что понимаю ваш вопрос, поскольку целые числа в определении не имеют десятичных дробей. Если вам нужно что-то, где результаты, например, отображаются как 2,00, вы можете сначала преобразовать в целое число, затем обратно в число с плавающей точкой и express число с двумя десятичными знаками. Но очевидно, что число снова является плавающим.

Для извлечения интерфереров из поплавков вы пробовали использовать функцию round()?

Функция округления по ссылке Pine

...