|
| 1 | +import TradingView/RelativeValue/2 as rv |
| 2 | + |
1 | 3 | sum(daysBack)=> |
2 | 4 | startT = startFrom(daysBack) |
3 | 5 | sum = 0. |
@@ -78,13 +80,58 @@ plot(aumPerf3Y, title="aum_perf.3Y") |
78 | 80 | plot(aumPerf5Y, title="aum_perf.5Y") |
79 | 81 | plot(aumPerfYTD, title="aum_perf.YTD") |
80 | 82 |
|
| 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 | + |
81 | 112 | 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") |
0 commit comments