我在使用沪镍主连测试策略的时候 发现6个指标中有两个指标。在一个时间节点之后突然失效。然后每个参数让他显示出来。一个一个看。没有看出任何错误。恳请各位大佬帮忙。以下是其中两个指标的代码。
//------------------------------------------------------------------------
// 简称: SLY001
// 名称: 火炼金
// 类别: 公式应用
// 类型: 用户应用
// 输出: Void
//------------------------------------------------------------------------
//----------------------------------------------------------------------
// 开仓条件已更新
//----------------------------------------------------------------------
Params //此处添加参数
Numeric lots(0);
Numeric adxlen(9);
Numeric AfStep(0.01);
Numeric AfLimit(5);
Numeric level(35);
Numeric adxlevel(20);
//Numeric stopl(9);//止损点数
//Numeric proft(36);//止盈点数点数
//Numeric trailingpoint(29);//百分比
Numeric InitialStop(14); //初始止损(千分之N)
Numeric TrailingStop1(28); //追踪止损启动(千分之N)
Numeric TrailingStop2(41); //追踪止损回落(千分之N)
//Numeric TT(3);
Numeric Length1(36);
Numeric DUO (24);
Numeric KONG (1);
Numeric PDUO (19);
Numeric PKONG (5);
Numeric LIAN (3);
Vars //此处添加变量
Series<Numeric> Value1;
Numeric oParCl;
Numeric oParOp;
Numeric oPosition;
Numeric oTransition;
Series<Numeric> oPo;
Series<Numeric> highafterentry;
Series<Numeric> lowafterentry;
Numeric oDMIPlus;
Numeric oDMIMinus;
Numeric oDMI;
Numeric oADX;
Numeric oADXR;
Numeric oVolty;
Series<Numeric> ADX;
//-------止损参数---------
Series<Numeric> HighestAfterEntry;
Series<Numeric> LowestAfterEntry;
Numeric StopLine;
Numeric winLine;
//string FF;
Series<Numeric> X_7;
Series<Numeric> X_8;
Series<Numeric> X_9;
Bool X_10;
Series<Numeric> X_11;
Series<Numeric> X_17;
Series<Numeric> X_171;
Series<Numeric> X_18;
Series<Numeric> X_19;
Bool X_20;
Series<Numeric> X_21;
Defs //此处添加公式函数
Events //此处实现事件函数
OnInit() //初始化事件函数,策略运行期间,首先运行且只有一次
{
//AddDataFlag(Enum_Data_RolloverBackWard()); //后复权
AddDataFlag(Enum_Data_RolloverRealPrice()); //映射真实价格
AddDataFlag(Enum_Data_AutoSwapPosition()); //自动换月
//FF = text(tt) +m;
// SubscribeBar(Symbol, FF, BeginDateTime, 0, Enum_Data_RolloverBackWard);
}
onBar(ArrayRef<Integer> indexs) //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
{
If( Open == Q_UpperLimit() Or Open == Q_LowerLimit() )
{
Return; //涨停跌停过滤
}
//X11
X_7 = Abs(CLOSE-Lowest(LOW,8))/Abs(Highest(HIGH,8)-Lowest(LOW,8))*100;
X_8 = SMA(X_7,3,1);
X_9 = SMA(X_8,3,1);
If(X_8>X_9)
{
X_11 = 2;
}
Else{
X_11 = 0;
}
PlotNumeric( X_11 ,X_11);
PlotNumeric( X_7 ,X_7);
PlotNumeric( X_8 ,X_8);
PlotNumeric( X_9 ,X_9);
//X21
X_17 = (-(Highest(HIGH,13)-CLOSE))/(Highest(HIGH,13)-Lowest(LOW,13))*100;
//X_171 = Abs(-(Highest(HIGH,13)-CLOSE))/Abs(Highest(HIGH,13)-Lowest(LOW,13))*100;
X_18 = SMA(X_17,3,1);
X_19 = SMA(X_18,3,1);
If(X_18>X_19)
{
X_21 = 4 ;
}
Else{
X_21 = 0 ;
}
PlotNumeric( X_21 ,X_21);
//PlotNumeric( X_17 ,X_17);
//PlotNumeric( X_171 ,X_171);
//PlotNumeric( X_18 ,X_18);
//PlotNumeric( X_19 ,X_19);
//开仓平仓
If(( X_11 + X_21 ) <= KONG)
{
If( shortEntries<LIAN )
{
sellshort(lots,Open);
}
}
If(MarketPosition == -1 And ( X_11 + X_21 ) > PKONG)
{
BuyToCover (0,Open);
Return;
}
Return;
}
//------------------------------------------------------------------------
附图:
X_7 = Abs(CLOSE-Lowest(LOW,8))/Abs(Highest(HIGH,8)-Lowest(LOW,8))*100;
X_8 = SMA(X_7,3,1);
X_9 = SMA(X_8,3,1);
检查分母为0的情况
万分感谢 。
因为我加的有涨停跌停过滤。涨停跌停策略不进行判断。万万没有想到 这样 的情况下 还有 分母是0的情况。。
经查就是 这个原因 。我在分子分母各+1 解决了。这样应该没问题了吧。多谢。