{交易记录}
//***** 读文本 *****
市场:=MARKETLABEL;
代码:=STKLABEL;
//DRAWTEXTEX(1,0,1,0,MARKETNAME+' '+代码);
DRAWTEXT(BARPOS=SYSPARAM(2),H,MARKETNAME+' '+代码),COLOR999999,ALIGN4;
地址:='F:\交易记录\'+市场+'\'+代码 +'.txt';//按自己的情况修改
文本:='';
<%
UTXT=ffl.vardata("文本")
UDZ=ffl.vardata("地址")
Dim fso, ts,s
Const ForReading = 1
On Error Resume Next
path ="" & UDZ
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.OpenTextFile(path, ForReading)
s = ts.ReadAll
UTXT = s
ts.Close
ffl.vardata("文本")=UTXT
%>
Z1:='成交数量';///起始字符串
Z2:='#####';/////终止字符串
起:=STRFIND(文本,Z1,1)+8;
止:=STRFIND(文本,Z2,起);
文本长:=止-起;
字符串:=STRMID(文本,起,文本长);
//***** 读文本结束 *****
//验证资料种类
F10:=IF(RANGE(STRFIND(文本,'###交易记录###',1),0,200),1,0);
IF NOT(F10=1) THEN BEGIN //非交易记录退出
DRAWTEXT(SYSPARAM(2)=BARPOS,15,' 本公式不适合该种资料。'),COLOREEFF,ALIGN4;
EXIT;
END;
//***** 数据提取 *****
FHS:=CEILING(文本长/51),LINETHICK;//数据行数
//设定各数组:日期 时间 开平 方向 成交价格 成交数量
VARIABLE:RQS[FHS]=0,SJS[FHS]=0,KP[FHS]=0,FXS[FHS]=0,CJJ[FHS]=0,SLS[FHS]=0;
HW:=0;
FOR j=1 TO FHS DO BEGIN
HW:=STRFIND(文本,'成交',IF(j=1,起+10,HW+42));//取数据所在位置
IF HW=0 THEN BREAK;//超出尾部行位置跳出循环
LS1:=24;LS2:=14;LS3:=12;
//=== 提取各字符串 ===
RQT:=LTRIM(STRMID(文本,HW-LS1,8));//取日期
SJT:=LTRIM(STRMID(文本,HW-LS2,8))-':';//取时间
KPT:=RTRIM(LTRIM(STRMID(文本,HW+5,6)));//开平仓
FXT:=RTRIM(LTRIM(STRMID(文本,HW+8,6)));//取方向
CJT:=STRMID(文本,HW+LS3,10);//取成交价
SLT:=STRMID(文本,STRFIND(文本,' ',HW+LS3+STRLEN(CJT)),5);//取成交数量
//=== 提取字符串结束 ===
IF j<FHS AND STRLEN(LTRIM(RTRIM(SJT)))>5 THEN BEGIN
RQS[j]:=IF(STRTONUM(STRLEFT(RQT,4))<2000,0,1000000)+STRTONUM(STRRIGHT(RQT,6));//日期
SJS[j]:=STRTONUM(SJT);//时间
KP[j]:=IF(STRFIND(KPT,'开',1)>0,1,IF(STRFIND(KPT,'平',1)>0,2,0));
FXS[j]:=IF(STRFIND(FXT,'买',1)>0,1,0);
CJJ[j]:=STRTONUM(CJT);//成交价
SLS[j]:=STRTONUM(SLT);//成交数
IF RQS[j]=0 THEN BREAK;
END;
END;
JS:=J-1;
成交笔数:JS,LINETHICK;
DD:=DATE;
TT1:=TIME;
TT2:=IF(DATATYPE=0,FLOOR(TT1/100)*100+61,TT1+IF(DATATYPE=1,100,IF(DATATYPE=2,500,60)));
XX:=C*0;KKP:=C*0;KFX:=C*0;KCJ:=C*0;KSL:=C*0;
JKQ:=(CROSS(RQS[1]=DD,0.5) or BARPOS=1)*10,LINETHICK;//交易记录日期起点
JKS:=BARSSINCE(JKQ);
起点Ks:=DATACOUNT-JKS[DATACOUNT];
for i=起点Ks to datacount do begin
if DD[i]>=RQS[1] and DD[i]<=RQS[Js] then begin
for ii=1 to JS do begin
if DD[i]=RQS[ii] and RANGE(SJS[ii],TT1[i]-1,TT2[i]+1) then begin
XX[i]:=1;
KKP[i]:=KP[ii];
KFX[i]:=FXS[ii];
KCJ[i]:=CJJ[ii];
KSL[i]:=SLS[ii];
if ii>1 and RANGE(SJS[ii-1],TT1[i]-1,TT2[i]+1)&&KP[ii]=KP[ii-1]&&FXS[ii]=FXS[ii-1]&&CJJ[ii]=CJJ[ii-1]
then KSL[i]:=SLS[ii]+SLS[ii-1];
if ii>=3 then begin
if RANGE(SJS[ii-1],TT1[i]-1,TT2[i]+1) and RANGE(SJS[ii-2],TT1[i]-1,TT2[i]+1)
&&KP[ii]=KP[ii-1]&&KP[ii]=KP[ii-2]&&FXS[ii]=FXS[ii-1]&&FXS[ii]=FXS[ii-2]&&CJJ[ii]=CJJ[ii-1]&&CJJ[ii]=CJJ[ii-2]
then KSL[i]:=SLS[ii]+SLS[ii-1]+SLS[ii-2];
end;
end;
end;
end;
end;
成交价:REF(KCJ,BARSLAST(XX)),COLORAAAAAA,LINETHICK;
成交数:REF(KSL,BARSLAST(XX)),COLORAAAAAA,LINETHICK;
开空:=XX and KKP=1 and KFX=0;平空:=XX and KKP=2 and KFX=1;
STICKLINE(开空,KCJ,KCJ,20,0),COLORFF8800,LINETHICK2;
DRAWNUMBER(开空,KCJ,KSL,0),COLORFF8800,ALIGN,PXDN10;
DRAWNUMBER(开空,KCJ,KCJ,2),COLORFF8800,ALIGN,PXUP30;
DRAWTEXT(开空,L,'开 \n空'),COLORFF8800,ALIGN5,PXUP30;
STICKLINE(平空,KCJ,KCJ,20,0),COLOREEFF,LINETHICK2;
DRAWNUMBER(平空,KCJ,KSL,0),COLOREEFF,ALIGN,PXUP30;
DRAWNUMBER(平空,KCJ,KCJ,2),COLOREEFF,ALIGN,PXDN10;
DRAWTEXT(平空,L,'平 \n空'),COLOREEFF,ALIGN5,PXUP30;
开多:=XX and KKP=1 and KFX=1;平多:=XX and KKP=2 and KFX=0;
STICKLINE(开多,KCJ,KCJ,20,0),COLOR3FFF,LINETHICK2;
DRAWNUMBER(开多,KCJ,KSL,0),COLOR3FFF,ALIGN,PXUP30;
DRAWNUMBER(开多,KCJ,KCJ,2),COLOR3FFF,ALIGN,PXDN10;
DRAWTEXT(开多,L,'开 \n多'),COLOR3FFF,ALIGN5,PXUP30;
STICKLINE(平多,KCJ,KCJ,20,0),COLORFF00,LINETHICK2;
DRAWNUMBER(平多,KCJ,KSL,0),COLORFF00,ALIGN,PXDN10;
DRAWNUMBER(平多,KCJ,KCJ,2),COLORFF00,ALIGN,PXUP30;
DRAWTEXT(平多,L,'平 \n多'),COLORFF00,ALIGN5,PXUP30;
{