yesterdayvolatility:=STD(REF(CLOSE,1),30);//计算30周期前一根k线收盘价的标准差
deltavolatility:=(todayvolatility-yesterdayvolatility)/todayvolatility;//计算2个标准差的振幅
lookbackdays:=POW(20*(1+deltavolatility),BARPOS);//计算20*(1+deltavolatility) 的幂级数
lookbackdays1:=IFELSE(lookbackdays>60,60,IFELSE(lookbackdays<20,20,lookbackdays));//当幂级数大于60取60小于20取20在这2者之间取当前值
Numeric ceilingAmt(60);
Numeric floorAmt(20);
Numeric bolBandTrig(2.00);
Vars
Numeric lookBackDays(20);
Numeric todayVolatility(0);
Numeric yesterDayVolatility(0);
Numeric deltaVolatility(0);
NumericSeries buyPoint(0);
NumericSeries sellPoint(0);
NumericSeries longLiqPoint(0);
NumericSeries shortLiqPoint(0);
Numeric upBand(0);
Numeric dnBand(0);
Numeric MidLine(0);
Numeric Band(0);
Begin
todayVolatility = StandardDev(Close,30,1);
yesterDayVolatility = StandardDev(Close[1],30,1);
deltaVolatility = (todayVolatility - yesterDayVolatility)/todayVolatility;
lookBackDays = lookBackDays * (1 + deltaVolatility);
lookBackDays = Round(lookBackDays,0);
lookBackDays = Min(lookBackDays,ceilingAmt);
lookBackDays = Max(lookBackDays,floorAmt);
MidLine = AverageFC(Close,lookBackDays);
Band = StandardDev(Close,lookBackDays,bolBandTrig);
upBand = MidLine + bolBandTrig * Band;
dnBand = MidLine - bolBandTrig * Band;
buyPoint = Highest(High[1],lookBackDays);
sellPoint = Lowest(Low[1],lookBackDays);
longLiqPoint = Average(Close[1],lookBackDays);
shortLiqPoint = Average(Close[1],lookBackDays);
if(Close > upBand)
{
If(CrossOver(high,buyPoint)) Buy(1,max( buyPoint, Low ));
Commentary("多头触发价:"+Text(buyPoint));
}
if(Close < dnBand)
{
If(CrossUnder(Low,sellPoint )) SellShort(1,min( sellPoint , High ));
Commentary("空头触发价:"+Text(sellPoint));
}
if(MarketPosition == 1)
{
If(CrossUnder(Low,longLiqPoint )) Sell(1,min( longLiqPoint , High ));
Commentary("多头退出:"+Text(longLiqPoint));
}
if(MarketPosition == -1)
{
If(CrossOver(high,shortLiqPoint)) BuyToCover(1,max( shortLiqPoint, Low ));
Commentary("多头退出:"+Text(shortLiqPoint));
}
End
分析5楼源码与6楼源码是有差异的
如果需要5楼源码可以改写,可以通过MQ实现,MQ官网:http://www.wenhua.com.cn/
修改为MQ源码:
Params
Numeric ceilingAmt(60);
Numeric floorAmt(20);
Numeric bolBandTrig(2);
Vars
Numeric lookBackDays(20);
Numeric todayVolatility(0);
Numeric yesterDayVolatility(0);
Numeric deltaVolatility(0);
NumericSeries buyPoint(0);
NumericSeries sellPoint(0);
NumericSeries longLiqPoint(0);
NumericSeries shortLiqPoint(0);
Numeric upBand(0);
Numeric dnBand(0);
Numeric MidLine(0);
Numeric Band(0);
Begin
todayVolatility = StandardDev(Close,30,1);
yesterDayVolatility = StandardDev(Close[1],30,1);
deltaVolatility = (todayVolatility - yesterDayVolatility)/todayVolatility;
lookBackDays = lookBackDays * (1 + deltaVolatility);
lookBackDays = Round(lookBackDays,0);
lookBackDays = Min(lookBackDays,ceilingAmt);
lookBackDays = Max(lookBackDays,floorAmt);
MidLine = AverageFC(Close,lookBackDays);
Band = StandardDev(Close,lookBackDays,bolBandTrig);
upBand = MidLine + bolBandTrig * Band;
dnBand = MidLine - bolBandTrig * Band;
buyPoint = Highest(High[1],lookBackDays);
sellPoint = Lowest(Low[1],lookBackDays);
longLiqPoint = Average(Close[1],lookBackDays);
shortLiqPoint = Average(Close[1],lookBackDays);
if(Close > upBand)
{
If(Cross(high,buyPoint)) Buy(1,max( buyPoint, Low ));
Commentary("多头触发价:"+Text(buyPoint));
}
if(Close < dnBand)
{
If(CrossDown(Low,sellPoint )) SellShort(1,min( sellPoint , High ));
Commentary("空头触发价:"+Text(sellPoint));
}
if(MarketPosition == 1)
{
If(Cross(Low,longLiqPoint )) Sell(1,min( longLiqPoint , High ));
Commentary("多头退出:"+Text(longLiqPoint));
}
if(MarketPosition == -1)
{
If(Cross(high,shortLiqPoint)) BuyToCover(1,max( shortLiqPoint, Low ));
Commentary("多头退出:"+Text(shortLiqPoint));
}
End