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

标题: 使用用CrossOver出现的疑问 [打印本页]

作者: 傻了吧    时间: 2012-2-29 21:09:16     标题: 使用用CrossOver出现的疑问

当用两条移动平均线交叉(CrossOver/CrossUnder)作为判断条件时,是否会出现交叉点刚好在两个相邻Bar之间,而导致信号消失?
作者: 傻了吧    时间: 2012-3-1 14:07:52

本帖最后由 傻了吧 于 2012-3-1 14:08 编辑

用TB自带的KD指标写一个简单判断前一根Bar的K和D值,金叉做多,死叉做空的代码,因为曾经看小米管理说过:
crossover,corssunder,除了可以使用close,open,high,low等K线原有数据的回溯值外,不可以使用A[1],B[1]等这样的变量回溯。
可以使用变通的方法。如果使用回溯的值来计算A,B,再代入这两个crossover,crossunder的函数就可以了。
(参见:http://www.tradeblazer.net/forum ... p;extra=&page=1
所以增加红色字体部分(黑色是TB的KD指标原代码),但图表上无交易信号。请帮忙看看是什么原因,谢谢

Params
        Numeric Length(14);                       
        Numeric SlowLength(3);       
        Numeric SmoothLength(3);
Vars
        NumericSeries HighestValue;                               
        NumericSeries LowestValue;               
        NumericSeries KValue;
        Numeric SumHLValue;
        Numeric SumCLValue;
        NumericSeries DValue;
        NumericSeries TmpK;
        NumericSeries TmpD;


Begin
        HighestValue = HighestFC(High, Length);
        LowestValue = LowestFC(Low, Length);
        SumHLValue = SummationFC(HighestValue-LowestValue,SlowLength);
        SumCLValue = SummationFC(Close - LowestValue,SlowLength);
        If(SumHLValue <> 0)
        {
                KValue = SumCLValue/SumHLValue*100;
        }Else
        {
                KValue = 0;
        }
         DValue = AverageFC(KValue,SmoothLength);

        TmpK=KValue[1];
        TmpD=DValue[1];
               
        If(CrossOver(TmpK,TmpD)){
                Buy(1,Open);
        }
        else if(CrossUnder(TmpK,TmpD)){
                SellShort(1,Open);
        }
       
        PlotNumeric("K",KValue);
        PlotNumeric("D",DValue);
        PlotNumeric("Ref1",20);
        PlotNumeric("Ref2",80);
End
作者: 傻了吧    时间: 2012-3-1 14:40:21

本帖最后由 傻了吧 于 2012-3-1 14:41 编辑

非常奇怪的是,为检查问题,特意在图表上输出Bool值,有“笑脸”但没有开仓讯号,

红色部分替换为以下代码
  1. ConBuy=CrossOver(KValue[1],DValue[1]);
  2.         ConSell=CrossUnder(KValue[1],DValue[1]);
  3. //        If(CrossOver(TmpK,TmpD)){
  4.         If(ConBuy) {
  5.                 Buy(1,Open);
  6.                 PlotBool("B",ConBuy);
  7.         }
  8.         else if(ConSell){
  9.                 SellShort(1,Open);
  10.                 //PlotBool("S",ConSell);
  11.         }
复制代码
[attach]8525[/attach]
作者: zzzlondon    时间: 2012-3-1 15:30:55

我试了下2楼的代码,没有问题啊,开仓什么都好好的
可能不是代码问题,是你其他设置问题,自己查查看
作者: 傻了吧    时间: 2012-3-1 15:43:38

本帖最后由 傻了吧 于 2012-3-1 16:35 编辑

谢谢zzzlondon 提醒,不是代码问题
作者: 傻了吧    时间: 2012-3-1 15:47:37

刚才又用商品测试了一下,铜和豆油5分钟都有信号
作者: 傻了吧    时间: 2012-3-1 16:33:28

我试了下2楼的代码,没有问题啊,开仓什么都好好的
可能不是代码问题,是你其他设置问题,自己查查看 ...
zzzlondon 发表于 2012-3-1 15:30

是设置问题,谢谢提醒
作者: 洪强    时间: 2012-5-29 13:49:35

傻了吧 发表于 2012-3-1 16:33
是设置问题,谢谢提醒

请问是什么设置问题,我也遇到了同样的问题,求解
作者: 傻了吧    时间: 2012-5-29 14:15:19

洪强 发表于 2012-5-29 13:49
请问是什么设置问题,我也遇到了同样的问题,求解

在【全局交易设置】中,把【初始资金】设置的大些。




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