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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 如何实现固定时间隔小于K线周期时盘中开仓后至K线走完之间不再出现任何操作?

   

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


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

主题:如何实现固定时间隔小于K线周期时盘中开仓后至K线走完之间不再出现任何操作?

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


加好友 发短信
等级:新手上路 帖子:71 积分:415 威望:0 精华:0 注册:2011/12/8 20:22:33
如何实现固定时间隔小于K线周期时盘中开仓后至K线走完之间不再出现任何操作?  发帖心情 Post By:2012/2/28 10:36:49    Post IP:125.33.79.85[显示全部帖子]

想在K线走完之前的盘中实现判断和操作所以采用了固定时间间隔,间隔时间小于K线周期,希望盘中第一次达到条件时操作之后至K线走完之前忽略任何信号,在K线走完时再次进行一次判断,如何实现请大侠帮忙!
[此贴子已经被作者于2012-2-28 10:37:21编辑过]

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


加好友 发短信
等级:新手上路 帖子:71 积分:415 威望:0 精华:0 注册:2011/12/8 20:22:33
  发帖心情 Post By:2012/3/5 19:29:19    Post IP:123.114.103.77[显示全部帖子]

折腾了几天还是不能完全解决,是否在runmode=0和走完K线交易条件下无法在K线周期中进行开平仓?如果遇到长阳或长阴希望在K线没有走完提前止损又如何实现呢?

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


加好友 发短信
等级:新手上路 帖子:71 积分:415 威望:0 精华:0 注册:2011/12/8 20:22:33
  发帖心情 Post By:2012/3/6 18:49:17    Post IP:125.33.85.216[显示全部帖子]

是这个意思,只是在K线中第一次出现操作信号时下单(比如平空开多),之后一直到K线走完之前不再处理反复出现和消失的信号(消失时如果多仓则平多开空),最后在K线走完时判断一次,根据最后这次的判断决定是否再补回持仓。


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


加好友 发短信
等级:新手上路 帖子:71 积分:415 威望:0 精华:0 注册:2011/12/8 20:22:33
  发帖心情 Post By:2012/3/6 22:17:45    Post IP:125.33.85.216[显示全部帖子]

谢谢管理员,不过提前多少秒下单是不固定的,需要在K线中由条件(与close有关)决定。

 

 

为了解决这个问题,我在数据库全局变量中设置了INKBUY, ENDKSELL, KTIME三个全局变量,确保在关机后重新加载程序也不会被初始化。程序设计的逻辑是:

1.为了实现在K线中间的操作,在图表交易中设定了60秒的固定时间间隔,希望K线周期中每60秒时应该执行一遍程序;

2.当买多条件达到时发出平空开多指令并设置数据库中的全局变量'INKBUY’为1,之后至K线结束不再执行任何交易指令,但判断需要恢复持仓时将数据库全局变量'ENDKSELL'置为1,提供给下一个K线的第一个60秒执行时进行持仓的恢复操作;

3.为判断是新K线的第一个60秒,设置了KTIME变量,从数据库全局变量取出的值与time进行比较,不相等的情况应该在新K线的第一个60秒时就可以发现,这时执行恢复持仓的操作并将KTIME置为当前time,在之后的60秒轮询中将不会再被执行。

 

对应的代码如下:

gbtime:EXTGBDATA('KTIME'),linethick0;  //在新K线的第一个60秒没有走完时读取的应该是上一个K线的时间。
inkbuy:EXTGBDATA('INKBUY'),linethick0;  //上一个K线如果出现K线中平空开多操作是被置为1的,本周期K线的第一个60秒轮询是要用做判断条件的。
endksell:EXTGBDATA('ENDKSELL'),linethick0; //上一个K线最后一个60秒轮询的结果如果需要恢复持仓(平多开空)是被置为1的。
if gbtime<>time then begin //由于新K线的第一个60秒轮询时,gbtime是上一个K线的时间,time是新K线时间,条件成立,之后至K线结束都不再成立。
   if inkbuy and endksell then begin  //如果上一个K线发生K线中的平空开多并走完K线时需要恢复持仓执行下面结构中的语句
       sell(holding>0, 1, limitr, o); //由于是新K线的第一个60秒,这时的o应该就是新K线的开盘价吧????不是很确定!!!
       buyshort(holding=0,1, limitr, o);
       if holding<0 then begin  //恢复持空仓后将数据库变量置为0
            EXTGBDATASET('ENDKSELL' , 0);
            EXTGBDATASET('INKBUY' , 0);
       end
   end
   EXTGBDATASET('KTIME' , time); //在新K线的第一个60秒轮询时将数据库的时间全局变量置为新K线时间,这样在第一个60秒后至K线结束gbtime=time
end

 

请火哥或管理员帮助看看上面的实现有问题吗?另外帮助分析一下下面出现问题的原因。

 

按照上面代码实现后,出现如下问题:

1. 在图表显示的gbtime总是上一个K线的time,但打开工具->数据->全局变量看却是当前K线的time????难道gbtime并不是根据定义的轮询时间被执行???

2. 在有两个主图K线的框架中,gbtime在图表上的显示飘忽不定,似乎是在前面的K线中随机取的,打开工具->数据->全局变量看却始终是当前K线的时间。但这种情况在只有一个主图K线的框架中不会发生,就是总出现问题1,使得程序不能按所需逻辑运行。


