以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (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=174308)

--  作者:1252527484
--  发布时间:2020/2/15 13:43:35
--  模型平仓时间编写问题
m1:ma(c,3);
m2:ma(c,5);
n1:cross(m1,m2);
n2:cross(m2,m1);
SELLSHORT(n1,1,MARKET);
BUY(n1,1,MARKET);
sell(n2,1,MARKET);
BUYSHORT(n2,1,MARKET);
if T0TOTIME(TIMETOT0(CLOSETIME(0))-180)<=DYNAINFO(207) or (time=190000 and not(ISLASTBAR)) then begin
    sell(1,holding,MARKET);
end
if n1=1 and time>093000 AND TIME<143000 THEN BEGIN
    BUY(n1,1,MARKET);
END
if n2=1 and time>093000 AND TIME<143000 THEN BEGIN 
    BUYSHORT(n2,1,MARKET);
end 
IF holding<>0 and time=145700 then begin
sell(n2,1,MARKET);
end
IF holding<>0 and time=145700 then begin
  SELLSHORT(n1,1,MARKET);
end


老师   这个模型并没有在下午14:30后停止开仓   14点57分也没有全部平仓   是哪里有问题呢?

--  作者:wenarm
--  发布时间:2020/2/15 14:35:00
--  

运行在什么周期下的?用的什么运行模式。

 

[此贴子已经被作者于2020/2/15 14:35:23编辑过]

--  作者:1252527484
--  发布时间:2020/2/15 17:42:40
--  
图表程式化   300股指1分钟和3分钟
--  作者:wenarm
--  发布时间:2020/2/15 18:38:10
--  

结合你上个帖子中的需求表述:

//我是想  9点30开始开仓    下午14:30之后就不再开仓   前面开的仓如果没用平统一都在14点57分平仓  提前收盘三分钟       应该怎么编写    

问题总结:

1.限制时间无效:因为你代码中的第5--8行,的开平语句未做时间限制造成的。(这个应该是你修改后,未注释掉。根据你的需求,他们是不应该存在的)

2.你需求中,应该是希望在金死叉时进行开平反手的操作。而代码中你限定的时间是time=145700 。那么最终结果是,在整个交易时间内,只有在14:57分才会进行平仓。

3.之前给你的代码中,提供了两种提前下单的方法。根据你上面的用法看,你并没有理解。建议你认真分析下代码和处理逻辑。

 

修改如下:

 


m1:ma(c,3);
m2:ma(c,5);
n1:cross(m1,m2);
n2:cross(m2,m1);
//SELLSHORT(n1,1,MARKET);
//BUY(n1,1,MARKET);
//sell(n2,1,MARKET);
//BUYSHORT(n2,1,MARKET);

if n1=1 and time>093000 AND TIME<143000 THEN BEGIN
 SELLSHORT(HOLDING<0,1,MARKET);
    BUY(HOLDING=0,1,MARKET);
END
if n2=1 and time>093000 AND TIME<143000 THEN BEGIN
 sell(HOLDING>0,1,MARKET);
    BUYSHORT(HOLDING=0,1,MARKET);
end

 

//14:57全平仓位
IF time=145700 then begin
 sell(HOLDING>0,HOLDING,MARKET);
 SELLSHORT(HOLDING<0,HOLDING,MARKET);
end

//这段代码用必须在固定的时间间隔模式下,并且提前下单的时间必须是最后一根k线。否者需要修改代码中的time
//if T0TOTIME(TIMETOT0(CLOSETIME(0))-180)<=DYNAINFO(207) or (time=190000 and not(ISLASTBAR)) then begin
//  sell(HOLDING>0,HOLDING,MARKET);
// SELLSHORT(HOLDING<0,HOLDING,MARKET);
//end


--  作者:1252527484
--  发布时间:2020/2/15 20:22:17
--  
好的  谢谢老师