//------------------------------------------------------------------------
// 简称: ADXandMAChannelSys_L
// 名称: 基于ADX及EMA的交易系统多
// 类别: 公式应用
// 类型: 内建应用
// 输出:
//----------------------------------------------------------------------//
Params
Numeric DMI_N(14);
Numeric DMI_M(30);
Numeric AvgLen(30);
Numeric EntryBar(2);
Vars
Series<Numeric> oDMIPlus;
Series<Numeric> oDMIMinus;
Series<Numeric> oDMI;
Series<Numeric> oADX;
Series<Numeric> oADXR;
Series<Numeric> oVolty;
Series<Numeric> sDMI;
Series<Numeric> sADX;
Series<Numeric> cumm;
Series<Numeric> sVolty;
Numeric PlusDM;
Numeric MinusDM;
Numeric UpperMove;
Numeric LowerMove;
Numeric SumPlusDM(0);
Numeric SumMinusDM(0);
Numeric SumTR(0);
Series<Numeric> AvgPlusDM;
Series<Numeric> AvgMinusDM;
Numeric SF;
Numeric Divisor;
Numeric i;
Series<Numeric> TRValue;
Series<Numeric> UpperMA(0);
Series<Numeric> LowerMA(0);
Series<Numeric> ADXValue(0);
Series<Numeric> ChanSpread(0);
Bool BuySetup(False);
Series<Numeric> BuyTarget(0);
Series<Numeric> MROBS(0);
Series<Bool> Con1;
Numeric Minpoint;
Events
OnBar(ArrayRef<Integer> indexs)
{
Minpoint=Minmove*PriceScale;
SF = 1/DMI_N;
TRValue = TrueRange;
If(CurrentBar == DMI_N)
{
For i = 0 To DMI_N - 1
{
PlusDM = 0 ;
MinusDM = 0 ;
UpperMove = High[i] - High[ i + 1 ] ;
LowerMove = Low[ i + 1 ] - Low[i] ;
If (UpperMove > LowerMove And UpperMove > 0 )
{
PlusDM = UpperMove;
}Else if (LowerMove > UpperMove And LowerMove > 0)
{
MinusDM = LowerMove ;
}
SumPlusDM = SumPlusDM + PlusDM ;
SumMinusDM = SumMinusDM + MinusDM ;
SumTR = SumTR + TRValue[i] ;
}
AvgPlusDM = SumPlusDM / DMI_N ;
AvgMinusDM = SumMinusDM / DMI_N ;
sVolty = SumTR / DMI_N ;
}
Else if(CurrentBar > DMI_N)
{
PlusDM = 0 ;
MinusDM = 0 ;
UpperMove = High - High[1] ;
LowerMove = Low[1] -Low ;
If (UpperMove > LowerMove And UpperMove > 0 )
{
PlusDM = UpperMove;
}Else if (LowerMove > UpperMove And LowerMove > 0 )
{
MinusDM = LowerMove ;
}
AvgPlusDM = AvgPlusDM[1] + SF * ( PlusDM - AvgPlusDM[1] ) ;
AvgMinusDM = AvgMinusDM[1] + SF * ( MinusDM - AvgMinusDM[1] ) ;
sVolty = sVolty[1] + SF * ( TRValue - sVolty[1] ) ;
}
Else
{
oDMIPlus = InvalidNumeric;
oDMIMinus = InvalidNumeric;
oDMI = InvalidNumeric;
oADX = InvalidNumeric;
oADXR = InvalidNumeric;
oVolty = InvalidNumeric;
}
If (sVolty > 0)
{
oDMIPlus = 100 * AvgPlusDM / sVolty ;
oDMIMinus = 100 * AvgMinusDM / sVolty ;
}Else
{
oDMIPlus = 0 ;
oDMIMinus = 0 ;
}
Divisor = oDMIPlus + oDMIMinus ;
if (Divisor > 0)
{
sDMI = 100 * Abs( oDMIPlus - oDMIMinus ) / Divisor;
}else
{
sDMI = 0 ;
}
cumm=Cum( sDMI );
If(CurrentBar > 0)
{
If (CurrentBar <= DMI_N)
{
sADX = Cumm / CurrentBar ;
oADXR = ( sADX + sADX[ CurrentBar - 1 ] ) * 0.5 ;
}Else
{
sADX = sADX[1] + SF * ( sDMI - sADX[1] ) ;
oADXR = ( sADX + sADX[ DMI_M - 1 ] ) * 0.5 ;
}
}
oVolty = sVolty;
oDMI = sDMI;
oADX = sADX;
ADXValue = oADX;
}
函数最后大括号语句 报错 说是 OnBar 缺少返回值 这个是什么原因。