以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://weistock.com/bbs/list.asp?boardid=2)
----  关于分笔刷新的问题,重复下单  (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=98240)

--  作者:C100011612
--  发布时间:2016/6/3 23:29:48
--  关于分笔刷新的问题,重复下单
问题一:
交易的时候碰到连续发出相同的buy指令如图,我用的是3个分笔数据为一根K线(因为怕机器太卡),我能否理解为因为用了3笔的分笔数据,所以HOLDING要3笔数据走完形成K线后holding才变成1,造成第1笔刷过后holding还是0,第二笔满足条件也下了同样的buy指令?
如果改成1笔的分笔数据会否解决这个问题,但是这个更耗CPU,又或者是用filter过滤?


问题二:
下单记录里面的“【图表】HSI06 运行完毕”,是否是代表刷新一次?如果是的话那么为什么我在分笔明细里面查看,刷新的次数远比我的分笔多?也就是刷新频率比分笔还快?不是说来一笔刷一笔吗?如果频率太高,怎么降到来一笔刷一笔呢?
图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看


--  作者:C100011612
--  发布时间:2016/6/3 23:31:14
--  
另外补充一下,我用的是IB的TWS数据,分笔的明细应该是准确的。
--  作者:王锋
--  发布时间:2016/6/4 0:09:40
--  

3个分笔数据为一个K线?那就是你是用的3笔周期做的了?

你的前后2次交易已经过去了一秒多,也就是会产生新的K线,你要检查你的策略是不是出现信号闪烁了


--  作者:C100011612
--  发布时间:2016/6/4 12:43:45
--  
是的3笔一根K线;
我公式里面有用全局变量做标记了,轮询一遍后全局变量已经改变,换K线后应该不满足BUY的要求。

有没有像文华里面的autofilter这样的过滤重复信号的方法?  或者:

我看filter函数后面要跟条件的(这样表述太麻烦),可否:buy(1,1,marketr),filter;   这样表述能过滤吗?

--  作者:王锋
--  发布时间:2016/6/4 21:07:12
--  

日志上已经很明确的标明了,你应该是在一根K线下单后,出现一根新的K线又出现下单信号了。

建议你贴出来你的下单代码,我们可以帮你看一下。另外如果你的策略中含有可能造成信号闪烁的问题,那么这个主要的原因还需要你来进行排查的,你可以认真参考一下

 

DEBUGFILE----使用日志方式完善您的策略

http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=49428


--  作者:C100011612
--  发布时间:2016/6/5 16:08:43
--  
第一个满足buy命令的3笔k线是由54秒的2笔和55秒的第1笔组成的。第一个buy信号是54秒的第一个轮询产生的,第二个buy信号是55秒的第一个轮询产生的,所以这个重复开仓应该是1根K线内的第一笔和第三笔触发的,我用的是CROSS命令和全局变量来触发买的条件,而且cross是用H和L的,应该不会有信号闪烁吧.

全部比较长,贴出来出问题的那部分:

记录全局变量......F31=0,HD=0;//HD是我用来记录仓位的全局变量,F31是我用来记录之前有否经过设定的阻力线,F31=0为没有经过,1为经过并开仓中,2表示经过已平仓.
//策略31
C315ZS:=CROSS(H,P31+10);//冲破31+10
D31:=CROSS(P31,L);//跌破31
D315ZS:=CROSS(P31-10,L);//跌破31-10
D31ZS:=CROSS(P31-20,L);//跌破31-20

//策略3多头31 F31
IF D31=1&&F31=0 THEN BEGIN  //第一次跌破31开始循环
IF HD<0 THEN BEGIN   //如果全局变量记录的持仓小于0
SELLSHORT(1,1,MARKETR); //如果第一次空头跌破31,那么空头平仓
BUY(1,1,MARKETR); //无持仓时买入
F31:=1; //记录31多头开过仓
HD:=1; //全局变量持仓变为1
END;
IF HD=0&&F31=0 THEN BEGIN//加上F31=0是为了预防91条成交但是92条还没有成交时HD=0,到本条的时候重复提交市价买入
BUY(1,1,MARKETR);        《《《出现重复开仓命令的82行命令
F31:=1; //记录31多头开过仓
HD:=1; //全局变量持仓变为1
END;
IF HD>0 THEN BEGIN
F31:=1; //全局变量持仓变为1
END;
END;
IF F31=1&&((C32=1&&F32=0) OR D31ZS=1)&&HD>0 THEN BEGIN   //策略3多头持仓时冲破32或者跌破31的止损位置
SELL(1,1,MARKETR);  // 如果破策略3空头或者破止损,则平仓
F31:=2; 
HD:=0;  //全局变量持仓变为0
END;





--  作者:yukizzc
--  发布时间:2016/6/6 8:55:57
--  

buy(holding=0,1,marketr);

软件里使用holding=0这个来做到不加仓的过滤机制


--  作者:C100011612
--  发布时间:2016/6/6 9:49:11
--  
我考虑过了,是否是这个原因?请帮我分析下:

因为我采用的是全局变量,而这个普通全局变量是会与前一根全局变量比较的,所以当前分笔为3笔的lastbar在刷新的时候,第一笔信号出现下单,而再有信号出现的时候,全局变量是和前一个BAR的全局变量做比较而不是和前一笔的全局变量做比较,而前一格BAR的全局变量还没有变过来,所以还是会发出买入的信号。
如果是这个原因的话,我就选K线走完再下单,就可以解决了吧?


--  作者:yukizzc
--  发布时间:2016/6/6 10:20:19
--  

你是用的variable的全局变量吗?如果是的话没有问题,是可以记录你那个状态的。

你要看之前历史信号是否会闪烁,全局变量每次都是从头开始刷新,和holding很类似,有信号开仓就会加1,如果信号消失那么持仓就是0


--  作者:c100011626
--  发布时间:2016/6/6 14:38:53
--  
原来如此~!