以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  后台版本下单问题  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=171811)

--  作者:临界天地
--  发布时间:2019/8/27 9:42:47
--  后台版本下单问题

 下单出现漏单或不执行的情况,数据补充无误,程序无误(图表改后台,图表界面执行无误),应该是下单开平仓模块书写问题

 

if   KD1  and    tholding=0   then  begin
    tbuy(1 ,hand,mkt),ORDERQUEUE; 
      tholding=1 ; 
    end
    
if  PD1  and    tholding=1   and  pd1<>kd1  then begin
   tSell( 1,hand,mkt),ORDERQUEUE;   
     tholding=0   ;

    end

 

 

 

 

 

  if KK1    and    tholding=0  and    KK1<>PK1   then begin
    tBUYSHORT(1 ,hand,mkt),ORDERQUEUE;  
      tholding=1   ;
    end
      
      
    if PK1 and    tholding=1    then begin
    tSELLSHORT(1 ,hand,mkt) ,ORDERQUEUE; 
      tholding=0  ;
    end  


--  作者:FireScript
--  发布时间:2019/8/27 10:06:19
--  
说漏洞肯定要有一个明确的判断依据才行。 后台漏单这种,你是拿图表信号来确定它漏单的,还是怎么判断漏洞的。后台我们建议进行一些必要的调试输出,就是把开平仓条件的情况直接输出输出。参考debugfile函数。
[此贴子已经被作者于2019/8/27 10:08:55编辑过]

--  作者:FireScript
--  发布时间:2019/8/27 10:11:20
--  
 不过你这里代码书写上是有点问题。
 tholding=1 ;
类似这种都是无效的。这函数是直接读取持仓情况的。你赋值肯定无效的。
另外如果要判断持仓什么的,建议用这2个函数:
TBUYHOLDINGEX
TSELLHOLDINGEX
 


[此贴子已经被作者于2019/8/27 10:11:58编辑过]

--  作者:临界天地
--  发布时间:2019/8/27 10:23:31
--  

用申请全局变量的方式可以么  比如改成这样

 

globalvariable:a1=0;

globalvariable:a2=0;

 

if   KD1  and    a1=0   then  begin
    tbuy(1 ,hand,mkt),ORDERQUEUE; 
      a1=1 ; 
    end
    
if  PD1  and   a1=1   and  pd1<>kd1  then begin
   tSell( 1,hand,mkt),ORDERQUEUE;   
    a1=0   ;

    end

 

 

 

 

 

  if KK1    and    a2=0  and    KK1<>PK1   then begin
    tBUYSHORT(1 ,hand,mkt),ORDERQUEUE;  
     a2=1   ;
    end
      
      
    if PK1 and   a2=1    then begin
    tSELLSHORT(1 ,hand,mkt) ,ORDERQUEUE; 
     a2=0  ;
    end  


--  作者:FireScript
--  发布时间:2019/8/27 10:31:54
--  
  a1=1 ; 改成 a1:=1;

其他几个地方也是。
你这里的思路我大致能看出来。用全局变量是可以的。不过
ORDERQUEUE 建议测试时候先不用这个,等代码逻辑处理好了再加上去进一步调试,以免ORDERQUEUE触发的一些特殊情况影响下单

--  作者:临界天地
--  发布时间:2019/8/27 18:00:49
--  

globalvariable:a1:=0;

globalvariable:a2:=0;

 

if   KD1  and    a1:=0   then  begin
    tbuy(1 ,hand,mkt),ORDERQUEUE; 

      a1:=1 ; 
    end
    
if  PD1  and   a1:=1   and  pd1<>kd1  then begin
   tSell( 1,hand,mkt),ORDERQUEUE;   
    a1:=0   ;

    end

 

 

对否?


--  作者:临界天地
--  发布时间:2019/8/27 18:04:41
--  

if   KD1   and    a1:=0    and  tHOLDING=0   then  begin
    tbuy(1 ,hand,mkt,close),ORDERQUEUE;
     a1:=hand ;
     end
   
if  PD1  and    a1>0  and  pd1<>kd1  then begin
   tSell( 1,a1,mkt),ORDERQUEUE;  
    a1:=0   ;
    end

 

 

用的多品种后台,哪种方法是对的


--  作者:FireScript
--  发布时间:2019/8/28 8:57:37
--  
 

if   KD1  and    a1=0   then  begin
    tbuy(1 ,hand,mkt),ORDERQUEUE; 

      a1:=1 ; 
    end
    
if  PD1  and   a1=1   and  pd1<>kd1  then begin
   tSell( 1,hand,mkt),ORDERQUEUE;   
    a1:=0   ;

    end

 

改成上面这样。



a1=1这个是等于的判断  a1:=1 这个是赋值语句。


--  作者:临界天地
--  发布时间:2019/9/2 10:11:08
--  

图表程序改后台,模拟中出现问题:图表和后台的成交信号对不上。程序底稿模块一样,都是close走完k线后发单,

 

图表的开平模块是

 

if   KD    and   HOLDING=0      then  begin
    buy(1 ,hand,MARKETR),ORDERQUEUE;
 
    end
   
if  PD      and  pd<>kd  then begin
   Sell( 1,hand,MARKETR),ORDERQUEUE;  
  
    end 
   

   if KK    and   HOLDING=0    and    KK<>PK  then begin
    BUYSHORT(1 ,hand,MARKETR),ORDERQUEUE; 
  
    end
     
     
    if PK    then begin
    SELLSHORT(1 ,hand,MARKETR) ,ORDERQUEUE;
 
    end  

 

 

改成后台之后是

 

GLOBALVARIABLE:a1=0;
GLOBALVARIABLE:a2=0;


hand:=6000000/CLOSE/MULTIPLIER;

if   KD1  and    a1=0   then  begin
    tbuy(1 ,hand,mkt),ORDERQUEUE; 
      a1:=1 ; 
    end
    
if  PD1  and    a1=1   and  pd1<>kd1  then begin
   tSell( 1,hand,mkt),ORDERQUEUE;   
     a1:=0   ; 
    end 
       if KK1    and    a2=0  and    KK1<>PK1   then begin
    tBUYSHORT(1 ,hand,mkt),ORDERQUEUE;  
     a2:=1   ;
    end
      
      
    if PK1 and    a2=1    then begin
    tSELLSHORT(1 ,hand,mkt) ,ORDERQUEUE; 
      a2:=0  ;
    end  


 图表程序一直没有问题,但是目前改后台后一直对不上(数据补充也是正确的)  ,中间有暂停预警后启动(是否会影响平仓和持仓记录),还是后台模块的书写有问题?   

 


--  作者:FireScript
--  发布时间:2019/9/2 11:27:30
--  
 并不是等效的。图表是有历史信号的,而后台是没有的。而历史信号对图表下单是有影响的。 如果说当前运行程序化时候 图表程序化历史仓位刚好是0,这种巧合情况下你上面代码倒是差异不大。  但是如果图表历史信号导致历史有一个多头或者空头的虚拟持仓,那完全就是不一样的情况了。  只要涉嫌到仓位对信号有影响的,图表和后台差异就会体现出来。后台和图表 你至多只能对比不涉及仓位的信号。比如说金叉死叉信号,或者其他什么纯粹的指标计算,这些倒是能对比下,可是下单收到仓位影响的,其实是没发对比的。