INPUT:FIXLOT(1,1,10,1),
DON@(61,1,100,10),
AMA@(6,1,50,5),
ATR@(20,10,55,10),
ATRSL(10,5,40,5),
RISK(40000,1,1000000,1),
ATRPS(20,0,20,5);
//Donchain
UP :HHV(HIGH,DON@);
DOWN :LLV(LOW,DON@);
//AMA
DIR:=ABS(CLOSE-REF(CLOSE,AMA@));
VIR:=SUM(ABS(CLOSE-REF(CLOSE,1)),AMA@);
ER:=DIR/VIR; CS:=ER*(2/3-2/31)+2/31; CQ:=CS*CS;
AMA:=DMA(CLOSE,CQ);
//AMA_TTS
//ATR
ATR :=MA(TR,ATR@);
//止盈值
TP:REF(AMA,1)-REF(ATR,1)*ATRPS*0.1;
TM:REF(AMA,1)+REF(ATR,1)*ATRPS*0.1;
//LOTS
//LOT:=ROUND(RISK/(REF(ATR,1)*0.1*ATRSL*300));
//MAXLOT:=FLOOR(cash(0)*0.8/(H*0.12*300));
//MINLOT:=1;
//LOTS:=IFELSE(BETWEEN(LOT,MAXLOT,MINLOT),LOT,IFELSE(LOT>MAXLOT,MAXLOT,MINLOT));
LOTS:=FIXLOT;
//止损值
STOP_LOSS:=ATRSL*0.1*REF(ATR,TENTERBARS+1);
//最大账面盈利
//LUP:=REF(UP,TENTERBARS+1);
//MONEYL:=UP-LUP;
//SDOWN:=REF(DOWN,TENTERBARS+1);
//MONEYS:=SDOWN-DOWN;
//多头止损,平仓,开仓
LSL:=TENTERPRICE-STOP_LOSS;
LTP:=L<=TP;
LO :=H>=REF(UP,1);
LONG:=REF(UP,1);
//空头止损,平仓,开仓
SSL:=TENTERPRICE+STOP_LOSS;
STM:=H>=TM;
SO :=L<=REF(DOWN,1);
SHORT:=REF(DOWN,1);
// 仓位
MYHOLDING:=HOLDING;
//调试输出
KD:=MYHOLDING=0 AND LO>0;
KK:=MYHOLDING=0 AND SO>0;
ZSD:=MYHOLDING>0 AND C<=LSL;
ZSK:=MYHOLDING<0 AND C>=SSL;
ZYD:=MYHOLDING>0 AND LTP>0;
ZYK:=MYHOLDING<0 AND STM>0;
DEBUGFILE('E:\编程学习\金字塔\模型\NTTS后台调试\TEST.TXT','开多=%.0f',KD);
DEBUGFILE('E:\编程学习\金字塔\模型\NTTS后台调试\TEST.TXT','开空=%.0f',KK);
DEBUGFILE('E:\编程学习\金字塔\模型\NTTS后台调试\TEST.TXT','止损多=%.0f',ZSD);
DEBUGFILE('E:\编程学习\金字塔\模型\NTTS后台调试\TEST.TXT','止损空=%.0f',ZSK);
DEBUGFILE('E:\编程学习\金字塔\模型\NTTS后台调试\TEST.TXT','止盈多=%.0f',ZYD);
DEBUGFILE('E:\编程学习\金字塔\模型\NTTS后台调试\TEST.TXT','止盈空=%.0f',ZYK);
//IF VALID(REF(ATR,1))=1 && VALID(REF(AMA,1))=1 THEN BEGIN
//多头平仓
IF MYHOLDING>0 THEN
BEGIN IF LTP>0 THEN
BEGIN
SELL(1,MYHOLDING,LIMITR,CLOSE);
TSELL(1,LOTS,MKT,0,0,'800166'); //ELSE SELL(LDR>0,HOLDING,STOPR,LDRDEAL);(保证这是止盈)
END
IF L<=LSL THEN
BEGIN
SELL(1,MYHOLDING,LIMITR,CLOSE);
TSELL(1,LOTS,MKT,0,0,'800166');
END
END
//空头平仓
IF MYHOLDING<0 THEN
BEGIN IF STM>0 THEN
BEGIN
SELLSHORT(1,MYHOLDING,LIMITR,CLOSE);//发信号给HOLDING
TSELLSHORT(1,MYHOLDING,MKT,0,0,'800166'); //ELSE SELLSHORT(SDR>0,HOLDING,STOPR,SDRDEAL);
END
IF H>=SSL THEN
BEGIN
SELLSHORT(1,MYHOLDING,LIMITR,CLOSE);//发信号给HOLDING
TSELLSHORT(1,MYHOLDING,MKT,0,0,'800166');
END
END
//开仓
IF MYHOLDING=0 THEN
BEGIN
IF LO>0 THEN
BEGIN
BUY(1,LOTS,LIMITR,CLOSE);//发信号给HOLDING
TBUY(1,LOTS,MKT,0,0,'800166');
END
IF SO>0 THEN
BEGIN
BUYSHORT(1,LOTS,LIMITR,CLOSE);//发信号给HOLDING
TBUYSHORT(1,LOTS,MKT,0,0,'800166');
END
END
//END
由于多账户以及使用多系统关系。用THOLDING暂无法写条件,故暂用系统移植的方法写。
但问题是,今天测试,每次向下突破都开仓,这样说,是不是HOLDING在后台逐周期时,过了一支K线就HOLDING就重新变成零呢?
myholding = holding
然后又在下面引用myholding 和直接使用 holding 这不一样
TENTERPRICE和tenterbars的变化会影响myholding的变化,致使最后一个周期时myholding=0
逐K线计算模式的一个特点是 前面的信号会影响后面的信号
那个MYHOLDING是因为之前写MYHOLDING=THOLDING.所以统一改而已。哦,这样的话,我想到用全局变量来判断是否开了仓,代替HOLDING的做用。老师觉得可行嘛?