|
@@ -100,9 +100,6 @@ def cal_and_save_portfolio_nav(cal_portfolio_info, is_save_local) {
|
|
|
|
|
|
rt = '';
|
|
rt = '';
|
|
|
|
|
|
- // 准备类似MySQL结构的数据表
|
|
|
|
- tb_portfolio_nav = create_entity_nav(true);
|
|
|
|
-
|
|
|
|
// 分批跑
|
|
// 分批跑
|
|
i = 0;
|
|
i = 0;
|
|
batch_size = 1000;
|
|
batch_size = 1000;
|
|
@@ -111,6 +108,9 @@ def cal_and_save_portfolio_nav(cal_portfolio_info, is_save_local) {
|
|
|
|
|
|
do { // 先把净值算出来存入数据库,落袋为安
|
|
do { // 先把净值算出来存入数据库,落袋为安
|
|
|
|
|
|
|
|
+ // 准备类似MySQL结构的数据表
|
|
|
|
+ tb_portfolio_nav = create_entity_nav(true);
|
|
|
|
+
|
|
portfolio_info = SELECT * FROM cal_portfolio_info
|
|
portfolio_info = SELECT * FROM cal_portfolio_info
|
|
WHERE portfolio_id IN all_portfolio_id[i : min(all_portfolio_id.size(), i+batch_size)];
|
|
WHERE portfolio_id IN all_portfolio_id[i : min(all_portfolio_id.size(), i+batch_size)];
|
|
|
|
|
|
@@ -121,31 +121,31 @@ def cal_and_save_portfolio_nav(cal_portfolio_info, is_save_local) {
|
|
|
|
|
|
INSERT INTO tb_portfolio_nav SELECT entity_id, price_date, nav FROM tb_ret;
|
|
INSERT INTO tb_portfolio_nav SELECT entity_id, price_date, nav FROM tb_ret;
|
|
|
|
|
|
|
|
+ if(! tb_portfolio_nav.isVoid() && tb_portfolio_nav.size() > 0) {
|
|
|
|
+
|
|
|
|
+ // save data to MySQL (12 sec)
|
|
|
|
+ try {
|
|
|
|
+
|
|
|
|
+ tb_portfolio_nav.rename!('entity_id', 'portfolio_id');
|
|
|
|
+ save_and_sync(tb_portfolio_nav, 'raw_db.pf_portfolio_nav', 'raw_db.pf_portfolio_nav');
|
|
|
|
+
|
|
|
|
+ // 数据初始化时将指标存入本地
|
|
|
|
+ if(is_save_local == true) {
|
|
|
|
+ save_table(tb_portfolio_nav, 'pfdb.pf_portfolio_nav', false);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } catch(ex) {
|
|
|
|
+
|
|
|
|
+ //TODO: Log errors
|
|
|
|
+ rt = ex;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
i += batch_size;
|
|
i += batch_size;
|
|
|
|
|
|
} while (i <= cal_portfolio_info.size());
|
|
} while (i <= cal_portfolio_info.size());
|
|
|
|
|
|
|
|
|
|
- if(! tb_portfolio_nav.isVoid() && tb_portfolio_nav.size() > 0) {
|
|
|
|
-
|
|
|
|
- // save data to MySQL (12 sec)
|
|
|
|
- try {
|
|
|
|
-
|
|
|
|
- tb_portfolio_nav.rename!('entity_id', 'portfolio_id');
|
|
|
|
- save_and_sync(tb_portfolio_nav, 'raw_db.pf_portfolio_nav', 'raw_db.pf_portfolio_nav');
|
|
|
|
-
|
|
|
|
- // 数据初始化时将指标存入本地
|
|
|
|
- if(is_save_local == true) {
|
|
|
|
- save_table(tb_portfolio_nav, 'pfdb.pf_portfolio_nav', false);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- } catch(ex) {
|
|
|
|
-
|
|
|
|
- //TODO: Log errors
|
|
|
|
- rt = ex;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
return rt;
|
|
return rt;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -166,18 +166,6 @@ def cal_and_save_entity_indicators(entity_type, cal_entity_info, is_save_local)
|
|
rt = '';
|
|
rt = '';
|
|
|
|
|
|
is_id_interger = iif(entity_type == 'PF', true, false);
|
|
is_id_interger = iif(entity_type == 'PF', true, false);
|
|
-
|
|
|
|
- // 准备类似MySQL结构的数据表
|
|
|
|
- tb_entity_performance = create_entity_performance(is_id_interger);
|
|
|
|
-
|
|
|
|
- tb_entity_indicator = create_entity_indicator(is_id_interger);
|
|
|
|
- tb_entity_risk_stats = create_entity_risk_stats(is_id_interger);
|
|
|
|
- tb_entity_riskadjret_stats = create_entity_riskadjret_stats(is_id_interger);
|
|
|
|
- tb_entity_style_stats = create_entity_style_stats(is_id_interger);
|
|
|
|
-
|
|
|
|
- tb_entity_performance_weekly = create_entity_performance_weekly(is_id_interger);
|
|
|
|
- tb_entity_latest_performance = create_entity_latest_performance(is_id_interger);
|
|
|
|
-
|
|
|
|
|
|
|
|
// 分批跑
|
|
// 分批跑
|
|
i = 0;
|
|
i = 0;
|
|
@@ -187,6 +175,17 @@ def cal_and_save_entity_indicators(entity_type, cal_entity_info, is_save_local)
|
|
|
|
|
|
do {
|
|
do {
|
|
|
|
|
|
|
|
+ // 准备类似MySQL结构的数据表
|
|
|
|
+ tb_entity_performance = create_entity_performance(is_id_interger);
|
|
|
|
+
|
|
|
|
+ tb_entity_indicator = create_entity_indicator(is_id_interger);
|
|
|
|
+ tb_entity_risk_stats = create_entity_risk_stats(is_id_interger);
|
|
|
|
+ tb_entity_riskadjret_stats = create_entity_riskadjret_stats(is_id_interger);
|
|
|
|
+ tb_entity_style_stats = create_entity_style_stats(is_id_interger);
|
|
|
|
+
|
|
|
|
+ tb_entity_performance_weekly = create_entity_performance_weekly(is_id_interger);
|
|
|
|
+ tb_entity_latest_performance = create_entity_latest_performance(is_id_interger);
|
|
|
|
+
|
|
cal_entity = SELECT * FROM cal_entity_info
|
|
cal_entity = SELECT * FROM cal_entity_info
|
|
WHERE entity_id IN all_entity_id[i : min(all_entity_id.size(), i+batch_size)];
|
|
WHERE entity_id IN all_entity_id[i : min(all_entity_id.size(), i+batch_size)];
|
|
|
|
|
|
@@ -217,7 +216,6 @@ def cal_and_save_entity_indicators(entity_type, cal_entity_info, is_save_local)
|
|
generate_entity_style_stats(entity_info, indicators, true, tb_entity_style_stats);
|
|
generate_entity_style_stats(entity_info, indicators, true, tb_entity_style_stats);
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
// 计算周收益 (49s)
|
|
// 计算周收益 (49s)
|
|
entity_info = SELECT * FROM ej(entity_info, get_entity_info(entity_type, all_entity_id[i : min(all_entity_id.size(), i+batch_size)]), 'entity_id')
|
|
entity_info = SELECT * FROM ej(entity_info, get_entity_info(entity_type, all_entity_id[i : min(all_entity_id.size(), i+batch_size)]), 'entity_id')
|
|
rets_w = cal_weekly_returns(entity_type, entity_info);
|
|
rets_w = cal_weekly_returns(entity_type, entity_info);
|
|
@@ -238,59 +236,59 @@ def cal_and_save_entity_indicators(entity_type, cal_entity_info, is_save_local)
|
|
generate_entity_latest_performance(entity_info, perf_latest, true, tb_entity_latest_performance);
|
|
generate_entity_latest_performance(entity_info, perf_latest, true, tb_entity_latest_performance);
|
|
}
|
|
}
|
|
|
|
|
|
- i += batch_size;
|
|
|
|
-
|
|
|
|
- } while (i <= cal_entity_info.size());
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- if(! tb_entity_performance.isVoid() && tb_entity_performance.size() > 0) {
|
|
|
|
-
|
|
|
|
- // save data to MySQL
|
|
|
|
- try {
|
|
|
|
-
|
|
|
|
- des = get_performance_table_description(entity_type)[0];
|
|
|
|
- chg_columns_for_mysql(tb_entity_performance, des.sec_id_col);
|
|
|
|
- tb_entity_performance.rename!('cumulative_nav', des.cumulative_nav_col);
|
|
|
|
- save_and_sync(tb_entity_performance, des.table_name.strReplace('pfdb', 'raw_db').strReplace('mfdb', 'raw_db'), );
|
|
|
|
- if(is_save_local == true) save_table(tb_entity_performance, des.table_name, false);
|
|
|
|
-
|
|
|
|
- des = get_indicator_table_description(entity_type)[0];
|
|
|
|
- chg_columns_for_mysql(tb_entity_indicator, des.sec_id_col);
|
|
|
|
- save_and_sync(tb_entity_indicator, des.table_name.strReplace('pfdb', 'raw_db').strReplace('mfdb', 'raw_db'), );
|
|
|
|
- if(is_save_local == true) save_table(tb_entity_indicator, des.table_name, false);
|
|
|
|
-
|
|
|
|
- des = get_risk_stats_table_description(entity_type)[0];
|
|
|
|
- chg_columns_for_mysql(tb_entity_risk_stats, des.sec_id_col);
|
|
|
|
- save_and_sync(tb_entity_risk_stats, des.table_name.strReplace('pfdb', 'raw_db').strReplace('mfdb', 'raw_db'), );
|
|
|
|
- if(is_save_local == true) save_table(tb_entity_risk_stats, des.table_name, false);
|
|
|
|
-
|
|
|
|
- des = get_riskadjret_stats_table_description(entity_type)[0];
|
|
|
|
- chg_columns_for_mysql(tb_entity_riskadjret_stats, des.sec_id_col);
|
|
|
|
- save_and_sync(tb_entity_riskadjret_stats, des.table_name.strReplace('pfdb', 'raw_db').strReplace('mfdb', 'raw_db'), );
|
|
|
|
- if(is_save_local == true) save_table(tb_entity_riskadjret_stats, des.table_name, false);
|
|
|
|
-
|
|
|
|
- des = get_capture_style_table_description(entity_type)[0];
|
|
|
|
- chg_columns_for_mysql(tb_entity_style_stats, des.sec_id_col);
|
|
|
|
- save_and_sync(tb_entity_style_stats, des.table_name.strReplace('pfdb', 'raw_db').strReplace('mfdb', 'raw_db'), );
|
|
|
|
- if(is_save_local == true) save_table(tb_entity_style_stats, des.table_name, false);
|
|
|
|
-
|
|
|
|
- des = get_performance_weekly_table_description(entity_type)[0];
|
|
|
|
- tb_entity_performance_weekly.rename!('cumulative_nav', des.cumulative_nav_col);
|
|
|
|
- save_and_sync(tb_entity_performance_weekly, des.table_name.strReplace('pfdb', 'raw_db').strReplace('mfdb', 'raw_db'), );
|
|
|
|
- if(is_save_local == true) save_table(tb_entity_performance_weekly, des.table_name, false);
|
|
|
|
-
|
|
|
|
- des = get_latest_performance_table_description(entity_type)[0];
|
|
|
|
- tb_entity_latest_performance.rename!('cumulative_nav', des.cumulative_nav_col);
|
|
|
|
- save_and_sync(tb_entity_latest_performance, des.table_name.strReplace('pfdb', 'raw_db').strReplace('mfdb', 'raw_db'), );
|
|
|
|
- if(is_save_local == true) save_table(tb_entity_latest_performance, des.table_name, false);
|
|
|
|
|
|
|
|
|
|
+ if(! tb_entity_performance.isVoid() && tb_entity_performance.size() > 0) {
|
|
|
|
+
|
|
|
|
+ // save data to MySQL
|
|
|
|
+ try {
|
|
|
|
+
|
|
|
|
+ des = get_performance_table_description(entity_type)[0];
|
|
|
|
+ chg_columns_for_mysql(tb_entity_performance, des.sec_id_col);
|
|
|
|
+ tb_entity_performance.rename!('cumulative_nav', des.cumulative_nav_col);
|
|
|
|
+ save_and_sync(tb_entity_performance, des.table_name.strReplace('pfdb', 'raw_db').strReplace('mfdb', 'raw_db'), );
|
|
|
|
+ if(is_save_local == true) save_table(tb_entity_performance, des.table_name, false);
|
|
|
|
+
|
|
|
|
+ des = get_indicator_table_description(entity_type)[0];
|
|
|
|
+ chg_columns_for_mysql(tb_entity_indicator, des.sec_id_col);
|
|
|
|
+ save_and_sync(tb_entity_indicator, des.table_name.strReplace('pfdb', 'raw_db').strReplace('mfdb', 'raw_db'), );
|
|
|
|
+ if(is_save_local == true) save_table(tb_entity_indicator, des.table_name, false);
|
|
|
|
+
|
|
|
|
+ des = get_risk_stats_table_description(entity_type)[0];
|
|
|
|
+ chg_columns_for_mysql(tb_entity_risk_stats, des.sec_id_col);
|
|
|
|
+ save_and_sync(tb_entity_risk_stats, des.table_name.strReplace('pfdb', 'raw_db').strReplace('mfdb', 'raw_db'), );
|
|
|
|
+ if(is_save_local == true) save_table(tb_entity_risk_stats, des.table_name, false);
|
|
|
|
+
|
|
|
|
+ des = get_riskadjret_stats_table_description(entity_type)[0];
|
|
|
|
+ chg_columns_for_mysql(tb_entity_riskadjret_stats, des.sec_id_col);
|
|
|
|
+ save_and_sync(tb_entity_riskadjret_stats, des.table_name.strReplace('pfdb', 'raw_db').strReplace('mfdb', 'raw_db'), );
|
|
|
|
+ if(is_save_local == true) save_table(tb_entity_riskadjret_stats, des.table_name, false);
|
|
|
|
+
|
|
|
|
+ des = get_capture_style_table_description(entity_type)[0];
|
|
|
|
+ chg_columns_for_mysql(tb_entity_style_stats, des.sec_id_col);
|
|
|
|
+ save_and_sync(tb_entity_style_stats, des.table_name.strReplace('pfdb', 'raw_db').strReplace('mfdb', 'raw_db'), );
|
|
|
|
+ if(is_save_local == true) save_table(tb_entity_style_stats, des.table_name, false);
|
|
|
|
+
|
|
|
|
+ des = get_performance_weekly_table_description(entity_type)[0];
|
|
|
|
+ tb_entity_performance_weekly.rename!('cumulative_nav', des.cumulative_nav_col);
|
|
|
|
+ save_and_sync(tb_entity_performance_weekly, des.table_name.strReplace('pfdb', 'raw_db').strReplace('mfdb', 'raw_db'), );
|
|
|
|
+ if(is_save_local == true) save_table(tb_entity_performance_weekly, des.table_name, false);
|
|
|
|
+
|
|
|
|
+ des = get_latest_performance_table_description(entity_type)[0];
|
|
|
|
+ tb_entity_latest_performance.rename!('cumulative_nav', des.cumulative_nav_col);
|
|
|
|
+ save_and_sync(tb_entity_latest_performance, des.table_name.strReplace('pfdb', 'raw_db').strReplace('mfdb', 'raw_db'), );
|
|
|
|
+ if(is_save_local == true) save_table(tb_entity_latest_performance, des.table_name, false);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ } catch(ex) {
|
|
|
|
+
|
|
|
|
+ //TODO: Log errors
|
|
|
|
+ rt = ex;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- } catch(ex) {
|
|
|
|
|
|
+ i += batch_size;
|
|
|
|
|
|
- //TODO: Log errors
|
|
|
|
- rt = ex;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ } while (i <= cal_entity_info.size());
|
|
|
|
|
|
return rt;
|
|
return rt;
|
|
}
|
|
}
|
|
@@ -314,7 +312,7 @@ def CalPortfolioPerformanceTask(updatetime) {
|
|
|
|
|
|
is_save_local = iif(updatetime <= get_ini_data_const()['date'], true, false);
|
|
is_save_local = iif(updatetime <= get_ini_data_const()['date'], true, false);
|
|
|
|
|
|
- // 26 min
|
|
|
|
|
|
+ // 1 min
|
|
rt = cal_and_save_portfolio_nav(tb_cal_ports, is_save_local);
|
|
rt = cal_and_save_portfolio_nav(tb_cal_ports, is_save_local);
|
|
// 9 min
|
|
// 9 min
|
|
tb_cal_ports.rename!('portfolio_id', 'entity_id');
|
|
tb_cal_ports.rename!('portfolio_id', 'entity_id');
|
|
@@ -540,11 +538,12 @@ def CalCategoryAverageNavTask(updatetime) {
|
|
|
|
|
|
if(date_hedge_fund.isNull() && date_mutual_fund.isNull()) return rt;
|
|
if(date_hedge_fund.isNull() && date_mutual_fund.isNull()) return rt;
|
|
|
|
|
|
- is_save_local = iif(updatetime <= get_ini_data_const()['date'], true, false);
|
|
|
|
|
|
+ //is_save_local = iif(updatetime <= get_ini_data_const()['date'], true, false);
|
|
|
|
+ is_save_local = true;
|
|
|
|
|
|
//
|
|
//
|
|
for(category_type in v_category_type) {
|
|
for(category_type in v_category_type) {
|
|
-
|
|
|
|
|
|
+//category_type=v_category_type[2]
|
|
oldest_date = min([date_hedge_fund, date_mutual_fund]);
|
|
oldest_date = min([date_hedge_fund, date_mutual_fund]);
|
|
|
|
|
|
// it could take mysql a few minutes to get results
|
|
// it could take mysql a few minutes to get results
|
|
@@ -564,7 +563,9 @@ def CalCategoryAverageNavTask(updatetime) {
|
|
save_and_sync(t_index_value, 'raw_db.indexes_ty_index', );
|
|
save_and_sync(t_index_value, 'raw_db.indexes_ty_index', );
|
|
|
|
|
|
if(is_save_local == true) {
|
|
if(is_save_local == true) {
|
|
- save_table(t_index_value, 'mfdb.indexes_ty_index', false);
|
|
|
|
|
|
+
|
|
|
|
+ t_local_table = load_table_from_local('fundit', 'mfdb.indexes_ty_index');
|
|
|
|
+ t_local_table.append!(SELECT index_id AS entity_id, price_date, index_value AS cumulative_nav, index_value AS nav FROM t_index_value);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|