CL_DoubleYourFun_L对菜粕策略
//------------------------------------------------------------------------
// 简称: CL_DoubleYourFun_L
// 名称: 基于置换均线的二次穿越突破系统多
// 类别: 公式应用
// 类型: 内建应用
// 输出:
//------------------------------------------------------------------------
//----------------------------------------------------------------------//
// 策略说明:
// 本策略是基于置换均线的二次穿越突破系统
//
// 系统要素:
// 1. 将移动平均K线向后平移一定BAR数即为置换均线
// 2. 相隔一定BAR数的收盘价二次穿越置换均线
// 3. 二次穿越完成时那根BAR的高点(或低点)作为突破进场价
// 4. 完成二次穿越的一定BAR数内突破
// 入场条件:
// 1. 有效期内价格向上突破设定进场价做多
// 2. 有效期内价格向下突破设定进场价做空
// 出场条件:
// 1. 价格反向穿越均线后止损
// 2. 基于N根K线的高低点的跟踪止损
//
// 注: 当前策略仅为做多系统, 如需做空, 请参见CL_DoubleYourFun_S
//----------------------------------------------------------------------//
Params
Numeric AvgLength(5); // 均线周期
Numeric AvgDisplace(5); // 置换均线向后平移Bar数
Numeric ValidBars1(5); // 开仓先决条件之一(收盘价上穿DMA均线)条件值保持有效的BAR数
Numeric ValidBars2(5); // 开仓先决条件之二(上穿后再下穿)条件值保持有效的BAR数
Numeric ValidBars3(5); // 开仓先决条件(上穿再下穿再上穿)条件值保持有效的BAR数
Numeric TrailStopBars(5); // 多少根BAR的最低价作为跟踪止损价
Vars
NumericSeries MA; // 均线
NumericSeries DMA; // 置换均线
BoolSeries ConCrossOver; // 当前BAR是否上穿DMA
BoolSeries ConCrossUnder; // 当前BAR是否下穿DMA
Numeric BarsLastCrsUnd; // 最近一次下穿离现在的BAR数
Numeric BarsFstCrsOvr; // 最近倒数第二次上穿离现在的BAR数
Numeric BarsSecCrsOvr; // 最近的一次上穿离现在的BAR数
BoolSeries EntryFlag(False); // 开仓标志
NumericSeries EntryPoint; // 突破开仓的价格
NumericSeries EntryCount; // 满足开仓先决条件的BAR计数
Numeric ReversalPrice; // 趋势反向的平仓价格
Numeric TrailStopPrice; // 跟踪止损的平仓价格
Begin
// 集合竞价和小节休息过滤
If(!CallAuctionFilter()) Return;
// 计算置换均线
MA = Average(Close, AvgLength);
DMA = MA[AvgDisplace];
PlotNumeric("DMA",DMA);
// 判断收盘价是否穿越置换均线
ConCrossOver = CrossOver(Close,DMA);
ConCrossUnder = CrossUnder(Close,DMA);
// 计算最近的一次下穿发生的BAR离当前BAR的根数
BarsLastCrsUnd = NthCon(ConCrossUnder==True,1);
// 计算最近的两次上穿发生的BAR离当前BAR的根数
BarsFstCrsOvr = NthCon(ConCrossOver==True,2);
BarsSecCrsOvr = NthCon(ConCrossOver==True,1);
// 设置开仓标志
If(ConCrossOver And BarsLastCrsUnd - BarsSecCrsOvr <= ValidBars2 And BarsFstCrsOvr - BarsLastCrsUnd <= ValidBars1)
{
EntryFlag = True;
EntryPoint = High + MinMove * PriceScale;
EntryCount = 0;
}
Commentary("EntryFlag = "+iifstring(EntryFlag,"True","False"));
Commentary("EntryPoint = "+Text(EntryPoint));
Commentary("EntryCount = "+Text(EntryCount));
// 开仓
If(MarketPosition == 0 And EntryCount <= ValidBars3)
{
If(EntryFlag And High >= EntryPoint And Vol >0)
{
Buy(0, Max(Open,EntryPoint));
}
Else
{
EntryCount = EntryCount + 1;
}
}
// 开仓或者开仓先决条件已过有效BAR数,修改开仓标志
If(MarketPosition == 1 Or EntryCount > ValidBars3)
{
EntryFlag = False;
}
// 止损价格计算
ReversalPrice = DMA[1] - MinMove * PriceScale;
TrailStopPrice = Lowest(Low[1],TrailStopBars);
Commentary("ReversalPrice = "+Text(ReversalPrice));
Commentary("TrailStopPrice = "+Text(TrailStopPrice));
// 平仓
If(MarketPosition == 1 And BarsSinceEntry > 0 And Vol >0)
{
If(Low <= Max(ReversalPrice,TrailStopPrice))
{
Sell(0,Min(Open, Max(ReversalPrice,TrailStopPrice) ) );
}
}
End
//------------------------------------------------------------------------
// 编译版本 GS2014.10.25
// 版权所有 TradeBlazer Software 2003-2014
// 更改声明 TradeBlazer Software保留对TradeBlazer平
// 台每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
这个策略对于菜粕有比较好的效果,因为Red_Rover改进版滑点太大了,所以看回测很好,但是实盘就不是太好。而这个策略目前来看收益是不错的,夏普比率也还可以,开仓平仓时间段价格变动温和,不至于太剧烈,所以滑点也比较小
1小时参数: