Params
Numeric MomLen(5); //声明数值参数MomLen,初值5,即VWM的参数了。//
Numeric AvgLen(20); //声明数值参数AvgLen,初值20,亦即VWM的参数。//
Numeric ATRLen(5); //声明数值参数ATRLen,初值5,即ATR的参数。//
Numeric ATRPcnt(0.5); //声明数值参数ATRPcnt,初值0.5,即入场价格波动率参数。//
Numeric SetupLen(5); //声明数值参数SetupLen,初值5,即条件持续有效K线数。//
Vars
NumericSeries VWM(0); //声明序列变量VWM,初值0.//
NumericSeries AATR(0); //声明序列变量AATR,初值0.//
NumericSeries SEPrice(0); //声明序列变量SEPrice,初值0.//
BoolSeries BullSetup(False); //声明布尔型序列变量BullSetup,初值为假。//
BoolSeries BearSetup(False); //声明布尔型序列变量BearSetup,初值为假。//
NumericSeries SSetup(0);//声明序列变量SSetup,初值0.//
Begin
If(!CallAuctionFilter()) Return;// 集合竞价和小节休息过滤。//
VWM = XAverage(Vol * Momentum(Close, MomLen), AvgLen); //固定函数Vol,直接用表示的就是成交量;求动量函数Momentum(Close, MomLen),意思计算5周期以来的收盘价的动量值;函数XAverage,就是求平均值,把动量乘以成交量所得的值与20周期返回去求平均值了。//
AATR = AvgTrueRange(ATRLen);//函数AvgTrueRange,求真实波动值,这个之前也解读过了,把参数5返回去求值就得了。//
BullSetup = CrossOver(VWM,0); // 函数CrossOver,即突破了,变量VWM突破0线。//
BearSetup = CrossUnder(VWM,0); //变量VWM下穿0线。//
If (BearSetup ) //假如布尔型序列变量BearSetup为真。//
{
SSetup = 0;//变量SSetup = 0 //
SEPrice = Close; //变量SEPrice = 当前收盘价。//
}
Else //变量BearSetup为假的时候。//
SSetup = SSetup[1] + 1; //变量SSetup = 前一个变量SSetup[1] + 1.//
//系统入场
If (CurrentBar > AvgLen and MarketPosition == 0 ) //假如当前公式应用商品在当前Bar的索引值 > 5,并且当前没有持仓的。//
{
If( Low <=SEPrice[1] - (ATRPcnt * AATR[1]) and SSetup[1] <= SetupLen and SSetup >= 1 And Vol > 0) //假如当前最低价Low <= 前一个变量SEPrice[1] - (0.5*前一个AATR[1] ),并且前一变量SSetup[1] <= 当前变量SetupLen ,并且SSetup >=1 ,并且成交量Vol >0//
{
SellShort(0, Min(Open,SEPrice[1] - (ATRPcnt * AATR[1]))) ; //卖出1手,价格就是开盘价与这计算公式的价格对比了,取小值。//
}
}
//系统出场
If (MarketPosition == -1 and BarsSinceEntry > 0 And Vol > 0) //假如持有空单,并且建仓位大于0,而且成交量大于0。//
{
If( BullSetup[1] == True )//假如前一个变量BullSetup[1] 为真。//
{
Buytocover(0,Open);//以开盘价平空单仓。//
}
}
End