-
Notifications
You must be signed in to change notification settings - Fork 80
Expand file tree
/
Copy pathFactorCalc.dos
More file actions
39 lines (33 loc) · 1.57 KB
/
Copy pathFactorCalc.dos
File metadata and controls
39 lines (33 loc) · 1.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
module FactorCalc
//generate the factor cacuclate sql
def generate_factor_sql(factor_name,factor_col_list,start_date,end_date){
factor_str=concat(factor_name,'(')
for(col in factor_col_list){
factor_str=factor_str.concat(col).concat(',')
}
factor_str=substr(factor_str,0,factor_str.strlen()-1).concat(')')
factor_sql=parseExpr(factor_str)
whereConditions = [expr(sqlCol('tradetime'),>=,start_date),expr(sqlCol('tradetime'),<=,end_date)]
k_day=loadTable("dfs://k_day_level","k_day")
final_factor_sql=sql(select=(sqlCol(`securityid),sqlCol(`tradetime),sqlColAlias(factor_sql, factor_name)), from=k_day, where=whereConditions);
return final_factor_sql
}
// save the factor caculate result to factor result table
def calc_factor_single_and_savewide(factor_name,factors_basic_info,start_date,end_date){
factor_sql =generate_factor_sql(factor_name,factors_basic_info['factor_col_list'],start_date,end_date)
res=eval(factor_sql)
pivot_sql=sql(select=sqlCol(`fac2), from=res, groupBy=[sqlCol(`tradetime),sqlCol(`securityid)],groupFlag=2);
tmp =eval(pivot_sql)
tmp[`factorname]=`fac2
reorderColumns!(tmp,`tradetime`factorname)
dbName = "dfs://K_FACTOR_WIDE"
day_factor=loadTable(dbName,'factor_k_wide')
day_factor.upsert!(tmp,keyColNames=`tradetime`factorname)
return true;
}
// return factor calculate reuslt
def calc_factor_single_and_return(factor_name,factors_basic_info,start_date,end_date){
factor_sql =generate_factor_sql(factor_name,factors_basic_info['factor_col_list'],start_date,end_date)
res=eval(factor_sql)
return res;
}