注:用户在给交易明细时,注意根据选股日期给出当时的正确证券代码,如何实现,可参考函数-新旧代码转换(按日期):getTrueStockIDbyDate(StockID,Endt)//获取指定日证券有效代码
范例1:取一段时间内的60分钟线行情(跨)
stockid:='SH601360';
setsysparam(pn_stock(),stockid);
setsysparam(pn_cycle(),cy_day());
Tarr:=StockTradeDayQk(20180210T,20180305T);
setsysparam(pn_cycle(),cy_60m());
t:=array();
for i:=0 to length(Tarr)-1 do //一天天取
t&=select * from markettable datekey Tarr[i] to Tarr[i]+0.99
of getTrueStockIDbyDate(stockid,Tarr[i]) end;
return t;
范例2:回测中的应用,旧代码迁出,新代码迁入,框架自动转换。高频下交易明细用户需正确给出交易的证券代码。
begt:=20180227T;
endt:=20180310T;
obj := createobject('PercentPortfolio');
//回测开始时间
obj.FBegT:=begt;
//回测截止时间
obj.FEndT:=endt;
//调仓周期-高频下,由于高频数据新代码没有历史数据,所以需要转代码
obj.FCycle:=cy_60m();
//组合类别(数量类组合)
obj.FGroupType:=2;
//基准代码
obj.FIndexId:='SH000300';
//初始资金
obj.FIniCash:=1000000;
//资金配比方式
obj.FRateType:=-1;
obj.FCashOption:=0; //0 不现金对价(默认值),1 现金对价
//回测
obj.BackTest();
return array(
//---组合基础
"交易明细":obj.GetTradeData(BegT,EndT),
"资产配置":obj.GetAssetData(BegT,EndT),
"持仓明细":obj.GetHoldData(BegT,EndT)
);
Type PercentPortfolio=class(TSBackTesting)
function GetTradeOrder(vEndT);override;
begin
Stocks:=array('SZ000002','SH600000','SH601360');
HolD:= GetHoldData();
t:=select getTrueStockIDbyDate(thisrow,vEndt) as '代码',1 as '方向',0 as '动作',500 as '成交量'
from Stocks
where not (getTrueStockIDbyDate(thisrow,vEndt) in HolD[:,'代码'])
end;
return t;
end;
End;
//可通过查看交易明细与持仓明细看出迁入迁出处理过程