您现在的位置:程序化交易>> 期货公式>> 交易开拓者(TB)>> 开拓者知识>>正文内容

使用用CrossOver出现的疑问 - TradeBlazer公式 [开拓者 TB]

  • 咨询内容: 当用两条移动平均线交叉(CrossOver/CrossUnder)作为判断条件时,是否会出现交叉点刚好在两个相邻Bar之间,而导致信号消失?

     

  • TB技术人员: 本帖最后由 傻了吧 于 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

     

  • TB客服: 本帖最后由 傻了吧 于 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.         }
    复制代码 tt.jpg (117.12 KB, 下载次数: 0) 2012-3-1 14:40:12 上传 下载次数: 0

     

  • 网友回复: 我试了下2楼的代码,没有问题啊,开仓什么都好好的
    可能不是代码问题,是你其他设置问题,自己查查看

     

  • 网友回复: 本帖最后由 傻了吧 于 2012-3-1 16:35 编辑

    谢谢zzzlondon 提醒,不是代码问题

【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容