-- 作者:默丘里
-- 发布时间:2012/2/13 15:05:23
-- [原创]希望大家能把这个交易记录复盘公式优化。
{交易记录} //***** 读文本 ***** 市场:=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; {
|