金字塔决策交易系统

标题: 股票图表程序化的漏单 [打印本页]

作者: 100018966    时间: 2022-8-1 10:04
标题: 股票图表程序化的漏单
我使用股票程序化(图表,3秒,走完K线模式),策略没有未来函数,没有信号闪烁问题,但是会出现漏单,看见窗口出来平仓信号,但是却没有平仓指令发出。如何查找原因?如何设置可以尽可能减少这种漏单?


作者: 技术010    时间: 2022-8-1 10:15
1、你是使用的3秒周期?还是走完K线提前3秒下单?如果策略比较复杂或者计算效率过低,信号计算出来了,但是K线已经过去了,那是有可能造成漏单的,建议先排除下计算效率的问题。
2、如果是提前3秒下单,那我们也是建议这个时间不要设置的过小,如果结束前3秒没有分笔,那是不会触发报单的,可以设置大一些。
作者: 100018966    时间: 2022-8-1 11:15
3秒周期,可能是计算效率的问题
作者: 100018966    时间: 2022-8-1 11:17
怎么尽力减少漏单?
作者: 技术010    时间: 2022-8-1 11:23
图表上一般不建议使用太小的周期的,一旦计算效率跟不上,很容易就出会出现信号漏单的现象,建议从提高机器硬件的计算性能、使用逐K+仅刷最后一根模式,减少图表上的K线使用量,优化代码、选择其他更合适的周期等方面来改进了。
作者: 100018966    时间: 2022-8-1 11:28
INPUT:zj(20000,10000,10000000,10000);//
GLOBALVARIABLE:SS:=100,CB:=0,CCCB:=1,DCB:=0,MAXBF:=0;//

SS:=MAX(ROUND(zj*0.001/c)*100,100);
XSCB:CCCB;
显示SS:=SS;

GLOBALVARIABLE:TZKC:=0,回封:=0,P2:=0,拉:=0;//
XS拉:拉;
GD:=HHV(REF(H,1),TENTERBARS);
单利:=(GD-TENTERPRICE)/TENTERPRICE*100;
IF TBUYHOLDINGEX('','',2)>0  AND 单利>25 THEN
BEGIN
        TZKC:=1;
        END
IF TBUYHOLDINGEX('','',2)=0 AND (TIME=150000 OR TIME=093000) THEN
BEGIN
    TZKC:=0;
    END
MA21:=MA(C,21);  
MA144:=MA(C,144);
显示TZKC:=TZKC;       

STSH:=TOTLOWER('STSH' );
STSZ:=TOTLOWER('STSZ' );
跌停数:=TOTLOWER('SH' )+TOTLOWER('SZ' )-STSH-STSZ;
GLOBALVARIABLE:1dts:=0;
1跌停数:=REF(跌停数,1);
if time=093000 or time=150000 then
BEGIN
1dts:=0;
end
if time>093003 and time<145900 then
BEGIN
1dts:=1跌停数;
end
盘面正常:1dts<=8;
显示1dts:=1dts;

昨高:=CALLSTOCK(STKLABEL,VTHIGH,6,-1);


昨收:=ROUNDS(CALLSTOCK(STKLABEL,VTCLOSE,6,-1),2);
昨2收:=ROUNDS(CALLSTOCK(STKLABEL,VTCLOSE,6,-2),2);
昨3收:=ROUNDS(CALLSTOCK(STKLABEL,VTCLOSE,6,-3),2);
昨4收:=ROUNDS(CALLSTOCK(STKLABEL,VTCLOSE,6,-4),2);
昨5收:=ROUNDS(CALLSTOCK(STKLABEL,VTCLOSE,6,-5),2);
基价:MIN(MIN(MIN(昨收,昨2收),昨3收),昨4收);
稳定:昨收<基价*1.13;
昨N涨停:ROUNDS(昨收,2)<ROUNDS(昨2收*1.1,2);
首板保证:稳定 AND 昨N涨停;


