Rss & SiteMap

金字塔客服中心 - 专业程序化交易软件提供商 http://www.weistock.com/bbs/

专业程序化软件提供商
共11 条记录, 每页显示 10 条, 页签: [1] [2]
[浏览完整版]

标题:[求助]图表上实现过滤4秒信号

1楼
bbking 发表于:2011/1/11 10:17:06

我需要在每次发出委托后过滤后面4秒的信号~

if cond then begin

buy(...);

sleep(4000);

end;

 

类似的语句无法用在图表上~

今天图表实盘(图表)一开仓后sleep导致系统卡住...(没卡死..我机器高配的)

一担心马上切换回原来的系统~...

倒是昨天做模拟的时候没注意图表使用sleep会导致卡住的现象.

一直运行的好好的

 

现在需要一个能在图表上实现过滤最近4秒信号的程序...

希望admin能帮个忙...

 

以下是引用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编辑过]

 

 

在学习这段语句...

不少地方琢磨不透啊..

2楼
王锋 发表于:2011/1/11 10:19:53
sleep一般用在后台,使用sleep语句后会导致程序停下来等待,因为后台是独立工作的,故对使用影响不大,但是图表上使用sleep会导致整个程序都被挂起来。
3楼
bbking 发表于:2011/1/11 10:40:36
以下是引用王锋在2011-1-11 10:19:53的发言:
sleep一般用在后台,使用sleep语句后会导致程序停下来等待,因为后台是独立工作的,故对使用影响不大,但是图表上使用sleep会导致整个程序都被挂起来。

我是没搞清楚sleep是后台函数

如果金字塔在函数介绍上有一栏函数属性告知是哪类函数就更好了..

 

希望哪位老师能够帮我在图表上实现过滤最近4秒信号的功能

[此贴子已经被作者于2011-1-11 10:40:55编辑过]
4楼
阿火 发表于:2011/1/11 10:45:55

试试用全局变量。

发单后,用全局变量记录currenttime

再次发单,再用currenttime和全局变量做比较

 

只是这样 用于测试的图表交易系统和用于实盘的图表交易系统是分开的 

 

 

5楼
bbking 发表于:2011/1/11 11:16:33
以下是引用leevolvo在2011-1-11 10:45:55的发言:

试试用全局变量。

发单后,用全局变量记录currenttime

再次发单,再用currenttime和全局变量做比较

 

只是这样 用于测试的图表交易系统和用于实盘的图表交易系统是分开的 

 

 

能不能写个简单点的例子?

EXTGBDATASET(CRTEMP,TIMETOT0(CURRENTTIME));

这句搞的我那个数据里面全是新建的全局变量...

6楼
阿火 发表于:2011/1/11 11:42:02

一个思路,不知道可不可行,bbking兄根据自己的实际情况试试。

 

if cond and timetot0(currenttime)>timetot0(extgbdata('m')+4) then begin

//cond为买入条件,全局变量m的初始值每天更新为0

buy(......);

extgbdataset('m',currenttime);

end

 

如果具体情况中有用到holding的话,也要做相应的改变

 

7楼
bbking 发表于:2011/1/12 16:18:02
以下是引用leevolvo在2011-1-11 11:42:02的发言:

一个思路,不知道可不可行,bbking兄根据自己的实际情况试试。

 

if cond and timetot0(currenttime)>timetot0(extgbdata('m')+4) then begin

//cond为买入条件,全局变量m的初始值每天更新为0

buy(......);

extgbdataset('m',currenttime);

end

 

如果具体情况中有用到holding的话,也要做相应的改变

 

 

 

这个M是否需要手动设置为0?否则第二天就开不了仓?

图片点击可在新窗口打开查看

8楼
阿火 发表于:2011/1/12 21:09:49

恩。是啊。你是不是日内交易?

加一行代码,让收盘的时候,全局变量m自动变为0

9楼
bbking 发表于:2011/1/14 10:25:47

if hour=10 and minute=9 then begin
extgbdataset('crt',currenttime);
end;

 

我新建个指标~然后写入以上代码~

结果全局变量crt直接等于currenttime

可以超过10点09分钟的

 

10楼
bbking 发表于:2011/1/14 12:38:10
可能是我自己搞错了~我再试试...
共11 条记录, 每页显示 10 条, 页签: [1] [2]


Powered By Dvbbs Version 8.3.0
Processed in 6.66406 s, 3 queries.