以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  [求助]后台,每次突破都开仓。HOLDING一直等于0?  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=7762)

--  作者:伍星亮
--  发布时间:2011/8/29 16:08:07
--  [求助]后台,每次突破都开仓。HOLDING一直等于0?

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就重新变成零呢?

 

 


  


--  作者:王锋
--  发布时间:2011/8/29 17:37:21
--  
问题正在解决,根据难易程度不同,需要些时间,请耐心等待
--  作者:阿火
--  发布时间:2011/8/30 8:01:02
--  

myholding = holding

然后又在下面引用myholding 和直接使用 holding 这不一样

 

TENTERPRICE和tenterbars的变化会影响myholding的变化,致使最后一个周期时myholding=0

 

逐K线计算模式的一个特点是 前面的信号会影响后面的信号

[此贴子已经被作者于2011-8-30 8:29:25编辑过]

--  作者:伍星亮
--  发布时间:2011/8/30 9:44:54
--  

那个MYHOLDING是因为之前写MYHOLDING=THOLDING.所以统一改而已。哦,这样的话,我想到用全局变量来判断是否开了仓,代替HOLDING的做用。老师觉得可行嘛?


--  作者:伍星亮
--  发布时间:2011/8/30 9:45:43
--  
好。我对你们有信心
--  作者:fly
--  发布时间:2011/8/30 14:04:48
--  
后台,可用EXTGBDATASET定义的全局变量来判断是否开仓