以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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 |