以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  如何在金字塔上实现信号延时确认  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=2183)

--  作者:smarter
--  发布时间:2010/7/20 7:56:34
--  如何在金字塔上实现信号延时确认

信号发生时后, 持续15秒后还有信号, 确认开仓, 持续时间可以是0-180秒


为了处理即时信号消失问题,由于系统缺陷,文华无奈地采用了比较笨的方法:
1、信号消失恢复之前的持仓;
2、信号延时确认

 

按理说金字塔比文华灵活,可以在后台交易中通过公式达到此功能,由于金字塔时间函数目前的局限,不能被合理引用,以致连这个简单功能都不知如何实现,更别说实现诸如
精确控制开仓\\平仓时的各种变化,比如满足条件tj1后, 根据之后20秒时间的持仓变化、盘口变化,给出进一步的行动依据,。。。
http://www.weistock.com/bbs/dispbbs.asp?boardid=4&id=2174&page=0&star=2

 

由于金字塔的卓越功能,已经成为我们的投机利器,我们再也离不开这一制胜法宝,同时也在考虑如何回报金字塔,使它更强更大。我们非常庆幸金字塔能有这样一位天才设计者,由衷地感谢您!
请求金字塔满足大家的意见,拿出更简单的方法实现这类功能。谢谢!

 

最好的方法是扩充现有函数Time0 的功能
取得从当日0点以来的秒数。

使它能够在任何大于1秒的周期,返回自从当日0点以来的真正秒数。(目前函数Time0在1分钟周期,返回自从当日0点以来的秒数只能精确到60秒,不能到1秒)

这样,很容易实现信号延时确认功能,同时也可以进一步拓展其它功能。


--  作者:smarter
--  发布时间:2010/7/20 8:10:42
--  

这种函数国外优秀交易软件和平台是有的

二.时间函数
001)获取毫秒级计时

GetTimeTick(last) ;//获取毫秒级计时


功能:获取毫秒级计时

参数:last--毫秒级计时双字值

返回: 毫秒级计时减last后的双字值


一般使用形式:
系统毫秒级计时一般几十天一个循环
m_tick=GetTimeTick(0) ;//当前毫秒级计时
.....
m_ctick=GetTimeTick(m_tick) ;//从m_tick到现在的毫秒数
 

002)获取当前时间(或指定时间)

GetTime() ;//获取当前时间(或指定时间)


功能:获取当前时间(或指定时间)

参数:获取指定时间的时间值时,要输入,年,月,日,时,分,秒

返回: 当前时间(或指定时间)的双精度浮点值(相当于8字节长度数值)


一般使用形式:

m_t00=GetTime() ;
m_t00=GetTime(2006,08,15,12,20,22) ;


003)获取当前时间(或指定时间)的具体年,月,日,时,分,秒

GetSeconds() ;//获取当前时间(或指定时间)的秒
GetMinutes() ;//获取当前时间(或指定时间)的分
GetHour() ;//获取当前时间(或指定时间)的时
GetDay() ;//获取当前时间(或指定时间)的天
GetDayOfWeek() ;//获取当前时间(或指定时间)的星期
GetMonth() ;//获取当前时间(或指定时间)的月
GetYear() ;//获取当前时间(或指定时间)的年
GetDate() ;//获取当前时间(或指定时间)的字串


功能:获取当前时间(或指定时间)的具体年,月,日,时,分,秒

参数:获取指定时间的时间值时,输入具体时间值(和GetTime()函数返回的值意义一样)

返回: 返回相应的值或字符串


一般使用形式:

m_t00=GetDay() ;
m_t00=GetDay(10025656...) ;

[此贴子已经被作者于2010-7-20 8:11:52编辑过]

--  作者:admin
--  发布时间:2010/7/20 11:04:34
--  

可以使用全局变量数据库来记录之前的信号变量前后之间的时间差,由于较为复杂,稍后我们会做出例子。


--  作者:smarter
--  发布时间:2010/7/20 17:39:08
--  

多谢!  期待着


--  作者:smarter
--  发布时间:2010/7/21 16:52:13
--  

另外,我在[交易] ---> [合约信息设置] 里设置的外汇品种,如EURUSD 的单位/乘数 设为 1 ,但经常自动的被改为0,影响系统头寸控制,请求解决办法,谢谢! 


--  作者:admin
--  发布时间:2010/7/25 1:05:01
--  

本示例以后台自动交易的方式,展现了金字塔实现延迟信号确认的工作原理。

本代码可以实现3天现上穿5天线后,15秒等待信号确认后,再发开仓单。

请选择固定时间间隔模式运行后台自动交易,间隔时间设为1秒

本公式会在运行时产生很多临时数据,请用户再第二天交易前清空这些历史变量,否则会导致与第二天的临时变量冲突。方法 工具菜单-》数据-》全局变量,进去后,选择“清空”按钮

 