[此贴子已经被作者于2012-3-6 22:28:37编辑过]

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


加好友 发短信
等级:新手上路 帖子:71 积分:415 威望:0 精华:0 注册:2011/12/8 20:22:33
  发帖心情 Post By:2012/3/7 13:00:55    Post IP:125.33.85.216[显示全部帖子]

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

 

上图就是数据回测时的效果,但是如果K线走完就不无法实现图中的开仓点,这个开仓点与当根K线的即时close有关。就是希望可以在K线中间可以开仓,在出现情况一时需要恢复仓位,情况二时不用回复持仓。

可以假设K线中成交条件为condK=1,K线结束需要恢复仓位condS=1,不需要恢复仓位condS<>1。


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


加好友 发短信
等级:新手上路 帖子:71 积分:415 威望:0 精华:0 注册:2011/12/8 20:22:33
  发帖心情 Post By:2012/3/8 9:21:58    Post IP:125.33.89.161[显示全部帖子]

谢谢提示,我原来以为数据库全局变量不太一样。我以前都是用globalvariable来定义全局变量,但发现如果给这个全局变量赋值的语句如果在if结构中,在if不被执行时是无法使用该变量,值是非法的,所以才想到数据库全局变量一旦被写入,后面任何时候都是可以被取出调用的,不知我的理解是否正确?

 

另外,我在2012-3-6 22:17:45中的最后两个问题可否解释一下原因,关键是在最后一根K线上看从数据库全局变量取值出来的gbtime(gbtime:EXTGBDATA('KTIME'),linethick0;)不是该K线的time而是前一根K线的,但从工具-数据-全局变量上看KTIME已经通过第一个60秒的程序执行被设置成最后一根K线的time。


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


加好友 发短信
等级:新手上路 帖子:71 积分:415 威望:0 精华:0 注册:2011/12/8 20:22:33
在回复的帖子后面跟帖好像不被显示为最新帖,用回复主题帖子试试。  发帖心情 Post By:2012/3/8 9:42:58    Post IP:125.33.89.161[显示全部帖子]

谢谢admin提示,我原来以为数据库全局变量不太一样。我以前都是用globalvariable来定义全局变量,但发现如果给这个全局变量赋值的语句如果在if结构中,在if不被执行时是无法使用该变量,值是非法的,所以才想到数据库全局变量一旦被写入,后面任何时候都是可以被取出调用的,不知我的理解是否正确?

 

 

另外,我在2012-3-6 22:17:45中的最后两个问题可否解释一下原因,关键是在最后一根K线上看从数据库全局变量取值出来的gbtime(gbtime:EXTGBDATA('KTIME'),linethick0;)不是该K线的time而是前一根K线的,但从工具-数据-全局变量上看KTIME已经通过第一个60秒的程序执行被设置成最后一根K线的time。


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


加好友 发短信
等级:新手上路 帖子:71 积分:415 威望:0 精华:0 注册:2011/12/8 20:22:33
  发帖心情 Post By:2012/3/8 13:32:24    Post IP:125.33.89.161[显示全部帖子]

谢谢董!也就是说所有该软件上的应用都可以调用到,真是非常强大的功能。

 

不过我不明白的是,在我的逻辑中EXTGBDATASET('KTIME')=time显然在新的K线产生的第一个固定时间轮询时更新了数据库变量的值(在工具-数据-全局变量可以看到新的更新,即KTIME是当前K线的time),可是接下来的轮询中(当前K线还没有走完)从数据库取出的值gbtime:=EXTGBDATA('KTIME')却是前一根K线的time值???


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


加好友 发短信
等级:新手上路 帖子:71 积分:415 威望:0 精华:0 注册:2011/12/8 20:22:33
  发帖心情 Post By:2012/3/8 15:59:47    Post IP:125.33.89.161[显示全部帖子]

谢谢火哥提供例子!要仔细消化一下。

 

有几个问题还是要请教一下:

1.我现在是标准版,只能采用图表程式化交易,这段代码中含有tbuyholding/tsellholding后台交易函数,不知简单换成holding的判断是否可以?

2.采用islastbar的应用,是否会使前面K线的交易信号在图表上消失?

3.采用enterlong系列指令和buy系列指令的区别?

[此贴子已经被作者于2012-3-8 16:03:46编辑过]

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


加好友 发短信
等级:新手上路 帖子:71 积分:415 威望:0 精华:0 注册:2011/12/8 20:22:33
  发帖心情 Post By:2012/3/8 16:16:55    Post IP:125.33.89.161[显示全部帖子]

没有写错,即使是收盘后不再有数据更新时,在图表上通过gbtime:EXTGBDATA('KTIME')语句显示的最后一根K线的时间的确是前一根的,不是151500,但用工具-数据-全局变量上看就是151500,说明这个值是通过程序中的EXTGBDATASET('KTIME', time)语句设置成功的,而这个语句的执行是在新K线(假设30分钟周期)的第一个轮询(假设是60秒)时就已经正确赋值了,之后的29分钟内我随时查看数据库都是当前K线的值。可是在K线运行的后29分钟乃至K线结束,这个gbtime怎么就不对呢?  代码参见7楼。
[此贴子已经被作者于2012-3-8 16:17:44编辑过]

 回到顶部
总数 14 1 2 下一页