以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  信号闪烁问题  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=76820)

--  作者:sword8586
--  发布时间:2015/3/24 12:21:09
--  信号闪烁问题

从文华转入使用金字塔图表实盘3个月。将公式按照说明转为金字塔格式,采用K线走完,确认信号下单方式,多次发现信号闪烁。主要体现在:

1、收盘后某些盘中未出现的信号在收盘后出现!

2、实盘盘中某些信号突然夹杂在最近出现的两个信号之中!

3、效果测试时采用2手下单不是1手下单的收益的两倍!

       公式采用的全部函数为:BARSLAST、SMAEMA、、MAIFELSE、CROSS、ref、typeSTDTRVALUEWHENTIMETIME0、NEWLBARSENTERBARSMINMAX、HHV、LLV、ABS、INTPARTSLOPE、SQRTAVEDEVEVERYFILTER、NOT、OPENPROFITENTERPRICE、COUNT;

      公式有许多SPK、BPK、BK、SK、BP、SP条件,如SPK1——22、BPK1-22;多个开平仓条件采用以下方法过滤(见红字)。

TBP:=(NTBP||(RISE<16&&RREF&&C>BOTTOML&&ref(c,1)<ref(BOTTOML,1))||BSPSIG)&&not(TSK1||TSPK1||TSPK2||TSPK3)&&not(TBK1||TBPK1||TBPK2||TBPK3)&&not(MAMMON2=1);//
TSP:=(NTSP)&&not(TSK1||TSPK1||TSPK2||TSPK3||(BP7)||SPK33B)&&not(TBK1||TBPK1||TBPK2||TBPK3)&&not(MAMMON1=1);//

TBK:=(TBK1);
TSK:=(TSK1);
TBPK:=(TBPK1)||(TBPK2)||(TBPK3)||(BPK9L)||(BPK11L)||(BPK6L)||(BPK14L)||(BPK16L)||(BPK19L)||(BPK39)||(BPK26L)||(BPK29L)||(BPK33L)||(BPK40)||(BTLBL<=3&&OPENPROFIT<-2000&&OPENPROFIT>-5000);//&&C>MID||TLOPEN
TSPK:=(TSPK1)||(TSPK2)||(TSPK3)||(SPK6R)||(SPK9R)||(SPK10L)||(SPK10R)||(SPK13L)||(SPK14R)||(SPK15R)||(BPK20L)||(BK1P)||(SPK19L)||(SPK23L)||(SPK44)||(TOPLAL<=3&&OPENPROFIT<-2000&&OPENPROFIT>-5000);//&&MID>C||TLCLOSE
BSKMARK:=(TBPK||TBK)&&(TSK||TSPK)&&if(RISE>DOWN,1,0);

 

