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

Commit 07fbc81

Browse files
author
arylkou
committed
NOVA-689: fix funds calculation
1 parent 68e2360 commit 07fbc81

2 files changed

Lines changed: 36 additions & 5 deletions

File tree

links/etf.pine.link

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,19 @@ fundPerfYTD() =>
4848

4949
perf
5050

51+
canGetDataFromSec(bool isLastBarSecSer, int dayofmonthSecSer) =>
52+
not isLastBarSecSer or dayofmonth <= dayofmonthSecSer
53+
54+
// fund_flows.<1M|3M|YTD|1Y|3Y|5Y>
55+
fundFlows(finTicker) =>
56+
[fund_flows1M, fund_flows3M, fund_flows1Y, fund_flows3Y, fund_flows5Y, fund_flowsYTD, dm, b_s] = request.security(finTicker, fundTF, [sum(month1), sum(month3), sum(years1), sum(years3), sum(years5), sumYTD(), dayofmonth, barstate.islast], lookahead = barmerge.lookahead_on, ignore_invalid_symbol=true)
57+
if canGetDataFromSec(b_s, dm)
58+
[fund_flows1M, fund_flows3M, fund_flows1Y, fund_flows3Y, fund_flows5Y, fund_flowsYTD]
59+
else
60+
[na, na, na, na, na, na]
61+
5162
fundFlowsTicker = __financial_tickerid(syminfo.tickerid, "FUND_FLOWS", "D")
52-
[fund_flows1M, fund_flows3M, fund_flows1Y, fund_flows3Y, fund_flows5Y, fund_flowsYTD] = request.security(fundFlowsTicker, fundTF, [sum(month1), sum(month3), sum(years1), sum(years3), sum(years5), sumYTD()], ignore_invalid_symbol=true, gaps=barmerge.gaps_off)
63+
[fund_flows1M, fund_flows3M, fund_flows1Y, fund_flows3Y, fund_flows5Y, fund_flowsYTD] = fundFlows(fundFlowsTicker)
5364

5465
plot(fund_flows1M, title="fund_flows.1M")
5566
plot(fund_flows3M, title="fund_flows.3M")
@@ -58,8 +69,16 @@ plot(fund_flows3Y, title="fund_flows.3Y")
5869
plot(fund_flows5Y, title="fund_flows.5Y")
5970
plot(fund_flowsYTD, title="fund_flows.YTD")
6071

72+
// nav_perf.<1M|3M|YTD|1Y|3Y|5Y>
73+
fundPerfs(finTicker) =>
74+
[m1, m2, y1, y3, y5, ytd, dm, b_s] = request.security(finTicker, fundTF, [fundPerf(month1), fundPerf(month3), fundPerf(years1), fundPerf(years3), fundPerf(years5), fundPerfYTD(), dayofmonth, barstate.islast], lookahead = barmerge.lookahead_on, ignore_invalid_symbol=true)
75+
if canGetDataFromSec(b_s, dm)
76+
[m1, m2, y1, y3, y5, ytd]
77+
else
78+
[na, na, na, na, na, na]
79+
6180
navTicker = __financial_tickerid(syminfo.tickerid, "NAV", "D")
62-
[navPerf1M, navPerf3M, navPerf1Y, navPerf3Y, navPerf5Y, navPerfYTD] = request.security(navTicker, fundTF, [fundPerf(month1), fundPerf(month3), fundPerf(years1), fundPerf(years3), fundPerf(years5), fundPerfYTD()], ignore_invalid_symbol=true, gaps=barmerge.gaps_off)
81+
[navPerf1M, navPerf3M, navPerf1Y, navPerf3Y, navPerf5Y, navPerfYTD] = fundPerfs(navTicker)
6382

6483
plot(navPerf1M, title="nav_perf.1M")
6584
plot(navPerf3M, title="nav_perf.3M")
@@ -68,8 +87,9 @@ plot(navPerf3Y, title="nav_perf.3Y")
6887
plot(navPerf5Y, title="nav_perf.5Y")
6988
plot(navPerfYTD, title="nav_perf.YTD")
7089

90+
// aum_perf.<1M|3M|YTD|1Y|3Y|5Y>
7191
aumTicker = __financial_tickerid(syminfo.tickerid, "AUM", "D")
72-
[aumPerf1M, aumPerf3M, aumPerf1Y, aumPerf3Y, aumPerf5Y, aumPerfYTD] = request.security(aumTicker, fundTF, [fundPerf(month1), fundPerf(month3), fundPerf(years1), fundPerf(years3), fundPerf(years5), fundPerfYTD()], ignore_invalid_symbol=true, gaps=barmerge.gaps_off)
92+
[aumPerf1M, aumPerf3M, aumPerf1Y, aumPerf3Y, aumPerf5Y, aumPerfYTD] = fundPerfs(aumTicker)
7393

7494
plot(aumPerf1M, title="aum_perf.1M")
7595
plot(aumPerf3M, title="aum_perf.3M")
@@ -78,8 +98,16 @@ plot(aumPerf3Y, title="aum_perf.3Y")
7898
plot(aumPerf5Y, title="aum_perf.5Y")
7999
plot(aumPerfYTD, title="aum_perf.YTD")
80100

101+
// nav_total_return.<1M|3M|6M|YTD|1Y|3Y|5Y>
102+
navTotalReturns(finTicker) =>
103+
[navTotalReturn1M, navTotalReturn3M, navTotalReturn6M, navTotalReturn1Y, navTotalReturn3Y, navTotalReturn5Y, navTotalReturnYTD, dm, b_s] = request.security(finTicker, fundTF, [fundPerf(month1), fundPerf(month3), fundPerf(month6), fundPerf(years1), fundPerf(years3), fundPerf(years5), fundPerfYTD(), dayofmonth, barstate.islast], lookahead = barmerge.lookahead_on, ignore_invalid_symbol=true)
104+
if canGetDataFromSec(b_s, dm)
105+
[navTotalReturn1M, navTotalReturn3M, navTotalReturn6M, navTotalReturn1Y, navTotalReturn3Y, navTotalReturn5Y, navTotalReturnYTD]
106+
else
107+
[na, na, na, na, na, na, na]
108+
81109
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)
110+
[navTotalReturn1M, navTotalReturn3M, navTotalReturn6M, navTotalReturn1Y, navTotalReturn3Y, navTotalReturn5Y, navTotalReturnYTD] = navTotalReturns(navAllTicker)
83111

84112
plot(navTotalReturn1M, title="nav_total_return.1M")
85113
plot(navTotalReturn3M, title="nav_total_return.3M")

links/nav_discount_premium.link

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
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+
[s, dm, b_s] = request.security(finTicker, "D", [close, dayofmonth, barstate.islast], lookahead = barmerge.lookahead_on, ignore_invalid_symbol=true)
7+
canGetDataFromSec(b_s, dm) ? s : na
58
var finTicker = __financial_tickerid(getSymbolName(symbolName), "NAV", "D")
6-
nav = request.security(finTicker, "D", close, ignore_invalid_symbol=true, gaps=barmerge.gaps_on)
9+
nav = getNAV(finTicker)
710
var float nav_discount_premium = na
811
if not na(nav)
912
nav_discount_premium := ((close / nav) - 1) * 100

0 commit comments

Comments
 (0)