123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- login(`admin, `123456)
- loadPlugin("ODBC")
- clearCachedModules()
- use fundit::fundCalculator
- use fundit::dataPuller
- use fundit::returnCalculator
- use fundit::indicatorCalculator
- /* init values for test cases */
- end_day = 2024.06.28;
- fund_ids = "'HF000004KN','HF000103EU','HF00018WXG'";
- entity_type = 'HF';
- isFromNav = true;
- /* codes from cal_fund_indicators */
- very_old_date = 1990.01.01;
- fund_info = get_fund_info(fund_ids);
- fund_info.rename!('fund_id', 'entity_id');
- if(isFromNav == true) {
- // 从净值开始计算收益
- tb_ret = SELECT * FROM cal_fund_monthly_returns(entity_type, fund_ids, true) WHERE price_date <= end_day;
- tb_ret.rename!(['fund_id', 'cumulative_nav'], ['entity_id', 'nav']);
- } else {
- // 从fund_performance表里读月收益
- tb_ret = get_monthly_ret('FD', fund_ids, very_old_date, end_day, true);
- tb_ret.rename!(['fund_id'], ['entity_id']);
- }
- // 取基金和基准的对照表
- primary_benchmark = SELECT entity_id, iif(benchmark_id.isNull(), 'IN00000008', benchmark_id) AS benchmark_id FROM fund_info;
- // 取所有出现的基准月收益
- bmk_ret = get_benchmark_return(primary_benchmark, end_day);
- risk_free_rate = SELECT fund_id, temporalParse(end_date, 'yyyy-MM') AS end_date, ret FROM get_risk_free_rate(very_old_date, end_day);
- /* Tests for standard indicators */
- rtn = cal_basic_performance(tb_ret, 'm');
- lpm = cal_LPM(tb_ret, risk_free_rate);
- lpms = cal_omega_sortino_kappa(tb_ret, risk_free_rate);
- alpha_beta = cal_alpha_beta(tb_ret, primary_benchmark, bmk_ret, risk_free_rate);
- bmk_tracking = cal_benchmark_tracking(tb_ret, primary_benchmark, bmk_ret);
- capture_r = cal_capture_ratio(tb_ret, primary_benchmark, bmk_ret)
- sharpe = cal_sharpe(tb_ret, rtn, risk_free_rate);
- treynor = cal_treynor(tb_ret, risk_free_rate, alpha_beta);
- jensen = cal_jensen(tb_ret, bmk_ret, risk_free_rate, alpha_beta);
- m2 = cal_m2(tb_ret, primary_benchmark, bmk_ret, risk_free_rate);
- ms = cal_ms_return(tb_ret, risk_free_rate);
- /* codes from cal_fund_bfi_indicators */
- start_month = 1990.01M;
- // 取基金和基准的对照表
- bfi_benchmark = SELECT fund_id AS entity_id, end_date.temporalParse('yyyy-MM') AS end_date, factor_id AS benchmark_id
- FROM get_fund_bfi_factors(fund_ids, start_month.temporalFormat('yyyy-MM'), end_day.temporalFormat('yyyy-MM'));
- bfi_bmk_ret = get_benchmark_return(bfi_benchmark, end_day);
- /* Tests for BFI indicators */
- t_bfi_bmk = SELECT * FROM bfi_benchmark WHERE entity_id = 'HF000004KN' and end_date = 2024.06M
- t0 = SELECT t.entity_id, t.end_date, t.price_date,
- t.ret, bmk.ret AS ret_bmk, cumcount(t.entity_id) AS cnt, (t.ret - bmk.ret) AS exc_ret, bm.benchmark_id
- FROM tb_ret t
- INNER JOIN t_bfi_bmk bm ON t.entity_id = bm.entity_id
- INNER JOIN bfi_bmk_ret bmk ON t.end_date = bmk.end_date AND bm.benchmark_id = bmk.benchmark_id
- WHERE t.ret > -1
- AND bmk.ret > -1
- CONTEXT BY t.entity_id, bm.benchmark_id;
- t = SELECT entity_id, end_date.cummax() AS end_date, price_date.cummax() AS price_date, price_date.cummin() AS min_date, benchmark_id,
- cumcount(iif(exc_ret >= 0, 1, null)) \ cnt AS winrate,
- exc_ret.cumstd() AS track_error,
- iif(exc_ret.cumstd() == 0, null, exc_ret.cumavg() / exc_ret.cumstd()) AS info
- FROM t0 CONTEXT BY entity_id, benchmark_id
- ORDER BY entity_id, end_date, benchmark_id;
- select * from bfi_benchmark where benchmark_id = 'FA00000VMP' order by end_date desc
-
- bfi_bmk_tracking = cal_benchmark_tracking(tb_ret, bfi_benchmark, bfi_bmk_ret);
- bfi_alpha_beta = cal_alpha_beta(tb_ret, bfi_benchmark, bfi_bmk_ret, risk_free_rate);
- bfi_indicators = cal_indicators_with_benchmark(tb_ret, bfi_benchmark, bfi_bmk_ret, risk_free_rate);
- SELECT * FROM bfi_indicators ORDER BY entity_id, end_date desc, benchmark_id
|