Ver código fonte

小修小补

Joey 1 semana atrás
pai
commit
da18be3c46
2 arquivos alterados com 26 adições e 1 exclusões
  1. 24 1
      modules/dataPuller.dos
  2. 2 0
      modules/returnCalculator.dos

+ 24 - 1
modules/dataPuller.dos

@@ -228,7 +228,7 @@ def get_nav_by_price_date(entity_type, entity_ids, price_date, isFromMySQL) {
 
     if(isFromMySQL == true) {
 
-        nav_table_name = "mfdb.nav"
+        nav_table_name = tmp.table_name[0];
     
         s_query = "SELECT " + tmp.sec_id_col[0] + ", price_date, " + tmp.cumulative_nav_col[0] + ", " + tmp.nav_col[0] + "
                    FROM " + tmp.table_name[0] + "
@@ -439,6 +439,29 @@ def get_fund_bfi_factors(fund_ids, month_end) {
 
 
 /*
+ *  取某月的组合BFI因子
+ * 
+ *  Example: get_portfolio_bfi_factors("166002,166114", '2024-06');
+ */
+def get_portfolio_bfi_factors(portfolio_ids, month_end) {
+
+    s_query = "SELECT portfolio_id, factor_id, end_date
+               FROM pfdb.pf_portfolio_factor_bfi_by_category_group
+               WHERE portfolio_id IN (" + portfolio_ids + ")
+                 AND end_date = '" + month_end + "'
+                 AND isvalid = 1;";
+
+    conn = connect_mysql();
+
+    t = odbc::query(conn, s_query);
+
+    conn.close();
+
+    return t;
+
+}
+
+/*
  * 取组合交易表
  *
  *

+ 2 - 0
modules/returnCalculator.dos

@@ -58,6 +58,8 @@ def cal_fund_monthly_returns(entity_type, fund_ids, isFromMySQL){
         FROM tb_fund_info fi
         WHERE NOT EXISTS ( SELECT * FROM tb_monthly_nav n WHERE fund_id = tb_fund_info.fund_id AND n.price_date = tb_fund_info.inception_date);
 
+    if(tb_monthly_nav.isVoid() || tb_monthly_nav.size() == 0) { return tb_rets; }
+
     // 算 ratios 之前先把时间顺序排好
     tb_monthly_nav.sortBy!(['fund_id', 'end_date', 'price_date'], [1, 1, 1]);