//-------------------金字塔BP书写--------------------------------------------
if (TBP&&not(TSK||TSPK)) then BEGIN//
   WARNING_DISABLE:4;
   YCODE:=EXTGBDATA(\'YCODE\');   
   if YCODE=0 then begin
      if holding<0 then begin
         SELLSHORT(not(TYPE(1)=4),N88,MARKET); //平空
         i:=0;
         SENDMAIL(i=0,\'yf-zhang@qq.com\',\'平空\'+STKNAME(),\'平空\');        
      end
      if i=0 and holding=0 then begin
            EXTGBDATASET(\'Mark\',-2);
            EXTGBDATASET(\'Holding5\',0);
            EXTGBDATASET(\'PM\',3);
            i:=1;
      end     
   end        
end  
  
//-------------------金字塔SP书写--------------------------------------------
if (TSP&&not(TBK||TBPK)) then begin
    WARNING_DISABLE:4;  
    YCODE:=EXTGBDATA(\'YCODE\');  
    if YCODE=0 then begin
         if holding>0 then begin     
            SELL(not(TYPE(1)=2),N88,MARKET); //平多           
            i:=0;
            SENDMAIL(i=0,\'yf-zhang@qq.com\',\'平多\'+STKNAME(),\'平多\');               
         end
         if i=0 and holding=0 then begin
            EXTGBDATASET(\'Mark\',-1);
            EXTGBDATASET(\'Holding5\',0);
            EXTGBDATASET(\'PM\',4); 
            i:=1;       
         end   
   end       
end
          
//-------------金字塔BK书写------------------------------------------------------
if ((TBK&&not((TBPK||TBK)&&(TSK||TSPK)))||(TBK&&BSKMARK=1)) then begin//当收盘价上穿下轨且有空仓或无仓时||TBK2
      WARNING_DISABLE:4;
      YCODE:=EXTGBDATA(\'YCODE\');  
      if YCODE=0 then begin
         if holding=0 then begin
            buy(not(TYPE(1)=1),N88,market);//开多
            i:=0;
            SENDMAIL(i=0,\'yf-zhang@qq.com\',\'开多\'+STKNAME(),\'开多\');               
         end
         if i=0 and holding>0 then begin
            EXTGBDATASET(\'Mark\',1);
            EXTGBDATASET(\'Holding5\',N88);
            i:=1;
         end    
      end       
end
  
//-------------金字塔SK书写------------------------------------------------------
if ((TSK&&not((TBPK||TBK)&&(TSK||TSPK)))||(TSK&&BSKMARK=0)) then begin//当收盘价上穿下轨且有空仓或无仓时||TSK2 
      WARNING_DISABLE:4;
      YCODE:=EXTGBDATA(\'YCODE\');    
      if YCODE=0 then begin
         if holding=0 then begin     
            buyshort(not(TYPE(1)=3),N88,market);//开空
            i:=0;
            SENDMAIL(i=0,\'yf-zhang@qq.com\',\'开空\'+STKNAME(),\'开空\');               
         end  
         if i=0 and holding<0 then begin
            EXTGBDATASET(\'Mark\',2);
            EXTGBDATASET(\'Holding5\',REVERSE(N88));
            EXTGBDATASET(\'PM\',5);
            i:=1;
         end  
      end           
end   
//-------------金字塔BPK书写------------------------------------------------------
if (TBPK&&not((TBPK||TBK)&&(TSK||TSPK))||(TBPK&&BSKMARK=1)) then begin//当收盘价上穿下轨且有空仓或无仓时
      WARNING_DISABLE:4;
      YCODE:=EXTGBDATA(\'YCODE\');
      if YCODE=0 then begin
         if holding<=0 then begin
            sellshort(not(TYPE(1)=4),N88,market);//平空 第一个1代表100%成立,第二个1代表下单手数(下同)
            buy(not(TYPE(1)=1),N88,market);//开多
            i:=0; 
            SENDMAIL(i=0,\'yf-zhang@qq.com\',\'平空开多\'+STKNAME(),\'平空开多\');               
         end
         if i=0 and holding>0 then begin
            EXTGBDATASET(\'Mark\',1);
            EXTGBDATASET(\'Holding5\',N88); 
            i:=1; 
         end  
      end      
end
//-------------金字塔SPK书写------------------------------------------------------
if (TSPK&&not((TBPK||TBK)&&(TSK||TSPK))||(TSPK&&BSKMARK=0)) then begin //当收盘价下穿上轨且有多仓或无仓时
      WARNING_DISABLE:4;
      YCODE:=EXTGBDATA(\'YCODE\');
      if YCODE=0 then begin
         if holding>=0  then begin
            sell(not(TYPE(1)=2),N88,market);//平多
            buyshort(not(TYPE(1)=3),N88,market);//开空 
            i:=0;  
            SENDMAIL(i=0,\'yf-zhang@qq.com\',\'平多开空\'+STKNAME(),\'平多开空\');                        
         end
         if i=0 and holding<0 then begin
            EXTGBDATASET(\'Mark\',2);
            EXTGBDATASET(\'Holding5\',REVERSE(N88));
            i:=1;     
         end 
      end    
end
//---------------------------------------------------------------------------------
   if MAMMON1=1 then begin
      WARNING_DISABLE:4;  
      EXTGBDATASET(\'Forward\',1);
   end
   if MAMMON2=1 then begin
      WARNING_DISABLE:4;  
      EXTGBDATASET(\'Forward\',2);
   end

请问老师错误在那呀?


--  作者:jinzhe
--  发布时间:2015/3/24 13:32:38
--  

YCODE:=EXTGBDATA(\'YCODE\');   
   if YCODE=0 then begin

类似这样的

图表不要用ext来进行全局变量的控制,这些变量没有历史数据,所以导致上述现象的产生

要用variable来在图表上进行全局变量的使用


--  作者:sword8586
--  发布时间:2015/3/24 15:25:43
--  
以下是引用jinzhe在2015/3/24 13:32:38的发言:

YCODE:=EXTGBDATA(\'YCODE\');   
   if YCODE=0 then begin

类似这样的

图表不要用ext来进行全局变量的控制,这些变量没有历史数据,所以导致上述现象的产生

要用variable来在图表上进行全局变量的使用

我的公式其实没用到

YCODE:=EXTGBDATA(\'YCODE\');   
   if YCODE=0 then begin

这些主要是为移仓而书写。

我可以将完全其删除还会出现该现象吗?如下面开平仓方式:

//-------------------金字塔BP书写--------------------------------------------
if (TBP&&not(TSK||TSPK)) then BEGIN//
      if holding<0 then begin
         SELLSHORT(not(TYPE(1)=4),N88,MARKET); //平空
         i:=0;
         SENDMAIL(i=0,\'yf-zhang@qq.com\',\'平空\'+STKNAME(),\'平空\');        
      end
      if i=0 and holding=0 then begin
            i:=1;
      end          
end  
  
//-------------------金字塔SP书写--------------------------------------------
if (TSP&&not(TBK||TBPK)) then begin
         if holding>0 then begin     
            SELL(not(TYPE(1)=2),N88,MARKET); //平多           
            i:=0;
            SENDMAIL(i=0,\'yf-zhang@qq.com\',\'平多\'+STKNAME(),\'平多\');               
         end
         if i=0 and holding=0 then begin
            i:=1;       
         end          
end
          
//-------------金字塔BK书写------------------------------------------------------
if ((TBK&&not((TBPK||TBK)&&(TSK||TSPK)))||(TBK&&BSKMARK=1)) then begin//当收盘价上穿下轨且有空仓或无仓时||TBK2
         if holding=0 then begin
            buy(not(TYPE(1)=1),N88,market);//开多
            i:=0;
            SENDMAIL(i=0,\'yf-zhang@qq.com\',\'开多\'+STKNAME(),\'开多\');               
         end
         if i=0 and holding>0 then begin
            i:=1;
         end       
end
  
//-------------金字塔SK书写------------------------------------------------------
if ((TSK&&not((TBPK||TBK)&&(TSK||TSPK)))||(TSK&&BSKMARK=0)) then begin//当收盘价上穿下轨且有空仓或无仓时||TSK2 
         if holding=0 then begin     
            buyshort(not(TYPE(1)=3),N88,market);//开空
            i:=0;
            SENDMAIL(i=0,\'yf-zhang@qq.com\',\'开空\'+STKNAME(),\'开空\');               
         end  
         if i=0 and holding<0 then begin
            i:=1;
         end           
end   
//-------------金字塔BPK书写------------------------------------------------------
if (TBPK&&not((TBPK||TBK)&&(TSK||TSPK))||(TBPK&&BSKMARK=1)) then begin//当收盘价上穿下轨且有空仓或无仓时
         if holding<=0 then begin
            sellshort(not(TYPE(1)=4),N88,market);//平空 第一个1代表100%成立,第二个1代表下单手数(下同)
            buy(not(TYPE(1)=1),N88,market);//开多
            i:=0; 
            SENDMAIL(i=0,\'yf-zhang@qq.com\',\'平空开多\'+STKNAME(),\'平空开多\');               
         end
         if i=0 and holding>0 then begin
            i:=1; 
         end      
end
//-------------金字塔SPK书写------------------------------------------------------
if (TSPK&&not((TBPK||TBK)&&(TSK||TSPK))||(TSPK&&BSKMARK=0)) then begin //当收盘价下穿上轨且有多仓或无仓时
      WARNING_DISABLE:4;
         if holding>=0  then begin
            sell(not(TYPE(1)=2),N88,market);//平多
            buyshort(not(TYPE(1)=3),N88,market);//开空 
            i:=0;  
            SENDMAIL(i=0,\'yf-zhang@qq.com\',\'平多开空\'+STKNAME(),\'平多开空\');                        
         end
         if i=0 and holding<0 then begin
            i:=1;     
         end 
      end    
//---------------------------------------------------------------------------------
   if MAMMON1=1 then begin
      WARNING_DISABLE:4;  
      EXTGBDATASET(\'Forward\',1);
   end
   if MAMMON2=1 then begin
      WARNING_DISABLE:4;  
      EXTGBDATASET(\'Forward\',2);
   end

--  作者:jinzhe
--  发布时间:2015/3/24 15:27:29
--  
删掉这个之后看框架是没问题了,具体情况还是要看你的其他条件在实际运行中的结果