开拓者期货期权程序化系统交易论坛

标题: Global变量未能解决信号消失 [打印本页]

作者: bigzhang    时间: 2012-3-2 11:24:46     标题: Global变量未能解决信号消失

Hi,
    这几天对信号的消失问题搞得头大。加了全局变量限制,似乎依然不行。所以想请看一下我下面的理解。
    交易代码如下示意:
  1. if(MarketPosition == 0 And GetGlobalVar(2) == 0)
  2.     {
  3.      if(Buy condition)
  4.      {
  5.       Buy;
  6.       SetGlobalVar(2,1);                                
  7.      }
  8.     }
复制代码
现在我能确定的是,在Buy之后,我会改变一些变量,使得当前bar再次扫描的时候,这个Buy condition会被判定失效了。但是我同时也会在buy之后,把Global(2)置位,防止再次进入。
    但是实盘来看,好像程序还是又进去了这个判断组,显示信号消失。
    我的感觉,只要加了这个Marketposition的判断,其它附属的判断,好像都没起到作用。不知道我的理解是否正确?
   
    我现在把MarketPosition == 0的语句去掉了,正在观察,不知道能解决不。但是这种测试感觉效率很低,要碰行情的,不知道有没有其它好的办法能快速离线测试信号消失的情况?

    谢谢!
作者: leovone    时间: 2013-3-26 22:04:53

版主呢?为什么没人解答?
作者: 小米    时间: 2013-3-27 09:02:08

这样的写法,就算是稳定的条件,也会因为你的全局变量使用不当从而导致信号消失。
你这样写的目的在于什么呢
作者: ample    时间: 2013-3-27 09:14:05

您的思路是正确的。
但是实盘中没有达到您的想法,依然进入条件,我们一起来分析:
MarketPosition == 0是判断图表当前是否有持仓,如果你的开仓信号消失了,会表示没有持仓,这个条件会满足。
检查一下你的全局变量是否置位。(关键)
还有,请检查你的开仓条件是否稳定,尽量不要使用close之类实时变化的价格等等。

作者: bigzhang    时间: 2013-3-27 11:17:56

额,俺是楼主哈,不过这是去年的帖子了,当时没人回答,没想到等了一年。。。
当时是为什么这样写,我也记不太清了,大概意图是,一般为了防止出现信号闪现,都用类似close[1]之类的数据来判断,我想在一根bar里出现交易信号就进行交易,不用等到下根bar。但是这样容易出现信号闪现问题,所以加了个global参数来做锁定用吧。

作者: grayhat    时间: 2013-3-27 22:46:46

本帖最后由 grayhat 于 2013-3-27 22:56 编辑

这个问题很多人都碰到过,而版主都不能给一些具体的回答,实在令人遗憾。是你不懂,还是懒得说?你作为TB客户的技术顾问,会不懂吗?那么就是懒得说。那么你拿着TB的工资,懒得做份内的工作,这又是一种什么心态?
作者: grayhat    时间: 2013-3-27 22:55:17

解释一下TB的流程很难吗?
TB默认的情况,一系列Tick的交易指令相同、价格相同、条件相同时,不重复发单。所以一般情况下不用全局变量来控制下单,你Buy的条件一直满足、Buy的价格一直不变,它就不会重复发单(只要不因断电等情况重启)
作者: grayhat    时间: 2013-3-27 23:28:35     标题: 标题

本帖最后由 grayhat 于 2013-3-27 23:41 编辑

什么情况下需要加这个GlobalVar(2),想过滤开仓条件时。比如你可以买的K线有很多根,你只想在第一根买,由于某种原因又不能用MarketPosition,那你首先想到的是用全局变量在Buy之后立即斩断。
可惜,这样在实盘中会引起信号消失,你的全局变量把买入条件斩断了,信号自然就消失了。要么用A函数避开信号消失的问题,要么为了兼顾历史回测而采用变通的办法。
可以用Bar的序号来过滤信号,设一个普通变量BuyID,它在第一根Bar或每次卖出时初始化为0,然后一般情况下等值得传递给后面的K线,但If(BuyCondition) BuyID=BuyID[1]+1; 最后,买入条件成了BuyCondition && BuyID==1,完全不用MarketPosition了。用BuyID代替全局变量,就不会信号消失,因为在整个Bar内买入条件始终满足,而这个条件又没有丝毫变化,由于TB内在的控制机制,就不会重复发单。
其实有很多问题动动脑子都是可以解决的。在本版还见过一个问题,断电重启重复发单怎么办,版主竟然说没有办法,只能别让它断电。简直胡扯,这是因为没用自己的钱弄TB,要是用了自己的钱,他自然就想出办法了。
作者: vividboy    时间: 2013-7-23 22:45:08

支持能提供一个深度解析TB运行机理的帮助文档,作为进阶材料。
作者: tubecd1    时间: 2016-2-5 16:02:55

grayhat 发表于 2013-3-27 23:28
什么情况下需要加这个GlobalVar(2),想过滤开仓条件时。比如你可以买的K线有很多根,你只想在第一根买,由 ...

有启发,“由于TB内在的控制机制,就不会重复发单。”如果我是想控制加仓,在加仓的K线的K线不变条件,不知会不会重复发单。因为是加仓,所以在全局交易设置里是选了允许连续建仓的。
作者: xxp1222    时间: 2016-2-15 16:46:35

内部运行机制很重要,我用全局变量也是和预期的不一样:历史回测没问题,实盘tick运行就有问题,很奇怪,还找不到原因。




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2