以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  帮忙看下代码,怎么运行有问题的?  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=90642)

--  作者:c100010592
--  发布时间:2016/1/24 16:10:51
--  帮忙看下代码,怎么运行有问题的?
//声明参数
INPUT:ATRLEN(20,15,30,1) ,总资金(20,0,10000,10);
variable: position := 0 ;
MA4:=MA(C,4);//均线定义
MA9:=MA(C,9);
MA18:=MA(C,18);

//声明变量
NT := 1 ; //调试信息带时间戳


VARIABLE : _DEBUG = 1 ; //是否输出前台交易指令
VARIABLE : _TDEBUG = 1 ; //是否输出后台交易指令
VARIABLE : _DEBUGOUT = 0 ; //是否输出后台交易的调试信息

VARIABLE : MYENTRYPRICE =0 ; //开仓价格
VARIABLE : MYEXITPRICE =0 ; //平仓价格

VARIABLE : POSITION=0 ; //仓位状态
//0表示没有仓位,1表示持有多头, -1表示持有空头

AVGTR :=  REF(MA(TR,ATRLEN),1) ;
手数 := FLOOR(总资金*200/(AVGTR*MULTIPLIER ));//计算应开手数


//开始执行时 初始化数据
IF BARPOS=1 THEN BEGIN;
//POSITION := 0 ;

END //IF

//如果当前是没有持仓的状态
IF POSITION=0 AND H>L THEN BEGIN;

//建立多头进场条件
   开多条件:= C>MA4 and MA4>MA9 and MA9>MA18 and position=0 and 手数> 0;
//多头进场
IF 开多条件 THEN BEGIN
MYENTRYPRICE := IF(OPEN> MA4+MINDIFF ,OPEN , MA4 ) ;
BUY( _DEBUG, 手数,LIMITR,MYENTRYPRICE);
POSITION := 1 ;
N := AVGTR ;
BUYORDERTHISBAR := 1;

END //IF


//建立空头进场条件
开空条件:= C<MA4 and MA4<MA9 and MA9<MA18 and position=0 and 手数> 0 ;
//空头进场
IF 开空条件 THEN BEGIN
MYENTRYPRICE:=IF(OPEN< MA4-MINDIFF ,OPEN , MA4-MINDIFF ) ;
BUYSHORT( _DEBUG, 手数,LIMITR,MYENTRYPRICE);
POSITION := -1 ;
N := AVGTR ;
BUYORDERTHISBAR := 1;

END
END  //IF
//建立多头离场条件
平多条件1:= MA4<MA9 and HOLDING>0;
IF 平多条件1 THEN BEGIN
MYEXITPRICE := IF(OPEN< MA4-MINDIFF ,OPEN , MA4-MINDIFF ) ;
SELL( _DEBUG ,holding,LIMITR,MYEXITPRICE);
POSITION := 0 ;
TURTLEUNITS := 0 ;
END

//建立多头止损条件
平多条件2:= (LOW<MYENTRYPRICE-2*N)  ;

IF 平多条件2 AND POSITION=1 THEN BEGIN
MYEXITPRICE := IF(OPEN<MYENTRYPRICE-2*N ,OPEN ,MYENTRYPRICE-2*N ) ;
MYEXITPRICE := FLOOR(MYEXITPRICE/MINDIFF)*MINDIFF ;
SELL( _DEBUG ,holding,LIMITR,MYEXITPRICE);
POSITION := 0 ;
TURTLEUNITS := 0 ;
END


//建立空头离场条件
平空条件1:= MA4>MA9 and HOLDING<0;
IF 平多条件1 THEN BEGIN
MYEXITPRICE := IF(OPEN> MA4+MINDIFF ,OPEN , MA4+MINDIFF ) ;
SELL( _DEBUG ,holding,LIMITR,MYEXITPRICE);
POSITION := 0 ;
END

//建立多头止损条件
平空条件2:= (H>MYENTRYPRICE+2*N)  ;

