Skip to content
This repository was archived by the owner on Feb 10, 2026. It is now read-only.

Commit ff62ace

Browse files
author
arylkou
committed
NOVA-689: fix nav_total_return and nav_discount_premium
1 parent 68e2360 commit ff62ace

2 files changed

Lines changed: 63 additions & 10 deletions

File tree

links/etf.pine.link

Lines changed: 56 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import TradingView/RelativeValue/2 as rv
2+
13
sum(daysBack)=>
24
startT = startFrom(daysBack)
35
sum = 0.
@@ -78,13 +80,58 @@ plot(aumPerf3Y, title="aum_perf.3Y")
7880
plot(aumPerf5Y, title="aum_perf.5Y")
7981
plot(aumPerfYTD, title="aum_perf.YTD")
8082

83+
84+
// nav_total_return.<1M|3M|6M|YTD|1Y|3Y|5Y>
85+
percent(cur, prev) =>
86+
(not na(prev) and prev != 0) ? (cur - prev) / prev * 100 : na
87+
changePercentAgo(source,period) =>
88+
bool anchor = if str.endswith(period, "Y")
89+
mult = period == "3Y" ? 3 : period == "5Y" ? 5 : 1
90+
timeframe.change("12M") and year % mult == 0
91+
else
92+
timeframe.change(period)
93+
prev = rv.averageAtTime(source, 1, anchor, false)
94+
percent(source, prev)
95+
changePercentYTD(source) =>
96+
var float lastYTD = na
97+
if year!=year[1]
98+
lastYTD := source[1]
99+
percent(source, lastYTD)
100+
changePercent(source,period) =>
101+
period == "YTD" ? changePercentYTD(source) : changePercentAgo(source,period)
102+
103+
finTickerNAVTR = __financial_tickerid(syminfo.tickerid, "NAV_ALL", "D")
104+
105+
navTotalReturns(finTicker) =>
106+
[ntr1M, ntr3M, ntr6M, ntr1Y, ntr3Y, ntr5Y, ntrYTD, timeClose, isLast] = request.security(finTicker, fundTF, [changePercent(close, "1M"), changePercent(close, "3M"), changePercent(close, "6M"), changePercent(close, "1Y"), changePercent(close, "3Y"), changePercent(close, "5Y"), changePercent(close, "YTD"), time_close, barstate.islast], lookahead = barmerge.lookahead_on, ignore_invalid_symbol=true)
107+
if isLast and time >= timeClose
108+
[na, na, na, na, na, na, na]
109+
else
110+
[ntr1M, ntr3M, ntr6M, ntr1Y, ntr3Y, ntr5Y, ntrYTD]
111+
81112
navAllTicker = __financial_tickerid(syminfo.tickerid, "NAV_ALL", "D")
82-
[navTotalReturn1M, navTotalReturn3M, navTotalReturn6M, navTotalReturn1Y, navTotalReturn3Y, navTotalReturn5Y, navTotalReturnYTD] = request.security(navAllTicker, fundTF, [fundPerf(month1), fundPerf(month3), fundPerf(month6), fundPerf(years1), fundPerf(years3), fundPerf(years5), fundPerfYTD()], ignore_invalid_symbol=true, gaps=barmerge.gaps_off)
83-
84-
plot(navTotalReturn1M, title="nav_total_return.1M")
85-
plot(navTotalReturn3M, title="nav_total_return.3M")
86-
plot(navTotalReturn6M, title="nav_total_return.6M")
87-
plot(navTotalReturn1Y, title="nav_total_return.1Y")
88-
plot(navTotalReturn3Y, title="nav_total_return.3Y")
89-
plot(navTotalReturn5Y, title="nav_total_return.5Y")
90-
plot(navTotalReturnYTD, title="nav_total_return.YTD")
113+
[ntr1M, ntr3M, ntr6M, ntr1Y, ntr3Y, ntr5Y, ntrYTD] = navTotalReturns(navAllTicker)
114+
115+
var float navTotalReturn1M = na
116+
var float navTotalReturn3M = na
117+
var float navTotalReturn6M = na
118+
var float navTotalReturn1Y = na
119+
var float navTotalReturn3Y = na
120+
var float navTotalReturn5Y = na
121+
var float navTotalReturnYTD = na
122+
if not na(ntr1M)
123+
navTotalReturn1M := ntr1M
124+
navTotalReturn3M := ntr3M
125+
navTotalReturn6M := ntr6M
126+
navTotalReturn1Y := ntr1Y
127+
navTotalReturn3Y := ntr3Y
128+
navTotalReturn5Y := ntr5Y
129+
navTotalReturnYTD := ntrYTD
130+
131+
plot(navTotalReturn1M, title = "nav_total_return.1M")
132+
plot(navTotalReturn3M, title = "nav_total_return.3M")
133+
plot(navTotalReturn6M, title = "nav_total_return.6M")
134+
plot(navTotalReturnYTD, title = "nav_total_return.YTD")
135+
plot(navTotalReturn1Y, title = "nav_total_return.1Y")
136+
plot(navTotalReturn3Y, title = "nav_total_return.3Y")
137+
plot(navTotalReturn5Y, title = "nav_total_return.5Y")

links/nav_discount_premium.link

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,14 @@
22
symbolName = input.symbol("", title = "Symbol", confirm = false, __optional = true)
33
getSymbolName(symbol) => symbol == "" ? syminfo.tickerid : symbol
44
makeTicker(fund, symbol = "") => __financial_tickerid(getSymbolName(symbol), fund, "")
5+
getNAV(finTicker) =>
6+
[sec, timeClose, isLast] = request.security(finTicker, "D", [close, time_close, barstate.islast], lookahead = barmerge.lookahead_on, ignore_invalid_symbol=true)
7+
if isLast and time >= timeClose
8+
float(na)
9+
else
10+
sec
511
var finTicker = __financial_tickerid(getSymbolName(symbolName), "NAV", "D")
6-
nav = request.security(finTicker, "D", close, ignore_invalid_symbol=true, gaps=barmerge.gaps_on)
12+
nav = getNAV(finTicker)
713
var float nav_discount_premium = na
814
if not na(nav)
915
nav_discount_premium := ((close / nav) - 1) * 100

0 commit comments

Comments
 (0)