新手随便写了一个策略,但提示“交易讯号消失,可能导致您的持仓不匹配 ”,求救
下面是源码,请高手点出到底是哪一个环节 导致交易讯号消失,可能导致您的持仓不匹配 的错误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
MACDDiff的运算中,用到了MACDValue, 而MACDValue是使用close计算,是这里导致的条件的变化,从而信号的消失。 小米 发表于 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 tmh402932 发表于 2016-4-12 15:49 static/image/common/back.gif
恩,但是系统公式DualMA的实现源码(如下) 中AvgValue1和AvgValue2也是使用了close去计算得来的,那为什 ...
里面的判断条件是使用了回溯值的,不是当前值,是已经稳定了的条件,所以不会产生信号的消失。 好的,明白了,O(∩_∩)O谢谢 小米 发表于 2016-4-12 16:14 static/image/common/back.gif
里面的判断条件是使用了回溯值的,不是当前值,是已经稳定了的条件,所以不会产生信号的消失。 ...
好的,明白了,O(∩_∩)O谢谢 小米 发表于 2016-4-12 16:14 static/image/common/back.gif
里面的判断条件是使用了回溯值的,不是当前值,是已经稳定了的条件,所以不会产生信号的消失。 ...
好的,明白了,O(∩_∩)O谢谢 小米 发表于 2016-4-12 16:14 static/image/common/back.gif
里面的判断条件是使用了回溯值的,不是当前值,是已经稳定了的条件,所以不会产生信号的消失。 ...
好的,O(∩_∩)O谢谢 小米 发表于 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 tmh402932 发表于 2016-4-13 09:54 static/image/common/back.gif
不好意思,我再问您一个问题,以下是我写的一个测试例子,这个也是一直提示 “交易讯号消失”,但是我写 ...
条件中的con1,con2的计算是用到了macdvalue和avgmacd得到的。。
变量avgmacd是计算用到了变量macdvalue,
而macdvaluer的计算是用到了close.....
所以,这个公式是使用了close计算的结果 。自然有信号消失的可能。