A:本文中展示的是一个相对比较简单的打分实现过程,仅供用户参考实现流程。
总体过程分为两步:
第一步,封装单个指标得分模型(如:orderQ)
第二步,得到每个指标的单个得分,最后生成综合得分(本案例中,直接各指标排名加总)
案例实现:对组合中的三个指标,两个逆序排名(正向指标),一个按正序排名(反向指标),将排名结果相加作为综合分数。
具体实现如下:
封装打分模型:orderQ(t:Array,FileName:string,sortdir:int):Array
function orderQ(t,FileName,sortdir); //打分算法:排名即分数
begin
{t:组合数据
FileName:排名的列名
sortdir:排序方向,1为正序,0为逆序
}
if sortdir then //正序
t1:= select *,thisorder as FileName$'-排名'
from t order by [FileName] end;
else //逆序
t1:= select *,thisorder as FileName$'-排名'
from t order by [FileName] desc end;
return t1;
end
实现:对指定日沪深300成份股的三个指标进行排名打分,最后得到各股的综合分。
endt:=20231024T;
t:= select thisrow as 'id',
spec(1/StockPE(endt),thisrow) as "E/P",
spec(stockhsl(endt-7,endt),thisrow) as "hsl",
spec(StockRisk("SH000300",endt-30,endt),thisrow) as 'std'
from getbkbydate("SH000300",endt) end;
t1:= orderQ(t,"E/P",1); //对pe列打分-顺序,即指标越大,排名数字越大,分越高
t2:= orderQ(t1,"hsl",1); //对hsl列打分-顺序,即指标越大,排名数字越大,分越高
t2:= orderQ(t2,"std",0); //对std列打分-逆序,即指标越小,排名数字越大,分越高
t:= select *,["E/P-排名"]+["hsl-排名"]+["std-排名"] as '综合分' from t2 end;
return select * from t order by ['综合分'] desc end;
返回结果(部分结果截图):
