设为首页收藏本站

 找回密码
 注册
查看: 9009|回复: 20
打印 上一主题 下一主题

关于信号消失的技术探讨 [复制链接]

Rank: 1

精华
0
UID
110434
积分
24
帖子
3
主题
1
阅读权限
10
注册时间
2012-5-12
最后登录
2012-6-27
跳转到指定楼层
1#
发表于 2012-5-31 10:12:22 |只看该作者 |正序浏览
信号消失应该是由于判断条件发生了变化导致条件不符而取消交易行为,本人也困惑于其中的一些消失原因,特发帖探讨消失的技术原因,希望大家积极参与讨论,提高对判断条件运行机制的认识。我所认为信号消失的原因大致如下:
第一,序列变量如果取值为invalid 那从第一根bar开始重新计算,因此在条件判断中是否有序列变量存在invalid值导致信号消失?
第二,条件判断一般总是以类似如下形式出现
A=close;
if (marketposition==0 && A>open)
buy(0,0);
如此简单的语句,我想大家都知道会产生信号消失问题,那我不禁想深入研究下,当A>open的条件符合的时候,系统会开仓,在当前bar上行情继续更新,之后A<open的时候那开仓信号就会消失,那为何marketposition变为了1,而A还是>open的时候为何信号不会消失呢?
第三,复杂化上述代码
numeric        A;
numericseries B;
A=close;
//假设close在2000点,open在1999点
if (marketposition==0 && A>open)
{
   buy(0,A);
   B=A;
}
if (marketposition==1 && 2001-B>0)
{
buy(1,B);
B=B+1;
}
这段代码开仓成功后到加仓部分第一次加仓信号会出现,当运行了B=B+1后,B赋值为2001之后,下一个tick信号就会消失,2001-B<0不符合加仓条件了,信号就消失了?

如何解决类似情况,希望有解决经验的同学提出宝贵见解。

Rank: 1

精华
0
UID
110217
积分
36
帖子
11
主题
5
阅读权限
10
注册时间
2012-4-26
最后登录
2022-2-13
21#
发表于 2016-2-5 15:43:19 |只看该作者
我和楼主有同样的问题,信号消失从原因上看是开仓条件发生了变化,信号出现时条件是满足的,不满足时就消失了,这个例子中开仓后改变了开仓条件,使开仓条件又不满足了。
问题是用marketposition==0,按上面的理由开仓后marketposition==1,也应该出现信号消失,但实际不会出现信号消失,只有TB知道是怎么回事。
如果要对加仓进行控制就有点麻烦了,对一个加仓信号只加一次仓,所以要记住这个信号是否加过仓,如果没用过就加,加仓后记住信号已经用过,这样就会改变加仓条件出现信号消失。
楼主对这个问题搞明白了吗?希望能分享。

使用道具 举报

Rank: 1

精华
0
UID
5118
积分
40
帖子
16
主题
8
阅读权限
10
注册时间
2009-8-13
最后登录
2020-3-24
20#
发表于 2013-9-28 07:27:34 |只看该作者
在当根K线上marketposition的变化不会引起信号消失,其他条件的变化会引起信号消失,可能是TB特别考虑过,否则开了仓信号就会消失,TB就没法用了.

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
5525
积分
1473
帖子
429
主题
93
阅读权限
60
注册时间
2009-9-22
最后登录
2022-5-23
19#
发表于 2013-9-18 11:35:13 |只看该作者
谢谢,不是什么高人,大家一起学习进步。

使用道具 举报

Rank: 1

精华
0
UID
80935
积分
26
帖子
11
主题
4
阅读权限
10
注册时间
2011-11-20
最后登录
2018-12-12
18#
发表于 2013-8-8 15:13:56 |只看该作者
efrog 发表于 2012-9-24 22:44
回答的不到位。
(1)信号消失与序列函数无关,只与是否使用所谓的未来函数有关,如Close,因为在当前Bar结 ...

说的比较简单明白,高人啊

使用道具 举报

Rank: 1

精华
0
UID
5118
积分
40
帖子
16
主题
8
阅读权限
10
注册时间
2009-8-13
最后登录
2020-3-24
17#
发表于 2013-8-6 15:31:26 |只看该作者
应该是条件在盘中和盘后都成立就没有信号消失。
你用CLOSE在盘中就是当前值,如果在盘中等于A,就会有信号,但K线走完后是不等于A的,所以盘后是没有这个信号的。
所以只能用close[1],但high>A是可以的,因为盘中出现大于A了,K线走完后真实的high只会>=A

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
66209
积分
128
帖子
78
主题
19
阅读权限
40
注册时间
2011-9-18
最后登录
2020-12-20
16#
发表于 2013-7-29 10:42:48 |只看该作者
跨周期,30s收盘价确认,问题全部解决。

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
116920
积分
625
帖子
530
主题
64
阅读权限
60
注册时间
2013-3-15
最后登录
2014-5-7
15#
发表于 2013-7-23 20:57:31 |只看该作者
感觉TB这样的设计挺让人费解的。感觉要区分信号与实际发单的区别,如果是信号,信号可能出现闪烁是正常的,因为你可能没有实际的买卖交易,人们要根据信号来进行调整。但是如果是已经发单交易了,信号可能就是作为一个实发单的信息进行提示了。从这个意义上说还是有区别的。

也许很多朋友都是卡壳在这里。不知道理解的对不对。但是的确是个让人很纠结的问题。

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
5525
积分
1473
帖子
429
主题
93
阅读权限
60
注册时间
2009-9-22
最后登录
2022-5-23
14#
发表于 2012-9-24 22:50:48 |只看该作者
“A=close;
if (marketposition==0 && A>open)
buy(0,0);
如此简单的语句,我想大家都知道会产生信号消失问题,那我不禁想深入研究下,当A>open的条件符合的时候,系统会开仓,在当前bar上行情继续更新,之后A<open的时候那开仓信号就会消失,那为何marketposition变为了1,而A还是>open的时候为何信号不会消失呢?”

关于这个问题,原因其实很简单。因为marketposition变成1后, 条件(marketposition==0 && A>open)已不再成立,因此不再在执行buy语句了,所以信号消失了。

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
5525
积分
1473
帖子
429
主题
93
阅读权限
60
注册时间
2009-9-22
最后登录
2022-5-23
13#
发表于 2012-9-24 22:44:09 |只看该作者
回答的不到位。
(1)信号消失与序列函数无关,只与是否使用所谓的未来函数有关,如Close,因为在当前Bar结束之前,Close值是一直在变化的;
(2)使用历史数据来作为判断条件就能完全避免信号消失,如 if (Close[1]>Average(Close[1],10) buy(1,open);
        当然也可以用Open、Low或High作为判断条件,关键是如何在判断条件中使用,使其一旦条件成立则不管如何行情变化而该判断条件始终不会变化。
     如: If (Open>Average(Close[1],10) buy(1,open); 或 If (High>Average(Close[1],10) buy(1,open); 但不能使用这样的语句 If (xxx>High) buy(1,open)自己想一想其中的区别。
(3)序列函数千万不能放在If等条件语句内赋值,这在V4版本中是一种错误的用法,对序列函数赋值一定要放在程序的最外面,也就是要保证每一个Bar或Tick都要执行一遍,不然序列函数就会产生非法值,给逻辑判断产生不可预想的错误。

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-21 05:13

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部