查看解析 》
【参考答案】r:=array();Position:=1000; //购买股票的数量PosRate:=6/10000;//交易费率Multiplier:=1;//乘数MarginRatio:=100;//保证金比例begt := 20210101T;endt := 20211231T;days := markettradedayQK(begt,endt);//买入信号buySignal := @cross(ma(close(),10),ma(close(),20))=1;//卖出信号sellSignal := @cross(ma(close(),10),ma(close(),20))=1;for i:=0 to length(days)-1 dobegin BuyOrder := array(); SellOrder := array(); day := days[i]; stockArr := getbkbydate("SH000016",day); //买入清单 BuyOrder := select thisrow as "汇总条件", day as " 截止日", thisrow as "代码", StockName(thisrow) as '名称', 1 as '方向', 0 as "动作", Multiplier as '乘数', MarginRatio as '保证金比例(%)', c := spec(specdate(close(),day),thisrow) as '成交价', Position as '成交量', PosRate*Position*c*Multiplier as '费用', Position*c*Multiplier as "成交金额" from stockArr where spec(specdate(eval(buySignal),day),thisrow) end; //卖出清单卖出清单 SellOrder := select thisrow as "汇总条件", day as "截止日", thisrow as "代码", StockName(thisrow) as '名称', 1 as '方向', 1 as "动作", Multiplier as '乘数', MarginRatio as '保证金比例(%)', c := spec(specdate(close(),day),thisrow) as '成交价', Position as '成交量', PosRate*Position*c*Multiplier as '费用', Position*c*Multiplier as "成交金额" from stockArr where spec(specdate(eval(sellSignal),day),thisrow) end; r &= BuyOrder union SellOrder;End;////剔除未开先卖,未平仓的数据tmplast := select last := sselect drange(0 to 0)["动作"],["截止日"] from thisgroup order by ["截止日"] desc end as nil, last[0] as "期末交易类型", ["汇总条件"]+tostring(last[1]) as "label" from r group by ["汇总条件"] end;tmpfirdt := select last := sselect drange(0 to 0)["动作"],["截止日"] from thisgroup order by ["截止日"] desc end as nil, last[0] as "期初交易类型", ["汇总条件"]+tostring(last[1]) as "label" from r group by ["汇总条件"] end;tmp := tmplast union tmpfirdt;invalidOrder := sselect ["label"] from tmp where ["期末交易类型"]=0 or ["期初交易类型"]=1 end;r := select * from r where not (["汇总条件"]+tostring(["截止日"]) in invalidOrder) end;return r;end