Bladeren bron

小修小补

Joey 1 week geleden
bovenliggende
commit
458ecf5242
2 gewijzigde bestanden met toevoegingen van 42 en 45 verwijderingen
  1. 4 42
      codes/Sample_cal_indicators.dos
  2. 38 3
      codes/sample_cal_portfolio.dos

+ 4 - 42
codes/Sample_cal_indicators.dos

@@ -24,50 +24,12 @@ risk_free_rate = SELECT fund_id, temporalParse(end_date, 'yyyy-MM') AS end_date,
 tb_updated_funds = get_fund_list_by_nav_updatetime(null, 2024.07.19T10:00:00);
 
 // take 1000 funds for testing
-fund_ids = "'" + tb_updated_funds.fund_id[0:1000].concat("','") + "'";
-
-
+fund_ids = tb_updated_funds.fund_id[0:1000].concat("','")$STRING;
+fund_ids = "'" + fund_ids + "'";
 
 tb_ret = SELECT * FROM cal_hedge_fund_returns(fund_ids, true) WHERE price_date <= end_day;
 tb_ret.rename!(['fund_id', 'cumulative_nav'], ['entity_id', 'nav']);
 
+tb_indicators = cal_all_trailing_indicators(tb_ret, end_day, bmk_ret, risk_free_rate, 'm');
 
-// since inception
-r_incep = cal_indicators(tb_ret, bmk_ret, risk_free_rate, 'm');
-
-// ytd
-tb_ret_ytd = SELECT * FROM tb_ret WHERE end_date >= end_day.yearBegin().month();
-r_ytd = cal_indicators(tb_ret_ytd, bmk_ret, risk_free_rate, 'm');
-
-// trailing 6m
-tb_ret_6m = SELECT * FROM tb_ret WHERE end_date > end_day.month()-6;
-r_6m = cal_indicators(tb_ret_6m, bmk_ret, risk_free_rate, 'm');
-
-// trailing 1y
-tb_ret_1y = SELECT * FROM tb_ret WHERE end_date > end_day.month()-12;
-r_1y = cal_indicators(tb_ret_1y, bmk_ret, risk_free_rate, 'm');
-
-// trailing 2y
-tb_ret_2y = SELECT * FROM tb_ret WHERE end_date > end_day.month()-24;
-r_2y = cal_indicators(tb_ret_2y, bmk_ret, risk_free_rate, 'm');
-
-// trailing 3y
-tb_ret_3y = SELECT * FROM tb_ret WHERE end_date > end_day.month()-36;
-r_3y = cal_indicators(tb_ret_3y, bmk_ret, risk_free_rate, 'm');
-
-// trailing 4y
-tb_ret_4y = SELECT * FROM tb_ret WHERE end_date > end_day.month()-48;
-r_4y = cal_indicators(tb_ret_4y, bmk_ret, risk_free_rate, 'm');
-
-// trailing 5y
-tb_ret_5y = SELECT * FROM tb_ret WHERE end_date > end_day.month()-60;
-r_5y = cal_indicators(tb_ret_5y, bmk_ret, risk_free_rate, 'm');
-
-// trailing 10y
-tb_ret_10y = SELECT * FROM tb_ret WHERE end_date > end_day.month()-120;
-r_10y = cal_indicators(tb_ret_10y, bmk_ret, risk_free_rate, 'm');
-
-
-
-
-
+SELECT * FROM tb_indicators[0];

+ 38 - 3
codes/sample_cal_portfolio.dos

@@ -8,9 +8,44 @@ use fundit::indicatorCalculator
 use fundit::navCalculator
 
 very_old_date = 1990.01.01;
-// portfolio_ids = '166002,166114';
+
+/* TEST CASE 1, calculation_method = 1 */
+portfolio_ids = '166002,166114';
+cal_method = 1;
+
+/*  TEST CASE 2, calculation_method = 2
+
+portfolio_ids = '364771';
 
 portfolio_ids = '364771,364772,364773,364774,364775,364776,364777,365070,364778,364779,365179,365180,365181,365164,365189,365198,365199,365200,365204,365205,365165,365166,365186,365187,365197,365201,365206,365167,365168,365171,365182,365183,365169,365170,365172,365173,365174,365175,365178,365194,365176,365177,365184,365185,365188,365190,365191,365192,365193,365195,365196,365202,365203';
 
-tb_portfolio_ret = cal_portfolio_return(portfolio_ids, very_old_date, 2);
-    
+cal_method = 2;
+*/
+
+// calculate navs
+tb_portfolio_ret = cal_portfolio_return(portfolio_ids, very_old_date, cal_method);
+tb_portfolio_ret.sortBy!(['portfolio_id', 'price_date'], [1, 1]);
+
+select portfolio_id, price_date.month(), price_date.last(), (1+ret).prod()-1, nav.last()
+from tb_portfolio_ret 
+where price_date <= end_day
+group by portfolio_id, price_date.month()
+
+// calculate indicators
+end_day = 2024.08.31
+
+bmk_ret = SELECT fund_id, temporalParse(end_date, 'yyyy-MM') AS end_date, ret FROM get_fund_monthly_ret("'IN00000008'", 1990.01.01, end_day, true); 
+risk_free_rate = SELECT fund_id, temporalParse(end_date, 'yyyy-MM') AS end_date, ret FROM get_risk_free_rate("'IN0000000M'", 1990.01.01, end_day);
+
+// calculate monthly return
+// funky thing is you can't use "AS" for the grouping columns?
+tb_ret = SELECT portfolio_id, price_date.month(), price_date.last() AS price_date, (1+ret).prod()-1 AS ret, nav.last() AS nav
+         FROM tb_portfolio_ret
+         WHERE price_date <= end_day
+         GROUP BY portfolio_id, price_date.month();
+
+tb_ret.rename!(['portfolio_id', 'month_price_date'], ['entity_id', 'end_date']);
+
+tb_indicators = cal_all_trailing_indicators(tb_ret, end_day, bmk_ret, risk_free_rate, 'm');
+
+select * from tb_indicators[8]