以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 金字塔软件问题提交 (http://weistock.com/bbs/list.asp?boardid=2) ---- 请教金字塔张老师延迟问题 (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=157223) |
||||
-- 作者:hsm822 -- 发布时间:2017/8/24 9:13:04 -- 请教金字塔张老师延迟问题 老师: 一、问题的提出: 大量小毛刺的假突破是程序化交易成败的难点,它往往使开仓位抓到一个最高点或长上影线的尖端处。我想了个解决办法:就是当突破开仓的条件全部满足时,暂时停顿延迟几秒钟,然后再从头重新刷新数据准备的变量赋值条件及开仓的全部条件。如果是瞬时的假突破(如上长影)延迟后有可能就又不符合开仓条件了(如长上影的回落),这个毛刺就会被过滤掉。 二、请您回答的程序写法问题: 这样的话,数据准备(变量的赋值条件)及开仓的全部条件,都得在同一个轮询周期内先刷一遍,然后停顿几秒后再刷第二遍,前后需刷新两遍。但为了使延迟停顿几秒钟后,刷新的第二遍数据有别于刷第一遍时的实时数据。我在第二遍数据及开仓条件前加了一个英文字以示区别。如: 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\'); |
||||
-- 作者:wenarm -- 发布时间:2017/8/24 9:46:49 -- 1.工作人员给你提供的方式并不是实际意义上的延迟,公式的运行依旧还是受行情事件驱动在不断运行,只是你的开平条件受这个条件因素的影响
问题1:策略运行都会执行一遍,压根就不能区分第一次和第二次的。请你先理解程序运行机制。
这个代码就是完整的延时代码。你自己需要先理解其处理逻辑。如果你实在理解不了,就没有必要再这个处理方式上浪费时间了。
下面是工作人员在其他帖子中给你提供的范例。 当开仓条件成立记录当时计算机的时间,然后后面不断程序每次执行时都会拿本地和记录时间进行运算,当差值大于指定值30S时,就会下单。
|
||||
-- 作者:hsm822 -- 发布时间:2017/8/24 10:13:11 -- 不明白n=0,n=1是什么意思? |
||||
-- 作者:wenarm -- 发布时间:2017/8/24 10:18:04 -- 全局变量,用于限制标记记录的ti的值,要不然没有都会从新被赋值
|