以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 金字塔软件问题提交 (http://222.73.7.161/bbs/list.asp?boardid=2) ---- 关于分笔刷新的问题,重复下单 (http://222.73.7.161/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 运行完毕”,是否是代表刷新一次?如果是的话那么为什么我在分笔明细里面查看,刷新的次数远比我的分笔多?也就是刷新频率比分笔还快?不是说来一笔刷一笔吗?如果频率太高,怎么降到来一笔刷一笔呢? ![]() ![]() ![]() ![]() |
-- 作者: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 -- 原来如此~! |