以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  高手帮忙调试一下程序  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=7427)

--  作者:hehhh0327
--  发布时间:2011/8/4 11:10:37
--  高手帮忙调试一下程序

INPUT:LOTS(1,1,50,1);
long1:=REF(CLOSE>OPEN,1);
long2:=REF(CLOSE<OPEN,1);
long3:=CLOSE>=TENTERPRICE+5*MINDIFF;
//多头开仓
IF long1 THEN
BEGIN
MYPRICE:=OPEN;
TBUY(HOLDING=0,LOTS,LIMITR,MYPRICE)
END

//空头开仓
IF long2 THEN
BEGIN
MYPRICE:=OPEN;
TBUYSHORT(HOLDING=0,LOTS,LIMITR,MYPRICE)
END

//平仓以及信号延迟确认
SELL1:=false;
IF ISLASTBAR THEN
BEGIN
IF long3 THEN
BEGIN
//将当前信号周期置全局变量数据库
//数据名字前加信号周期,标记周期位置
CRTEMP:=\'TEMP1\'&NUMTOSTR( BARPOS, 0);
 //读取原有变量的时间,判断是否到延时时间
 SELLTIME1:=EXTGBDATA(CRTEMP);
 SELLTIME2:=TIMETOT0(CURRENTTIME);
 DEBUGOUT(\'D1 %.0f\',SELLTIME1);
 IF SELLTIME1 > 1 THEN //第一次信号的原数据库读取会得到0值
 BEGIN
 DEBUGOUT(\'D2 %.0f\',SELLTIME2 - SELLTIME1);
 IF SELLTIME2 - SELLTIME1 > 1 THEN
 BEGIN
 //大于15秒的延迟,表示信号已经得到确认
 SELL1:=TRUE;
 END
 END
 ELSE
 BEGIN
 //第一次信号位置记录
 EXTGBDATASET(CRTEMP,TIMETOT0(CURRENTTIME));
 END
 END
ELSE
BEGIN
//否则表示信号中间消失了
CRTEMP:=\'TEMP1\'&NUMTOSTR(BARPOS,0);
EXTGBDATASET(CRTEMP,0);
END
END
TSELL(SELL1&&HOLDING>0,0,MKT);
TSELLSHORT(SELL1&&HOLDING<0,0,MKT);

//15秒到时即平仓
IF TENTERBARS()=1 THEN
TSELL(HOLDING>0,0,MKT);
TSELLSHORT(HOLDING<0,0,MKT);

//收盘平仓
IF TIME=151000 THEN
BEGIN
SELL(HOLDING>0,0,LIMITR,OPEN);
SELLSHORT(HOLDING<0,0,LIMITR,OPEN);
END


--  作者:fly
--  发布时间:2011/8/4 11:29:14
--  

后台,不是BUY变成TBUY就可以的.

也不是一两句话能说清楚的.

请您仔细参考

http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=332

该帖子的及帖子链接的相关内容

 

推荐您,循序渐进,一步一步来


--  作者:hehhh0327
--  发布时间:2011/8/4 12:38:08
--  
这个程序的思想很简单,能不能和您单独联系帮我调试一下
--  作者:hehhh0327
--  发布时间:2011/8/4 12:38:56
--  
这个程序的思想很简单,能不能和您单独联系帮我调试一下
--  作者:fly
--  发布时间:2011/8/4 14:07:02
--  

已经在IF08合约1分钟上测试过(K线走完),运行良好

 

//K线走完

 

long:=REF(CLOSE>OPEN,1);
short:=REF(CLOSE<OPEN,1);


//多头开仓
IF long and tHOLDING=0 THEN
BEGIN
TBUY(1,1,LMT,c+2*mindiff);
END

//空头开仓
IF short and tHOLDING=0 THEN
BEGIN
TBUYSHORT(1,1,LMT,c-2*mindiff);
END

 

SELL1:=FALSE;
SELL2:=FALSE;

 

IF ISLASTBAR and tholding>0 and tenterbars>0 THEN
 BEGIN
  IF CLOSE>=TENTERPRICE+5*MINDIFF THEN
   BEGIN
    //将当前信号周期置全局变量数据库
    //数据名字前加信号周期,标记周期位置
    CRTEMP1:=\'TEMP1\'&NUMTOSTR(BARPOS, 0);
    
    //读取原有变量的时间,判断是否到延时时间
    BUYTIME1:=EXTGBDATA(\'CRTEMP1\');
    BUYTIME2:=TIMETOT0(CURRENTTIME);
    
    IF BUYTIME1 > 1 THEN //第一次信号的原数据库读取会得到0值
     BEGIN
      IF BUYTIME2 - BUYTIME1 > 15 THEN
       BEGIN
        //大于15秒的延迟,表示信号已经得到确认
        SELL1:=TRUE;
       END
     END
    ELSE
     BEGIN
      //第一次信号位置记录
      EXTGBDATASET(\'CRTEMP1\',TIMETOT0(CURRENTTIME));
     END
   END
  ELSE
   BEGIN
    //否则表示信号中间消失了
    CRTEMP1:=\'TEMP1\'&NUMTOSTR(BARPOS, 0);
    EXTGBDATASET(\'CRTEMP1\',0);
   END
 END

 

IF ISLASTBAR and tholding<0 and tenterbars>0 THEN
 BEGIN
  IF CLOSE<TENTERPRICE-5*MINDIFF THEN
   BEGIN
    //将当前信号周期置全局变量数据库
    //数据名字前加信号周期,标记周期位置
    CRTEMP2:=\'TEMP1\'&NUMTOSTR(BARPOS, 0);
    
    //读取原有变量的时间,判断是否到延时时间
    BUYTIME1:=EXTGBDATA(\'CRTEMP2\');
    BUYTIME2:=TIMETOT0(CURRENTTIME);
    
    IF BUYTIME1 > 1 THEN //第一次信号的原数据库读取会得到0值
     BEGIN
      IF BUYTIME2 - BUYTIME1 > 15 THEN
       BEGIN
        //大于15秒的延迟,表示信号已经得到确认
        SELL2:=TRUE;
       END
     END
    ELSE
     BEGIN
      //第一次信号位置记录
      EXTGBDATASET(\'CRTEMP2\',TIMETOT0(CURRENTTIME));
     END
   END
  ELSE
   BEGIN
    //否则表示信号中间消失了
    CRTEMP2:=\'TEMP1\'&NUMTOSTR(BARPOS, 0);
    EXTGBDATASET(\'CRTEMP2\',0);
   END
 END
 
TSELL(SELL1,1,MKT);
TSELLSHORT(SELL2,1,MKT);