MA1:=MA(CLOSE,3);
MA2:=MA(CLOSE,5);

CROS:=CROSS(MA1,MA2);

CROS2:=CROSS(MA2,MA1);


BUY1:=FALSE;

IF ISLASTBAR THEN
BEGIN
 IF CROS THEN
 BEGIN
  //将当前信号周期置全局变量数据库
  //数据名字前加信号周期,标记周期位置
  CRTEMP:=\'TEMP1\'&NUMTOSTR( BARPOS, 0);
  
  //读取原有变量的时间,判断是否到延时时间
  BUYTIME1:=EXTGBDATA(CRTEMP);
  BUYTIME2:=TIMETOT0(CURRENTTIME);
  DEBUGOUT(\'D1 %.0f\',BUYTIME1);
  IF BUYTIME1 > 1 THEN //第一次信号的原数据库读取会得到0值
  BEGIN
   DEBUGOUT(\'D2 %.0f\',BUYTIME2 - BUYTIME1);
   IF BUYTIME2 - BUYTIME1 > 15 THEN
   BEGIN
    //大于15秒的延迟,表示信号已经得到确认
    BUY1:=TRUE;
   END
  END
  ELSE
  BEGIN
   //第一次信号位置记录
   EXTGBDATASET(CRTEMP,TIMETOT0(CURRENTTIME));
  END
 END
 ELSE
 BEGIN
  //否则表示信号中间消失了
  CRTEMP:=\'TEMP1\'&NUMTOSTR( BARPOS, 0);
  EXTGBDATASET(CRTEMP,0);
 END
END

TBUY(BUY1,1,MKT);
TSELL(CROS2,0,MKT);

[此贴子已经被作者于2010-7-25 1:06:05编辑过]

--  作者:脑残
--  发布时间:2010/10/24 20:10:08
--  
顶出来学习
--  作者:xian_0_9
--  发布时间:2010/11/1 17:57:33
--  
能写个图表的实例吗?谢谢,让新手们学学~~图片点击可在新窗口打开查看
--  作者:趋势7778888
--  发布时间:2011/4/1 16:23:09
--  
以下是引用admin在2010-7-25 1:05:01的发言:

本示例以后台自动交易的方式,展现了金字塔实现延迟信号确认的工作原理。

本代码可以实现3天现上穿5天线后,15秒等待信号确认后,再发开仓单。

请选择固定时间间隔模式运行后台自动交易,间隔时间设为1秒

本公式会在运行时产生很多临时数据,请用户再第二天交易前清空这些历史变量,否则会导致与第二天的临时变量冲突。方法 工具菜单-》数据-》全局变量,进去后,选择“清空”按钮

 

MA1:=MA(CLOSE,3);
MA2:=MA(CLOSE,5);

CROS:=CROSS(MA1,MA2);

CROS2:=CROSS(MA2,MA1);


BUY1:=FALSE;

IF ISLASTBAR THEN
BEGIN
 IF CROS THEN
 BEGIN
  //将当前信号周期置全局变量数据库
  //数据名字前加信号周期,标记周期位置
  CRTEMP:=\'TEMP1\'&NUMTOSTR( BARPOS, 0);
  
  //读取原有变量的时间,判断是否到延时时间
  BUYTIME1:=EXTGBDATA(CRTEMP);
  BUYTIME2:=TIMETOT0(CURRENTTIME);
  DEBUGOUT(\'D1 %.0f\',BUYTIME1);
  IF BUYTIME1 > 1 THEN //第一次信号的原数据库读取会得到0值
  BEGIN
   DEBUGOUT(\'D2 %.0f\',BUYTIME2 - BUYTIME1);
   IF BUYTIME2 - BUYTIME1 > 15 THEN
   BEGIN
    //大于15秒的延迟,表示信号已经得到确认
    BUY1:=TRUE;
   END
  END
  ELSE
  BEGIN
   //第一次信号位置记录
   EXTGBDATASET(CRTEMP,TIMETOT0(CURRENTTIME));
  END
 END
 ELSE
 BEGIN
  //否则表示信号中间消失了
  CRTEMP:=\'TEMP1\'&NUMTOSTR( BARPOS, 0);
  EXTGBDATASET(CRTEMP,0);
 END
END

TBUY(BUY1,1,MKT);
TSELL(CROS2,0,MKT);

[此贴子已经被作者于2010-7-25 1:06:05编辑过]

能否直接设置在 金字 塔软件 里面 可以 自由调整  ,不需要现在这样 个个 模型都需要 加上 这些原码???并且可以在图表交易中使用 谢谢

[此贴子已经被作者于2011-4-1 16:28:56编辑过]

--  作者:lcgs005
--  发布时间:2012/8/20 13:06:42
--  
最好是加一个函数,让它在任何K线周期下都能返回最后一次满足条件,到现在的秒数,这样一下子就解决了