5分钟图。选择了“走完一根K线以后”的下单方式,想在临近收盘的时候平仓。用了以下两种:
代码一:
if time>145000 then begin
sell(true,0,limit,c-slip);
sellshort(true,0,limit,c+slip);
end
代码一会出现漏单的情况,图上能显示信号,却不发出委托。有时能按想法正常平仓,有时却不能。于是改成代码二,
代码二:
if time>145000 then begin
sell(holding>0,0,limit,c-slip);
sellshort(holding<0,0,limit,c+slip);
end
代码二仍然不行,一样的现象,有时能正常平仓,有时却不能。搜了一下论坛,好像不止一个朋友反应用holding来构建下单条件会有不可预知的漏单情况。我也发现在,9个交易日有4个交易日被漏掉了。开始我还以为是网络问题,反复测试发现不是。如果说是代码有什么问题,我用两个模拟帐号一起测试,两个图上都出了信号,其中一个帐号正常发出了委托,另一个没有却发出委托,检查了日志,确实没发委托,预定平仓时间点前后全是“【图表】IF08 运行完毕”这种字样。同样的代码,居然运行出了不同的结果。唉。
请教一下,假若不使用软件本身的功能选项,5分钟图,K线走完的方式,想实现收盘前平仓,究竟应该怎么写呢?
[此贴子已经被作者于2012-7-21 13:55:44编辑过]
其实真正想问的问题是, 代码一 与 代码二 的写法为何均会出现 有时能正常平仓,有时却不能正常平仓 的现象。9个交易日有5个交易日按设计预想准点平仓了,有4个交易日却图上出了信号,却没发出委托。
[此贴子已经被作者于2012-7-21 14:00:08编辑过]
你的情况应该是使用了未来数据,导致信号闪烁,用论坛上的2.89测试版,该版本已经支持自动持仓矫正功能
未来函数? 不对啊。 if time>145000 条件是time啊。time 构建的条件也“被未来”了。
我仔细F8一句句调试也没有发现哪个地方不对。但没有办法在语句之内调试,个人猜测,可能跟holding的值有关,信号出现的周期由holding构成的条件是成立的,设置为K线走完,不会立即发出委托。K线走完的一瞬间,本该发出委托,但由holding构成的条件却不成立了,所以出现了“K线走完”之后就未发委托。
楼主 软件这一块的功能是没有问题的,我怀疑是你的某一个账户在那一时刻断开了导致的,你可以仔细盯盘,然后再出现信号应该下单的那个时候,手工下单一手试试,看能否下单。
谢谢
董小球 的回复,倘若真是您所说的瞬间掉线这个原因的话,那么,按shift+Z, 在启动自动交易的这个窗口中,将会有对应时间点发出委托的记录,只不过因为自动委托瞬间断线,所以帐户一项是空白——是这样的吗? 若上述假设成立,那么,是否可以推出:shift+z 的窗口中无对应时间点的记录,则说明委托确实没有发出?
我会再多做尝试,尽可能提供更精确的问题所在。
[此贴子已经被作者于2012-7-24 10:40:23编辑过]
请帮我看一下,为什么 14:55 收盘前平仓 图表上显示有信号,但自动交易却未发出委托——并不是每次都会漏单,10个交易日大约有4、5个交易日会漏掉。自己花了半个月也没有找到问题所在。
//股指日内突破组合
//用于股指日内5min,K线走完
variable:v1=1;
variable:v2=1;
variable:v3=1;
variable:v4=1;
variable:hold1=0;
variable:hold2=0;
variable:hold3=0;
variable:hold4=0;
variable:holdall=0;
runmode:0; //逐k线模式
t1:=time>093000 and time<143500;
t2:=time>145000;
// 策略一
n1:=30;
if c>ref(hhv(c,n1),1) then begin//做多
if hold1<0 then hold1:=0;
if t1 then hold1:=v1;
end
if c<ref(llv(c,n1),1) then begin//做空
if hold1>0 then hold1:=0;
if t1 then hold1:=-v1;
end
// 策略二
n2:=35;
if c>ref(hhv(c,n2),1) then begin//做多
if hold2<0 then hold2:=0;
if t1 then hold2:=v2;
end
if c<ref(llv(c,n2),1) then begin//做空
if hold2>0 then hold2:=0;
if t1 then hold2:=-v2;
end
// 策略三
n3:=40;
if c>ref(hhv(c,n3),1) then begin//做多
if hold3<0 then hold3:=0;
if t1 then hold3:=v3;
end
if c<ref(llv(c,n3),1) then begin//做空
if hold3>0 then hold3:=0;
if t1 then hold3:=-v3;
end
// 策略四
n4:=45;
if c>ref(hhv(c,n4),1) then begin//做多
if hold4<0 then hold4:=0;
if t1 then hold4:=v4;
end
if c<ref(llv(c,n4),1) then begin//做空
if hold4>0 then hold4:=0;
if t1 then hold4:=-v4;
end
if t2 then begin//收盘
hold1:=0;
hold2:=0;
hold3:=0;
hold4:=0;
end
holdall:=hold1+hold2+hold3+hold4;//交易指令
if holding<>holdall then begin
if holdall>0 then begin
sellshort(holding<0,0,market);
buy(holding<holdall and t1,holdall-holding,market);
sell(holding>holdall,holding-holdall,market);
end//if holdall>0
if holdall<0 then begin
sell(holding>0,0,market);
buyshort(holding>holdall and t1,holding-holdall,market);
sellshort(holding<holdall,holdall-holding,market);
end//if holdall<0
end//if holding<>holdall
if holdall=0 or t2 then begin //就这部份好像总是不好好工作。
sell(holding>0,0,market);
sellshort(holding<0,0,market);
end//if holdall=0
// --- 结束 ---
[此贴子已经被作者于2012-8-7 16:03:53编辑过]
既然有能够正常触发的时候,那么说明软件的功能是没有问题的
所以问题应该处在时间上,可能时间稍微早或者慢那么一点,导致你的下单信号在最后一根K线,从而也就导致不下单了
所以 你可以本着查问题的想法来试试,把收盘前的平仓时间放到倒数第二个K线上,也就是50分,估计都百分百没问题了
另外,还有一个怀疑,就是网络不稳定,你可以在出现信号但是没下单的时候,手工下单试试,看能否正常下单,以判断是否是因为交易断开或者不稳定导致的
[此贴子已经被作者于2012-8-7 16:14:04编辑过]
既然有能够正常触发的时候,那么说明软件的功能是没有问题的
所以问题应该处在时间上,可能时间稍微早或者慢那么一点,导致你的下单信号在最后一根K线,从而也就导致不下单了……
您提示的原因1:下单信号在最后一根K线——交易的是股指,所以不存在这个问题。 就算是商品,代码中t2:=time>145000.理论上委托发出距离收盘还有5分钟,足够交易服务响应。
您提示的原因2:网络不稳定——我已经在不同的网络线路测试过了。另外,假若是网络不稳定,那么开仓也应该有问题吧,开仓从未有问题,只是平仓有问题。还有,别的简单策略没有问题,漏单频率很低<1% 这个策略是一个组合,稍复杂,漏单频率很高,十个交易日大约4、5个交易日会漏掉。
[此贴子已经被作者于2012-8-7 16:33:06编辑过]