tmh402932 发表于 2016-4-12 14:17:20

新手随便写了一个策略,但提示“交易讯号消失,可能导致您的持仓不匹配 ”,求救

下面是源码,请高手点出到底是哪一个环节 导致交易讯号消失,可能导致您的持仓不匹配 的错误
Params
        Numeric FastLength(12);
        Numeric SlowLength(26);
        Numeric MACDLength(9);
        Numeric Hand(1);
Vars
        NumericSeries MACDValue;
        Numeric AvgMACD;
        Numeric MACDDiff;
Begin
        MACDValue = XAverage( Close, FastLength ) - XAverage( Close, SlowLength ) ;       
        AvgMACD = XAverage(MACDValue,MACDLength);
        MACDDiff = MACDValue - AvgMACD;
        PlotNumeric("MACD",MACDValue);
        PlotNumeric("MACDAvg",AvgMACD);
                If (MACDDiff >= 0)       
                PlotNumeric("MACDDiff",MACDDiff,0,Red);
        Else
                PlotNumeric("MACDDiff",MACDDiff,0,Green);
        PlotNumeric("零线",0);
                // 集合竞价和小节休息过滤
        If(!CallAuctionFilter()) Return;
        If(MarketPosition <>1 && MACDDiff>0)
        {
                Buy(Hand,Open);
                PlotString("买入","buy");
        }
       
        If(MarketPosition <>-1 && MACDDiff<0)
        {
                SellShort(Hand,Open);
                PlotString("卖出","sell");
        }
       
                        
       

End

小米 发表于 2016-4-12 15:32:28

MACDDiff的运算中,用到了MACDValue, 而MACDValue是使用close计算,是这里导致的条件的变化,从而信号的消失。

tmh402932 发表于 2016-4-12 15:49:44

小米 发表于 2016-4-12 15:32 static/image/common/back.gif
MACDDiff的运算中,用到了MACDValue, 而MACDValue是使用close计算,是这里导致的条件的变化,从而信号的消 ...

恩,但是系统公式DualMA的实现源码(如下) 中AvgValue1和AvgValue2也是使用了close去计算得来的,那为什么这个DualMA交易策略就不会出现交易讯号消失呢
Params
        Numeric FastLength(5);
        Numeric SlowLength(20);
Vars
        NumericSeries AvgValue1;
        NumericSeries AvgValue2;
Begin
        AvgValue1 = AverageFC(Close,FastLength);
        AvgValue2 = AverageFC(Close,SlowLength);

        PlotNumeric("MA1",AvgValue1);
        PlotNumeric("MA2",AvgValue2);               
       
        // 集合竞价和小节休息过滤
        If(!CallAuctionFilter()) Return;
       
        If(MarketPosition <>1 && AvgValue1 > AvgValue2)
        {
                Buy(1,Open);
        }
       
        If(MarketPosition <>-1 && AvgValue1 < AvgValue2)
        {
                SellShort(1,Open);
        }
        //PlotNumeric("PL",Portfolio_TotalProfit);       
End

小米 发表于 2016-4-12 16:14:39

tmh402932 发表于 2016-4-12 15:49 static/image/common/back.gif
恩,但是系统公式DualMA的实现源码(如下) 中AvgValue1和AvgValue2也是使用了close去计算得来的,那为什 ...

里面的判断条件是使用了回溯值的,不是当前值,是已经稳定了的条件,所以不会产生信号的消失。

tmh402932 发表于 2016-4-12 16:38:18

好的,明白了,O(∩_∩)O谢谢

tmh402932 发表于 2016-4-12 16:38:33

小米 发表于 2016-4-12 16:14 static/image/common/back.gif
里面的判断条件是使用了回溯值的,不是当前值,是已经稳定了的条件,所以不会产生信号的消失。 ...

好的,明白了,O(∩_∩)O谢谢

tmh402932 发表于 2016-4-12 16:39:12

小米 发表于 2016-4-12 16:14 static/image/common/back.gif
里面的判断条件是使用了回溯值的,不是当前值,是已经稳定了的条件,所以不会产生信号的消失。 ...

好的,明白了,O(∩_∩)O谢谢

tmh402932 发表于 2016-4-12 16:39:38

小米 发表于 2016-4-12 16:14 static/image/common/back.gif
里面的判断条件是使用了回溯值的,不是当前值,是已经稳定了的条件,所以不会产生信号的消失。 ...

好的,O(∩_∩)O谢谢

tmh402932 发表于 2016-4-13 09:54:08

小米 发表于 2016-4-12 16:14 static/image/common/back.gif
里面的判断条件是使用了回溯值的,不是当前值,是已经稳定了的条件,所以不会产生信号的消失。 ...

不好意思,我再问您一个问题,以下是我写的一个测试例子,这个也是一直提示 “交易讯号消失”,但是我写的买入条件代码里面并没有包含close啊,谢谢啦

Params
        Numeric FastLength(12);
        Numeric SlowLength(26);
        Numeric MACDLength(9);
        Numeric ChLen(5);
        Numeric ExtraPercentage(30);   //通道突破的幅度(万分比) 300 = 3%
        Numeric Hand(1);
Vars
        NumericSeries MACDValue;
        Numeric AvgMACD;
        Numeric MACDDiff;
        Bool con1;
        Bool con2;
        NumericSeries LEntryPrice;   //开多的突破价格
        NumericSeries SEntryPrice;   //开空的突破价格
        Numeric lavger;
        Numeric savger;
        NumericSeries LCount;   //均线金叉后记录bar序号
        NumericSeries SCount;   //均线死叉后记录bar序号
Begin
        MACDValue = XAverage( Close, FastLength ) - XAverage( Close, SlowLength ) ;       
        AvgMACD = XAverage(MACDValue,MACDLength);
        PlotNumeric("MACD",MACDValue);
        PlotNumeric("MACDAvg",AvgMACD);
                // 集合竞价和小节休息过滤
        If(!CallAuctionFilter()) Return;
       
        con1 = CrossOver(MACDValue,AvgMACD);
        con2 = CrossUnder(MACDValue,AvgMACD);
        lavger = AverageFC(Close,ChLen);
        If(con1)     //金叉   设置买入价格
        {
                LEntryPrice = Open;
                //记录bar序号以控制只在金叉后Chlen根bar内进场否则放弃本次交易
                LCount = CurrentBar;
               
        }
       
        If(MarketPosition <>1 && Open>=LEntryPrice && CurrentBar <=LCount+1 && Vol>0 )
        {
                Buy(Hand,Open);
                PlotString("买入","buy");
                LCount = -999;
        }
        savger = AverageFC(Close,ChLen);
        If(con2){
                SEntryPrice = Open;
                SCount = CurrentBar;
        }
       
        If(MarketPosition <>-1 && Open<=SEntryPrice && CurrentBar <=SCount+1 && Vol>0 )
        {
                SellShort(Hand,Open);
                PlotString("卖出","sell");
                SCount = -999;
        }       
       
End

小米 发表于 2016-4-13 09:58:04

tmh402932 发表于 2016-4-13 09:54 static/image/common/back.gif
不好意思,我再问您一个问题,以下是我写的一个测试例子,这个也是一直提示 “交易讯号消失”,但是我写 ...

条件中的con1,con2的计算是用到了macdvalue和avgmacd得到的。。
变量avgmacd是计算用到了变量macdvalue,
而macdvaluer的计算是用到了close.....
所以,这个公式是使用了close计算的结果 。自然有信号消失的可能。
页: [1] 2 3
查看完整版本: 新手随便写了一个策略,但提示“交易讯号消失,可能导致您的持仓不匹配 ”,求救