昨未封:=ROUNDS(昨收,2)<ROUNDS(昨2收*1.1,2) and TENTERPRICE>ROUNDS(昨收,2);
三板:ROUNDS(昨收,2)>=ROUNDS(昨2收*1.1,2) AND ROUNDS(昨2收,2)>=ROUNDS(昨3收*1.1,2) AND ROUNDS(昨3收,2)>=ROUNDS(昨4收*1.1,2) AND ROUNDS(昨4收,2)>=ROUNDS(昨5收*1.1,2);
N3:NOT(三板);
今开:=CALLSTOCK(STKLABEL,VTOPEN,6,0);

昨额:=CALLSTOCK(STKLABEL,VTAMOUNT,6,-1);

JG:=hhv(C,TODAYBAR);
JG1:=hhv(REF(h,1),TODAYBAR);
JD:=LLV(L,TODAYBAR);
MATD:=MA(C,TODAYBAR);
JJ:SUM(AMOUNT,TODAYBAR)/SUM(VOL,TODAYBAR)/100;
LLV60:=LLV(C,60);
IF TODAYBAR<60 THEN
BEGIN
长波起:=昨收;
长波:=(C-长波起>长波起*0.0618) ;

END
LLVT:LLV(C,TODAYBAR);
IF TODAYBAR>=3 AND TODAYBAR<60 THEN
BEGIN
长波起:=LLVT;

D长波:=(C-长波起>长波起*0.0618) ;
END

IF TODAYBAR=60 THEN CB:=0;

IF TODAYBAR>=60 THEN
BEGIN
长波起:=LLV60;
长波:=(C-长波起>长波起*0.038) ;
D长波:=(C-长波起>长波起*0.0618) ;
END
XS长波起:长波起;
XS长波:长波;
IF 长波=1 THEN CB:=1;
IF D长波=1 THEN DCB:=1;
IF TIME=093000 OR TIME=150000 THEN
BEGIN
CB:=0;
DCB:=0;
MAXBF:=0;
END
if JG-C>MAXBF*0.9 THEN
BEGIN
        CB:=0;
        DCB:=0;
        END
显示CB:CB;
显示DCB:DCB;
波幅:(C-长波起)/长波起*100;
IF 波幅>MAXBF THEN MAXBF:=波幅;
REFC1:REF(C,1);
REFC2:=REF(C,2);
       

GD:=HHV(REF(H,1),TENTERBARS);


跳空:(今开-昨收>=昨收*0.02);
今涨停:=ROUNDS(ROUNDS(昨收,2)*1.1 ,2);
今成交:=SUM(AMOUNT,TODAYBAR);
IF TIME<093300 THEN 成交额条件:= 今成交>=昨额*0.20;
IF TIME>=093300 AND TIME<093800 THEN 成交额条件:= 今成交>=昨额*0.3;
IF TIME>=093800 AND TIME<100000 THEN 成交额条件:= 今成交>=昨额*0.50;
IF TIME>=100000 THEN 成交额条件:= 今成交>=昨额*0.80;
量大:成交额条件 ;

打板涨幅:=ROUNDS(C,2)>=rounds(今涨停*0.997,2)-0.01;
再打板涨幅:COUNT(ROUNDS(C,2)>=rounds(今涨停,2),5)=5;
封板:=COUNT(ROUNDS(C,2)>=rounds(今涨停,2),3)=3;
日平:TTOTALDAYTRADE>0;
TT:TEXITBARS;
再打:TEXITBARS>=377 OR P2=1;
不追:(C-CCCB)/CCCB*100>28;
今低:=LLV(C,TODAYBAR);
IF C-今低>=今低*0.05 THEN 拉:=1;
IF TODAYBAR=1 THEN 拉:=0;

IF ROUNDS(C,2)<=ROUNDS(今涨停,2)-0.01 THEN  回封:=0;

