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

标题: 【求教】使用非确定不变的数据作为判断条件,有什么办法使信号不消失? [打印本页]

作者: CWQ_dylan    时间: 2015-1-29 15:30:49     标题: 【求教】使用非确定不变的数据作为判断条件,有什么办法使信号不消失?

小弟有一难题,求各位大神帮帮!如下:

        If(MarketPosition == 1 And BarsSinceEntry >= 1)
        {
            If(Close < MA1)
                {
                        Sell(0,Close);
                }

当K线还在运动时,close 代表的是最新价,而我想要的也是当最新价跌破MA1的时候平仓,
当以最新价平仓后,K线是没有停止运动的,
然而K线停止后,CLose 代表的是收盘价,这样收盘的标示也会随之下移到收盘价的位置,
导致信号标注得不准确(有时候也会导致信号消失),进行回测的结果也是天壤之别!
面对这样的问题,请问该如何解决?谢谢
作者: CWQ_dylan    时间: 2015-1-29 21:32:03

Q:如何处理讯号出现又消失的情况?

A:有以下两种方式:
1、使用Buy(1,Close,True)这样的格式,将信号延迟到该Bar走完,下一个Bar的第一个Tick出现的时候发送。
这个时候您可以用Buy(1,Close,True),表示的意思是用当前Bar的收盘价在下一个Bar开始时候交易。
您也可以用Buy(1,NextOpen,True),表示用下一个Bar的开盘价交易。
对于上面的这种处理方式,还有另外一种变通的处理,那就是取上一个Bar的条件或数据,只用当前Bar的Open价来进行判断。这样公式会写得更清晰。以下两段代码效果是相同的。
  1. 01.Condition = 您的交易条件;

  2. 02.If(Condition)

  3. 03.{

  4. 04.    Buy(1,NextOpen,True);

  5. 05.}
复制代码
  1. 01.Condition = 您的交易条件;

  2. 02.If(Condition[1])

  3. 03.{

  4. 04.    Buy(1,Open);

  5. 05.}
复制代码
2、第一种处理方式对于时间敏感性不高的系统,是可以采取的,但有些系统,如果选择延迟发送,则会导致比较大的性能下降。
此时我们需要选择另外一种处理方式。使用High,Low,Open这样能够保持住的价格来进行条件判断。
是价格往上的突破形成的交易操作用High来判断。是价格下上的突破形成的交易操作用Low来判断。其他不确定方向的情况最好用Open来判断。
比如,以下两种情况在实时交易方面同样迅速,但后面的就不会出现讯号消失的问题。
  1. 01.AvgClose = AverageFC(Close,10);

  2. 02.If(CrossOver(Close,AvgClose))

  3. 03.{

  4. 04.    Buy(1,AvgClose+MinMove*PriceScale);

  5. 05.}
复制代码
  1. 01.AvgClose = AverageFC(Close,10);

  2. 02.If(CrossOver(High,AvgClose))

  3. 03.{

  4. 04.    Buy(1,AvgClose+MinMove*PriceScale);

  5. 05.}
复制代码
以上信息引于:
TB公式之常见问题(Q&A)!
http://bbs.tb18.net/forum.php?mo ... &fromuid=202052


作者: courage121    时间: 2015-5-4 12:57:51

CWQ_dylan 发表于 2015-1-29 21:32
Q:如何处理讯号出现又消失的情况?

A:有以下两种方式:

1.因为AvgClose获取的是当前K线的Close,在实盘中Close会随时改变,因此AvgClose是不真实的
2.用H或者L判断,在实盘中不会出现信号消失,但测试结果也是不准的(小周期影响不大,大周期会有很大影响)
3.通过MinMove*PriceScale这种方式增加滑点,也会导致测试结果不准,但影响不会很大




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