IF 平空条件2 AND POSITION=1 THEN BEGIN
MYEXITPRICE := IF(OPEN>MYENTRYPRICE+2*N ,OPEN ,MYENTRYPRICE+2*N ) ; MYEXITPRICE := FLOOR(MYEXITPRICE/MINDIFF)*MINDIFF ;
SELL( _DEBUG ,holding,LIMITR,MYEXITPRICE);
POSITION := 0 ;
END
//显示账户状态
CONTINUELINE@ 资产:ASSET,LINETHICK0;
可用现金:CASH(0),LINETHICK0;
振幅:N,LINETHICK0;
POS:HOLDING,LINETHICK0;
交易次数:TOTALDAYTRADE, LINETHICK0 ;

IF _DEBUGOUT>0 THEN BEGIN

DEBUGFILE2(\'C:\\DEBUGFILE.TXT\',\'BARPOS=%.0F\' ,BARPOS,NT ) ;
DEBUGFILE2(\'C:\\DEBUGFILE.TXT\',\'N=%.2F\' ,N ,NT) ;
DEBUGFILE2(\'C:\\DEBUGFILE.TXT\',\'CLOSE=%.2F\' ,C ,NT) ;
DEBUGFILE2(\'C:\\DEBUGFILE.TXT\',\'POSITION=%.0F\' ,POSITION,NT ) ;
DEBUGFILE2(\'C:\\DEBUGFILE.TXT\',\'TURTLEUNITS=%.0F\' ,TURTLEUNITS,NT ) ;
DEBUGFILE2(\'C:\\DEBUGFILE.TXT\',\'MYENTRYPRICE=%.0F\' ,MYENTRYPRICE ,NT) ;
DEBUGFILE2(\'C:\\DEBUGFILE.TXT\',\'MYEXITPRICE=%.0F\' ,MYEXITPRICE ,NT) ;
END //IF

当前持仓:HOLDING,COLORGRAY,LINETHICK0;
当前资产:ASSET,NOAXIS,COLORGRAY;




以上是一个克罗均线的代码,但怎么运行有问题呢,运行下来是只有开仓,然后在最后时间点强制平仓,也就是不会自动平仓。

--  作者:jinzhe
--  发布时间:2016/1/25 9:41:52
--  

3个错误

1,平空语句全都写成了sell,需要改成sellshort

2,  下单价格不能成交,要在所有的平仓语句最后加上ignorechek,例如:selLshort( _DEBUG ,holding,LIMITR,MYEXITPRICE),IGNORECHECKPRICE;

3.   平空条件的position判断写错了,要写成position=-1


--  作者:c100010592
--  发布时间:2016/1/25 10:34:05
--  
第一第二条都改了,第三条,我用的是 HOLDING<0,改好后还是不行,空单不会自动平仓
--  作者:jinzhe
--  发布时间:2016/1/25 10:43:34
--  

INPUT:ATRLEN(20,15,30,1) ,总资金(20,0,10000,10);
variable: position = 0 ;
MA4:=MA(C,4);//均线定义
MA9:=MA(C,9);
MA18:=MA(C,18);


//声明变量
NT := 1 ;   //调试信息带时间戳

 


VARIABLE : _DEBUG = 1 ;   //是否输出前台交易指令
VARIABLE : _TDEBUG = 1 ;   //是否输出后台交易指令
VARIABLE : _DEBUGOUT = 0 ;   //是否输出后台交易的调试信息


VARIABLE : MYENTRYPRICE =0 ;   //开仓价格
VARIABLE : MYEXITPRICE =0 ;   //平仓价格


VARIABLE : POSITION=0 ;   //仓位状态
//0表示没有仓位,1表示持有多头, -1表示持有空头


AVGTR :=  REF(MA(TR,ATRLEN),1) ;
手数 := FLOOR(总资金*200/(AVGTR*MULTIPLIER ));//计算应开手数

 


//开始执行时 初始化数据
IF BARPOS=1 THEN BEGIN;
   //POSITION := 0 ;


END //IF


//如果当前是没有持仓的状态
IF POSITION=0 AND H>L THEN BEGIN;


   //建立多头进场条件
   开多条件:= C>MA4 and MA4>MA9 and MA9>MA18 and position=0 and 手数> 0;
   //多头进场
 IF 开多条件 THEN BEGIN
   MYENTRYPRICE := IF(OPEN> MA4+MINDIFF ,OPEN , MA4 ) ;   
   BUY( _DEBUG, 手数,LIMITR,MYENTRYPRICE);
   POSITION := 1 ;
   N := AVGTR ;
   BUYORDERTHISBAR := 1;


 END //IF

 


   //建立空头进场条件
 开空条件:= C<MA4 and MA4<MA9 and MA9<MA18 and position=0 and 手数> 0 ;
  
   //空头进场
 IF 开空条件 THEN BEGIN
   MYENTRYPRICE:=IF(OPEN< MA4-MINDIFF ,OPEN , MA4-MINDIFF ) ;   
   BUYSHORT( _DEBUG, 手数,LIMITR,MYENTRYPRICE);
   POSITION := -1 ;
   N := AVGTR ;
   BUYORDERTHISBAR := 1;


 END
  
  
END  //IF
  
   //建立多头离场条件
平多条件1:= MA4<MA9 and HOLDING>0;   
IF 平多条件1 THEN BEGIN
 MYEXITPRICE := IF(OPEN< MA4-MINDIFF ,OPEN , MA4-MINDIFF ) ;   
 SELL( _DEBUG ,holding,LIMITR,MYEXITPRICE),IGNORECHECKPRICE;
 POSITION := 0 ;
 TURTLEUNITS := 0 ;

END


   //建立多头止损条件
平多条件2:= (LOW<MYENTRYPRICE-2*N)  ;
IF 平多条件2 AND POSITION=1 THEN BEGIN
 MYEXITPRICE := IF(OPEN<MYENTRYPRICE-2*N ,OPEN ,MYENTRYPRICE-2*N ) ;   
 MYEXITPRICE := FLOOR(MYEXITPRICE/MINDIFF)*MINDIFF ;   
 SELL( _DEBUG ,holding,LIMITR,MYEXITPRICE),IGNORECHECKPRICE;
 POSITION := 0 ;
 TURTLEUNITS := 0 ;
END

 


//建立空头离场条件
平空条件1: MA4>MA9 and HOLDING<0;   
IF 平多条件1 THEN BEGIN
 MYEXITPRICE := IF(OPEN> MA4+MINDIFF ,OPEN , MA4+MINDIFF ) ;   
 SELLshort( _DEBUG ,holding,LIMITR,MYEXITPRICE),IGNORECHECKPRICE;
 POSITION := 0 ;
END


   //建立多头止损条件
平空条件2: (H>MYENTRYPRICE+2*N)  ;
IF 平空条件2 AND POSITION=-1 THEN BEGIN
 MYEXITPRICE := IF(OPEN>MYENTRYPRICE+2*N ,OPEN ,MYENTRYPRICE+2*N ) ;   
 MYEXITPRICE := FLOOR(MYEXITPRICE/MINDIFF)*MINDIFF ;   
 SELLshort( _DEBUG ,holding,LIMITR,MYEXITPRICE),IGNORECHECKPRICE;
 POSITION := 0 ;
END


--  作者:c100010592
--  发布时间:2016/1/25 11:40:11
--  
看运行明细,还是有些问题,比如以下,小时线运行,还有问题,动煤只成交了一笔,TA最后一笔也是异常,其他品种也有TA这样的情况。
时间                   名称          类型        交易价/成本价    交易量    收益          幅度%(不计平仓费用)    资产          最大回撤%
2015/01/12 15:00:00    动力煤连续    开空        472.4            16                                                           0.00
2015/12/31 19:00:00    动力煤连续    强制平仓    305.2            16        267,199.97    35.38                  467,199.97    17.76

时间                   名称       类型        交易价/成本价    交易量    收益         幅度%(不计平仓费用)    资产          最大回撤%
2015/01/09 03:30:00    PTA连续    开空        4650             23                                                          0.00
2015/01/21 15:00:00    PTA连续    平空        4716/4649        23        -7,785.51    -1.44                  192,214.50    11.95
2015/01/21 18:00:00    PTA连续    开多        4718             28                                                          0.00
2015/01/23 03:00:00    PTA连续    平多        4763/4719        28        6,061.99     0.93                   198,276.50    14.48
2015/01/26 03:00:00    PTA连续    开空        4720             21                                                          0.00
2015/02/04 14:00:00    PTA连续    平空        4792/4719        21        -7,686.01    -1.54                  190,590.50    14.48
2015/02/04 15:00:00    PTA连续    开多        4804             17                                                          0.00
2015/02/05 03:00:00    PTA连续    平多        4726/4805        17        -6,732.01    -1.64                  183,858.50    17.52
2015/02/09 02:00:00    PTA连续    开多        4780             24                                                          0.00
2015/02/09 14:00:00    PTA连续    平多        4761/4780        24        -2,424.01    -0.41                  181,434.50    19.84
2015/02/10 14:00:00    PTA连续    开空        4746             29                                                          0.00
2015/02/13 18:00:00    PTA连续    平空        4798/4745        29        -7,786.51    -1.12                  173,648.00    20.75
2015/02/13 19:00:00    PTA连续    开多        4780             29                                                          0.00
2015/02/25 14:00:00    PTA连续    平多        4800/4781        29        2,725.99     0.41                   176,374.00    22.27
2015/03/02 03:00:00    PTA连续    开多        4918             18                                                          0.00
2015/03/04 14:00:00    PTA连续    平多        5034/4919        18        10,331.99    2.35                   186,706.00    22.27
2015/03/05 03:00:00    PTA连续    开空        4964             15                                                          0.00
2015/04/08 18:00:00    PTA连续    平空        5068/4963        15        -7,890.01    -2.11                  178,816.00    22.27
2015/04/08 19:00:00    PTA连续    开多        5058             16                                                          0.00
2015/04/09 15:00:00    PTA连续    平多        4998/5059        16        -4,896.01    -1.20                  173,920.00    22.91
2015/04/10 19:00:00    PTA连续    开空        4936             17                                                          0.00
2015/04/14 02:00:00    PTA连续    平空        5028/4935        17        -7,922.01    -1.88                  165,998.00    23.88
2015/04/14 14:00:00    PTA连续    开多        5040             22                                                          0.00
2015/04/16 03:00:00    PTA连续    平多        5206/5041        22        18,127.99    3.28                   184,126.00    26.40
2015/04/16 14:00:00    PTA连续    开多        5260             17                                                          0.00
2015/04/17 03:30:00    PTA连续    平多        5272/5261        17        917.99       0.22                   185,044.00    26.40
2015/04/20 14:00:00    PTA连续    开多        5308             18                                                          0.00
2015/04/22 15:00:00    PTA连续    平多        5408/5309        18        8,891.99     1.87                   193,936.00    26.40
2015/04/23 02:00:00    PTA连续    开多        5470             18                                                          0.00
2015/04/23 19:00:00    PTA连续    平多        5454/5471        18        -1,593.01    -0.31                  192,343.00    26.40
2015/04/24 18:00:00    PTA连续    开空        5437             17                                                          0.00
2015/05/06 14:00:00    PTA连续    平空        5530/5436        17        -8,007.01    -1.72                  184,336.00    26.40
2015/05/06 15:00:00    PTA连续    开多        5580             17                                                          0.00
2015/05/07 14:00:00    PTA连续    平多        5524/5581        17        -4,862.01    -1.01                  179,474.00    26.40
2015/05/08 03:30:00    PTA连续    开空        5442             16                                                          0.00
2015/12/31 19:00:00    PTA连续    强制平仓    4462             16        78,303.99    18.00                  257,778.00    26.40



--  作者:jinzhe
--  发布时间:2016/1/25 13:24:39
--  

1.补充下数据

2.最后一笔是强制平仓的,这个没什么问题

 

 


--  作者:c100010592
--  发布时间:2016/1/25 15:03:52
--  
因为是运行小时线,最后一笔持仓时间太长,不太可能,而且看了图形,也不可能持这么长时间的仓。
--  作者:jinzhe
--  发布时间:2016/1/25 15:10:42
--  

1.中间缺数据,这个要补充5分钟数据

2.中间的行情的确是没有触发开平仓,当然这个可能性很小


--  作者:c100010592
--  发布时间:2016/1/25 20:24:01
--  
我其他几个策略,也是载小时线上运行,都回测没问题,所以可能不是数据的问题?
--  作者:jinzhe
--  发布时间:2016/1/26 9:07:39
--  
这个只能说明其他品种没缺数据对不对?并不能说明这个品种有数据对不对?
[此贴子已经被作者于2016/1/26 9:07:52编辑过]