一字:ROUNDS(今开,2)=ROUNDS(今涨停,2);
上冲:=C>今开;
//CONC:=ROUNDS(REFC2,2)<=ROUNDS((今涨停-0.01),2);
未封:ROUNDS(C,2)<ROUNDS(今涨停,2);
刚封:COUNT(未封,5)>=1 AND ROUNDS(C,2)>=ROUNDS(HHV(C,5),2);
3ZT:COUNT(ROUNDS(C,2)>=ROUNDS(今涨停,2),3)=3;
X:MIN(5,TODAYBAR);
1WF:COUNT(未封,X)>=1 ;
HHV5:HHV(C,5);
IF TIME>093010 THEN
BEGIN
IF 1WF AND 3ZT THEN 回封:=1;

END
XS回封:回封;
再刚封:COUNT(未封,7)>=1 AND ROUNDS(C,2)>=ROUNDS(HHV(C,7),2);
KB1:量大 AND 跳空  AND 打板涨幅   AND 一字=0  AND 盘面正常 AND CB=1 AND 上冲 AND TIME<=104800  AND TZKC=0 AND 日平=0 AND 刚封 AND N3 AND ROUNDS(C,2)>=ROUNDS(HHV5,2) AND 首板保证;
KB3:量大  AND 打板涨幅   AND 一字=0  AND 盘面正常 AND DCB=1 AND 上冲 AND (TIME<141500) AND TZKC=0 AND 日平=0 AND 刚封 and N3 AND 首板保证;;
KB2:一字=1 AND TIME>=093010 AND TIME<=145600    AND 回封=1   AND TZKC=0 and 封板 AND N3 AND TODAYBAR>=5 AND 首板保证;;









今高:=HHV(C,TODAYBAR);

不高开:=今开<昨收*1.02;
弱:=COUNT(rounds(C,2)<ROUNDS(JJ,2)-0.01,55)=55;
很弱:COUNT(rounds(C,2)<ROUNDS(JJ,2),233)=233;
多赢DP1:不高开 AND 弱;



开多B:TBUY((        (KB1 OR KB2 OR KB3) AND TBUYHOLDINGEX('','',2)=0 AND TISPRVREMAIN(1)=0  ) ,SS,MKT);


平多1:TSELL(多赢DP1 AND  TBUYHOLDINGEX('','',2)>0    ,TBUYHOLDINGEX('','',2),MKT);

我把这个打板策略(股票,3秒运行周期,走完K线下单)修改为上面的后台策略,今天实盘监控,图表上有信号的,这个后台策略并没有信号(无下单,检查日志也没有信号出来)
请教:1、这个策略有什么办法提高效率?
2、后台程序化策略的写发有什么问题?
作者: 技术010    时间: 2022-8-1 11:43
1、你的策略中使用到了高频扩展统计和引用,这些都是比较影响效率的,你可以使用序列模式,这种模式的计算效率是最高的了。
2、逻辑上没看出有问题,使用后台程序化,学会使用debugfile调试函数来输出调试往往比会写后台代码更重要,你可以调试你的代码,来跟踪问题的。
作者: 100018966    时间: 2022-8-1 11:47
逻辑没问题,为什么后台实盘运行没有信号出来?
作者: 100018966    时间: 2022-8-1 11:48
你们可以帮我调试看看吗?
作者: 技术010    时间: 2022-8-1 11:54
逻辑没有问题,只是从代码上没有看出明细的语法错误啊,你的代码中没有任何注释,我们也没法看出来你的代码含义啊。具体代码是否和你预期的一样,那只能通过debugfile来输出调试了,我们也只能提供debugfile的用法供用户参考了。也可以使用我们6.30新版的调试功能。
https://www.weistock.com/docs/HE ... 7%9F%E8%B8%AA.html#后台变量跟踪





欢迎光临 金字塔决策交易系统 (https://www.weistock.com/bbs/) Powered by Discuz! X3.4