老师:
一、问题的提出:
大量小毛刺的假突破是程序化交易成败的难点,它往往使开仓位抓到一个最高点或长上影线的尖端处。我想了个解决办法:就是当突破开仓的条件全部满足时,暂时停顿延迟几秒钟,然后再从头重新刷新数据准备的变量赋值条件及开仓的全部条件。如果是瞬时的假突破(如上长影)延迟后有可能就又不符合开仓条件了(如长上影的回落),这个毛刺就会被过滤掉。
二、请您回答的程序写法问题:
这样的话,数据准备(变量的赋值条件)及开仓的全部条件,都得在同一个轮询周期内先刷一遍,然后停顿几秒后再刷第二遍,前后需刷新两遍。但为了使延迟停顿几秒钟后,刷新的第二遍数据有别于刷第一遍时的实时数据。我在第二遍数据及开仓条件前加了一个英文字以示区别。如:
ma100:=stkindiex(stklabel,'ma1',0,1,0,30); 第一遍的数据
YMA100:=stkindiex(stklabel,'ma1',0,1,0,30); 第二遍的数据
sar10:=stkindiex(stklabel,'sar(4,32,88)',0,1,0,30); 第一遍的数据
YSAR10:=stkindiex(stklabel,'sar(4,32,88)',0,1,0,30); 第二遍的数据
问题A: 这样 在一个轮询周期内连续刷新两遍 数据准备及开仓的全部条件
这个方法是否可行?
问题B: 虽然变量ma100及sar10在第二遍数据刷新的变量前均加了个Y字母,但括号内引用的技术指标‘ma1’及 ' sar(4,32,88)’前均没加Y仍然还是与 第一遍一样,这样对不对? 是否还需要在括号内引用的技术指标前面再加个Y字?另外是否还需在金字塔技术指标里再设两个技术指标Yma1和Ysar?
问题C: 延迟函数sleep一旦生效,则所有的品种及公式全部暂停几秒钟。老师写了如下的全局变量的替代延迟函数表达语句,但没写成可运行的实例我有些看不明白,还烦请您再具体写成一个可运行的实例不知可否?多谢!
if (cond A or cond B)then extgbdataset ('ti',currenttime) ;
延迟:= currenttime - extgbdata(‘ti'); 下载信息 [文件大小: 下载次数: ] 点击浏览该文件:延迟函数替代表达式.doc
1.工作人员给你提供的方式并不是实际意义上的延迟,公式的运行依旧还是受行情事件驱动在不断运行,只是你的开平条件受这个条件因素的影响
问题1:策略运行都会执行一遍,压根就不能区分第一次和第二次的。请你先理解程序运行机制。
这个代码就是完整的延时代码。你自己需要先理解其处理逻辑。如果你实在理解不了,就没有必要再这个处理方式上浪费时间了。
下面是工作人员在其他帖子中给你提供的范例。
当开仓条件成立记录当时计算机的时间,然后后面不断程序每次执行时都会拿本地和记录时间进行运算,当差值大于指定值30S时,就会下单。
全局变量,用于限制标记记录的ti的值,要不然没有都会从新被赋值