欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件金字塔软件问题提交 → 请教金字塔张老师延迟问题

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有2337人关注过本帖树形打印复制链接

主题:请教金字塔张老师延迟问题

帅哥哟,离线,有人找我吗?
hsm822
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 hsm822
等级:新手上路 帖子:24 积分:10 威望:0 精华:0 注册:2012/7/30 21:57:25
请教金字塔张老师延迟问题  发帖心情 Post By: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:  虽然变量ma100sar10在第二遍数据刷新的变量前均加了个Y字母,但括号内引用的技术指标‘ma1’  ' sar(4,32,88)’前均没加Y仍然还是与 第一遍一样,这样对不对 是否还需要在括号内引用的技术指标前面再加个Y字?另外是否还需在金字塔技术指标里设两个技术指标Yma1Ysar

  问题C: 延迟函数sleep一旦生效则所有的品种及公式全部暂停几秒钟。老师写了如下的全局变量的替代延迟函数表达语句,没写成可运行的实例我有些看不明白,还烦您再具体写成一个可运行的实例不知可否?多谢!

                 if cond A  or  cond Bthen extgbdataset ('ti',currenttime) ;

                延迟:= currenttime - extgbdata(‘ti'); 

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:延迟函数替代表达式.doc


 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2017/8/24 9:46:49 [只看该作者]

1.工作人员给你提供的方式并不是实际意义上的延迟,公式的运行依旧还是受行情事件驱动在不断运行,只是你的开平条件受这个条件因素的影响

 

问题1:策略运行都会执行一遍,压根就不能区分第一次和第二次的。请你先理解程序运行机制。

 

这个代码就是完整的延时代码。你自己需要先理解其处理逻辑。如果你实在理解不了,就没有必要再这个处理方式上浪费时间了。

 

下面是工作人员在其他帖子中给你提供的范例。

当开仓条件成立记录当时计算机的时间,然后后面不断程序每次执行时都会拿本地和记录时间进行运算,当差值大于指定值30S时,就会下单。

延迟30秒的例子

 

GLOBALVARIABLE:n=0;
if 开仓条件 and n=0 then
begin
extgbdataset ('ti',currenttime); 
n:=1;
end

延迟:=currenttime - extgbdata('ti');
if 延迟>30 then begin
tbuy(1,1,mkt);
n:=0;
end

 

 



编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
hsm822
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 hsm822
等级:新手上路 帖子:24 积分:10 威望:0 精华:0 注册:2012/7/30 21:57:25
  发帖心情 Post By:2017/8/24 10:13:11 [只看该作者]

不明白n=0,n=1是什么意思?

 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2017/8/24 10:18:04 [只看该作者]

全局变量,用于限制标记记录的ti的值,要不然没有都会从新被赋值

 

 

 



编程无捷径,技巧靠积累。
 回到顶部