//声明参数
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;
以上是一个克罗均线的代码,但怎么运行有问题呢,运行下来是只有开仓,然后在最后时间点强制平仓,也就是不会自动平仓。
3个错误
1,平空语句全都写成了sell,需要改成sellshort
2, 下单价格不能成交,要在所有的平仓语句最后加上ignorechek,例如:selLshort( _DEBUG ,holding,LIMITR,MYEXITPRICE),IGNORECHECKPRICE;
3. 平空条件的position判断写错了,要写成position=-1
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
看运行明细,还是有些问题,比如以下,小时线运行,还有问题,动煤只成交了一笔,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