- 精华
- 11
- 在线时间
- 3540 小时
- UID
- 1
- 积分
- 25127
- 帖子
- 6291
- 阅读权限
- 255
- 注册时间
- 2007-7-20
- 最后登录
- 2024-4-22
- 精华
- 11
- UID
- 1
- 积分
- 25127
- 帖子
- 6291
- 主题
- 149
- 阅读权限
- 255
- 注册时间
- 2007-7-20
- 最后登录
- 2024-4-22
|
Q:如何处理讯号出现又消失的情况?
A:有以下两种方式:
1、使用Buy(1,Close,True)这样的格式,将信号延迟到该Bar走完,下一个Bar的第一个Tick出现的时候发送。
这个时候您可以用Buy(1,Close,True),表示的意思是用当前Bar的收盘价在下一个Bar开始时候交易。
您也可以用Buy(1,NextOpen,True),表示用下一个Bar的开盘价交易。
对于上面的这种处理方式,还有另外一种变通的处理,那就是取上一个Bar的条件或数据,只用当前Bar的Open价来进行判断。这样公式会写得更清晰。以下两段代码效果是相同的。
- Condition = 您的交易条件;
- If(Condition)
- {
- Buy(1,NextOpen,True);
- }
复制代码
- Condition = 您的交易条件;
- If(Condition[1])
- {
- Buy(1,Open);
- }
复制代码
2、第一种处理方式对于时间敏感性不高的系统,是可以采取的,但有些系统,如果选择延迟发送,则会导致比较大的性能下降。
此时我们需要选择另外一种处理方式。使用High,Low,Open这样能够保持住的价格来进行条件判断。
是价格往上的突破形成的交易操作用High来判断。是价格下上的突破形成的交易操作用Low来判断。其他不确定方向的情况最好用Open来判断。
比如,以下两种情况在实时交易方面同样迅速,但后面的就不会出现讯号消失的问题。
- AvgClose = AverageFC(Close,10);
- If(CrossOver(Close,AvgClose))
- {
- Buy(1,AvgClose+MinMove*PriceScale);
- }
复制代码
- AvgClose = AverageFC(Close,10);
- If(CrossOver(High,AvgClose))
- {
- Buy(1,AvgClose+MinMove*PriceScale);
- }
复制代码 |
|