个股实现
说明: 获取个股指定日分钟线大单成交金额(万)数据
代码:
Function Stock_LargeOrderTracking(stockid,endt);
Begin
{**
%% @explain(说明)大单跟踪,返回个股指定日大单跟踪的分钟线数据
包括:小单:单笔交易明细成交金额<4万元
中单:单笔交易明细成交金额4-20万元
大单:单笔交易明细成交金额20-100万元
小单:单笔交易明细成交金额大于100万元
%% @param(stiockid)(VarChar) 股票代码
%% @param(endt)(DateT) 截止日
%% @return(array) 指定日大单跟踪分钟线数据
**}
ov:=BackupSystemParameters2();
//stockid:="SZ000002";
//endt:=20210309t;
tradData:=select ['Date'],
nil as "交易时间",
HourOf(["date"]) as 'Hour',
MinuteOf(["date"]) as 'minute',
SecondOf(["date"]) as 'second',
['amount']/10000. as '成交金额(万)'
from tradetable datekey endt to endt+16/24 of stockid where ['amount']>0 end;
if not istable(tradData) then return array();
tradData[:,array('小单','中单','大单','超大单')]:=0;
compA:=function(v);
begin
case v of
0 to 4:return '小单';
4 to 20:return '中单';
20 to 100:return '大单';
else return '超大单';
end;
end;
compB:=function(h,m,s);
begin
if h=9 and m<31 then m:=31;
else if s>0 then m++;
if h>=15 and m>=0 then m:=0;
if m=60 then (h++,m:=0);
return EncodeTime(h,m,0,0);
end
update tradData set
["交易时间"]=timetostr(compB.do(['Hour'],['minute'],['second'])),
[compA.do(['成交金额(万)'])]=['成交金额(万)'] end;
tradData:=tradData[:,array('Date','交易时间','小单','中单','大单','超大单')];
tradData:=select selectopt(16) ['交易时间'],sumof(2 to 5) from tradData group by ['交易时间'] end;
tradData:= select stockid as 'StockID',* from tradData order by ['交易时间'] end;
if endt <today() then
return tradData;
else return TSDN_DataFormatToPig(tradData);
End;
说明: 单日分钟线数据的标准化
代码:
Function TSDN_DataFormatToPig(tradData);
Begin
{**
%% @explain(说明)衍生正常交易日的分钟线,把数据于分钟线连接对应,返回完整的日分钟线数据
%% @param(traddata)(array) 分钟线交易数据
%% @return(array) 标准化的当前完整日分钟线数据
**}
ov:=BackupSystemParameters2();
setsysparam(PN_Cycle(),cy_1m());
dt:=select timetostr(TimeOf(["date"])) as "交易时间"
from markettable datekey 20210305.0930t to 20210305.1530t
of "SZ000001" end;
Data:= select [2].*,[1].['交易时间'] from dt left join tradData on ([1].['交易时间'] = [2].['交易时间']) end;
Data[:,'StockID']:=tradData[0,'StockID'];
v:=tradData[length(tradData)-1,'交易时间'];
lastTime:=mfind(dt,mcell=v,false)[0,0];
Data::=ifnil(mcell)?(mrow>lastTime?nil:0):mcell;
return Data;
End;
实现案例: 获取"万科A"在2021-03-09在市交易的大单明细分钟线走势数据
案列图形:
市场实现
说明: 获取板块指定日分钟线大单成交金额(万)数据
代码
Function BK_LargeOrderSummary(bkname,endt,No);
Begin
{**
%% @explain(说明)市场指定日大单数据汇总,选择股票市场板块,按分钟线汇总统计,数据量较大使用网格计算
包括:小单:单笔交易明细成交金额<4万元
中单:单笔交易明细成交金额4-20万元
大单:单笔交易明细成交金额20-100万元
小单:单笔交易明细成交金额大于100万元
%% @param(bkname)(VarChar) 板块名称
%% @param(endt)(DateT) 截止日
%% @param(endt)(No) 网格数(并发数)
%% @return(array) 市场大单数据汇总
**}
//bkname:="中证800";
//endt:=20210309t;
//no:=4;
stockarr:=getbk(bkname);
r:=array();
n:=length(stockarr) div no;
start:=0;
for i:=0 to no-1 do
begin
if i<>no-1 then
r[i]:=#Stocks_LargeOrderSummary(stockarr[start:start+n-1],endt);
else
r[i]:=Stocks_LargeOrderSummary(stockarr[start:],endt);
start+=n;
end
rt:=array();
for i:=0 to length(r)-1 do
rt union=r[i];
rt:= select ["交易时间"],
sumof(["超大单"]) as "超大单",
sumof(["大单"]) as "大单",
sumof(["中单"]) as "中单",
sumof(["小单"]) as "小单"
from rt group by ["交易时间"] order by ["交易时间"] end;
sd:=today();
tt:=timetostr(TimeOf(now()));
if endt=sd then
begin
update rt set ["超大单"]=nil where ["交易时间"]>=tt and ["超大单"]=0 end;
update rt set ["大单"]=nil where ["交易时间"]>=tt and ["大单"]=0 end;
update rt set ["中单"]=nil where ["交易时间"]>=tt and ["中单"]=0 end;
update rt set ["小单"]=nil where ["交易时间"]>=tt and ["小单"]=0 end;
end
return rt;
End;
function Stocks_LargeOrderSummary(stockarr,endt);
begin
rt:=array();
for i:= 0 to length(stockarr)-1 do
begin
rt union= Stock_LargeOrderTracking(stockarr[i],endt);
end
return rt;
end
实现案例: 获取中证800在2021-03-09在市交易的大单明细分钟线走势数据
案例图形:
附件函数
个股:
附件:Stock_LargeOrderTracking.tslfunc
时间标准化:
附件:TSDN_DataFormatToPig.tslfunc
市场:
附件:BK_LargeOrderSummary.tslfunc