yg1025 发表于 2018-5-31 05:33:31

两个问题:为什么求不出来MACDDIFF / 为什么回测不成功

各位老师,同学,

我编写了一段基于MACD的代码(时间单位为1TICK),但是遇到了两个问题:
1.在图标上能看到MACD和 MACDAVE的值,但 MACDDIFF却显示为N/A.
2. 回测不成功,只能显示一次成交,但实际上应该有很多次。
先谢谢大家。
QUOTE'
Params
        Numeric FastLength(12);
        Numeric SlowLength(26);
        Numeric MACDLength(9);               
        Numeric Lots(2);

Vars
        NumericSeries MACDValue;
        Numeric AvgMACD;
        Numeric MACDDiff;
        NumericSeries BarSinceEntry;

Begin
        MACDValue = XAverage( Close, FastLength ) - XAverage( Close, SlowLength ) ;       
        AvgMACD = XAverage(MACDValue,MACDLength);
        MACDDiff = MACDValue - AvgMACD;
        PlotNumeric("MACD",MACDValue);
        PlotNumeric("MACDAvg",AvgMACD);
       
        If (MACDValue<=-10 && AvgMACD<=-10)
                If(MarketPosition==0 && MACDDiff> 0)       
                {
                        Buy(Lots,Open);
                        PlotNumeric("MACDDiff",MACDDiff,0,Red);
                }
        If(MarketPosition==1 && BarSinceEntry>=1 && MACDDiff<0)
                {
                        Sell(0,open);         
                        PlotNumeric("MACDDiff",MACDDiff,0,Green);
                }
End

"unquote

小米 发表于 2018-5-31 09:27:59

你的代码里,MACDDIFF是要求在条件里输出显示的。
也就是说只有在开仓以及平仓那个K线上都有值输出。其它K线就显示为N/A了。
如果想要所有K线上都显示,请修改公式代码 。

yg1025 发表于 2018-5-31 16:24:06

小米老师,看了您很多的帖子。现在我得到您的回复(我第一次问问题),真是有点小激动。我修改了我的代码,去掉了要求输出的语句,而且编译也成功,但是还是两天只有一次成交,这是不应该的。以下是我修改过的代码,请指教。谢谢
QUOTE"
Params
        Numeric FastLength(12);
        Numeric SlowLength(26);
        Numeric MACDLength(9);               
        Numeric Lots(2);

Vars
        NumericSeries MACDValue;
        Numeric AvgMACD;
        Numeric MACDDiff;
        NumericSeries BarSinceEntry;

Begin
        MACDValue = XAverage( Close, FastLength ) - XAverage( Close, SlowLength ) ;       
        AvgMACD = XAverage(MACDValue,MACDLength);
        MACDDiff = MACDValue - AvgMACD;
       
        If (MACDValue<=-10 && AvgMACD<=-10)
                If(MarketPosition==0 && MACDDiff> 0)       
                {
                        Buy(Lots,Open);
                }
        If(MarketPosition==1 && BarSinceEntry>=1 && MACDDiff<0)
                {
                        Sell(0,open);         
                }
End
"uNQUOTE

小米 发表于 2018-6-1 13:34:58

yg1025 发表于 2018-5-31 16:24 static/image/common/back.gif
小米老师,看了您很多的帖子。现在我得到您的回复(我第一次问问题),真是有点小激动。我修改了我的代码, ...

Params
        Numeric FastLength(12);
        Numeric SlowLength(26);
        Numeric MACDLength(9);               
        Numeric Lots(2);

Vars
        NumericSeries MACDValue;
        Numeric AvgMACD;
        Numeric MACDDiff;
       // NumericSeries BarSinceEntry;

Begin
        MACDValue = XAverage( Close, FastLength ) - XAverage( Close, SlowLength ) ;        
        AvgMACD = XAverage(MACDValue,MACDLength);
        MACDDiff = MACDValue - AvgMACD;
        
        If (MACDValue<=-10 && AvgMACD<=-10)
                If(MarketPosition==0 && MACDDiff> 0)        
                {
                        Buy(Lots,Open);
                }
        If(MarketPosition==1 && BarSSinceEntry>=1 && MACDDiff<0)
                {
                        Sell(0,open);         
                }
End
页: [1]
查看完整版本: 两个问题:为什么求不出来MACDDIFF / 为什么回测不成功