以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  后台轮询方式出现多空单互锁  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=62213)

--  作者:滚雪球
--  发布时间:2014/3/2 18:22:38
--  后台轮询方式出现多空单互锁
我的模型使用1秒钟轮询一次在后台运行,有时会出现既有多仓又有空仓的情况,而代码中已经通过THOLDING进行控制了,不知道那里出了问题。

开平仓的代码如下:

 //多头平仓 
IF THOLDING>0 THEN BEGIN 
  平多A:TSELL(平多1,THOLDING,MKT);
  平多B:TSELL(平多2,THOLDING,MKT);          
END 

 //空头平仓
IF THOLDING<0 THEN BEGIN 
 平空A:TSELLSHORT(平空1,THOLDING,MKT); 
 平空B:TSELLSHORT(平空2,THOLDING,MKT);           
END

//开仓
IF 交易时间 AND THOLDING=0 THEN BEGIN 
 IF  THOLDING=0 THEN BEGIN 
     开多A:TBUY(开多2,手数,MKT);
 END 
 IF  THOLDING=0 THEN BEGIN 
     开空A:TBUYSHORT(开空2,手数,MKT);  
 END
 
 IF  THOLDING=0 THEN BEGIN 
     开多B:TBUY(开多1,手数,MKT);
 END
 IF  THOLDING=0 THEN BEGIN 
     开空B:TBUYSHORT(开空1,手数,MKT);
 END
END 


--  作者:jinzhe
--  发布时间:2014/3/3 9:34:42
--  
如果需要判断多空仓,那么使用具体的持仓判断函数:tbuyholding和tsellholding
--  作者:滚雪球
--  发布时间:2014/3/6 19:48:43
--  
按照你说的我改成了tbuyholding和tsellholding,但是多空互锁的情况仍然存在,难道需要加入什么错误处理的代码吗?

代码如下
IF TBUYHOLDING(1)>0 THEN BEGIN 
 //多头平仓 
  IF TBUYHOLDING(1)>0 THEN
  平多A:TSELL(平多1,TBUYHOLDING(1),MKT);
  IF TBUYHOLDING(1)>0 THEN 
  平多B:TSELL(平多2,TBUYHOLDING(1),MKT);

 //多头止损    
 IF LOST>=MaxLost AND TBUYHOLDING(1)>0 THEN
     止损平多:TSELL(1,TBUYHOLDING(1),MKT);        
 //多头收盘平仓
 IF TIME>=151400 AND TBUYHOLDING(1)>0 THEN 
     收盘平多:TSELL(1,TBUYHOLDING(1),MKT);               
END 



IF TSELLHOLDING(1)>0 THEN BEGIN 
 
 //空头平仓
 IF  TSELLHOLDING(1)>0 THEN  
 平空A:TSELLSHORT(平空1,TSELLHOLDING(1),MKT);
 IF  TSELLHOLDING(1)>0 THEN   
 平空B:TSELLSHORT(平空2,TSELLHOLDING(1),MKT);

  //空头止损    
 IF LOST>=MaxLost AND TSELLHOLDING(1)>0 THEN
     止损平空:TSELLSHORT(1,TSELLHOLDING(1),MKT);            
  //空头收盘平仓 
 IF TIME>=151400 AND TSELLHOLDING(1)>0 THEN 
     收盘平空:TSELLSHORT(1,TSELLHOLDING(1),MKT);                 
END

IF 交易时间 AND THOLDING=0 THEN BEGIN
 
 IF  THOLDING=0 THEN  
     开多B:TBUY(开多2,手数,MKT); 
 IF  THOLDING=0 THEN  
     开空B:TBUYSHORT(开空2,手数,MKT);  
 IF  THOLDING=0 THEN  
     开多A:TBUY(开多1,手数,MKT);
 IF  THOLDING=0 THEN  
     开空A:TBUYSHORT(开空1,手数,MKT);
END 




--  作者:jinzhe
--  发布时间:2014/3/7 9:04:03
--  
IF  THOLDING=0 THEN  
     开多B:TBUY(开多2,手数,MKT); 
 IF  THOLDING=0 THEN  
     开空B:TBUYSHORT(开空2,手数,MKT);  
 IF  THOLDING=0 THEN  
     开多A:TBUY(开多1,手数,MKT);
 IF  THOLDING=0 THEN  
     开空A:TBUYSHORT(开空1,手数,MKT);
END 

 

 

1.这里的也改了

 

2.平仓手数都写0