以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  [原创]希望大家能把这个交易记录复盘公式优化。  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=10102)

--  作者:默丘里
--  发布时间: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;
{


--  作者:fly
--  发布时间:2012/2/13 16:09:24
--  
这是哪个软件用的公式?
--  作者:默丘里
--  发布时间:2012/2/15 10:59:08
--  
飞狐上用的。