// ------------------------------------------------------------------------
// 简称: CL_KeltnerChannel_L
// 名称: 基于凯特纳通道的交易系统多
// 类别: 公式应用
// 类型: 内建应用
// 输出:
// ------------------------------------------------------------------------
// ----------------------------------------------------------------------//
// 策略说明:
// 基于凯特纳通道的交易系统
//
// 系统要素:
// 1. 计算关键价格的凯特纳通道
// 2. 价格突破凯特纳通道后,设定入场触发单
//
// 入场条件:
// 1、价格突破凯特纳通道后,在当根K线高点之上N倍通道幅度,设定多头触发单,此开仓点将挂单X根k线
// 2、价格突破凯特纳通道后,在当根K线低点之下N倍通道幅度,设定空头触发单,此开仓点将挂单X根k线
//
// 出场条件:
// 1. 价格下穿轨道中轨时平仓
// 2. 价格小于N周期低点平仓
//
// 注:当前策略仅为做多系统, 如需做空, 请参见CL_KeltnerChannel_S
// ----------------------------------------------------------------------//
Params
Numeric length(10); // 均线参数
Numeric Constt(1.2); // 通道倍数
Numeric ChanPcnt(0.5) ; // 入场参数
Numeric buyN(5); // 入场触发条件有效K线周期
Numeric stopN(4); // 低点止损参数
Vars
NumericSeries Price(0); // 关键价格
NumericSeries KCU(0); // 通道上轨
NumericSeries KCL(0); // 通道下轨
NumericSeries ChanRng(0); // 通道宽度
NumericSeries AvgVal(0); // 通道中轨
NumericSeries AvgRange(0); // 真实波动均值(atr)
NumericSeries Setbar(0);
NumericSeries CountL(0); // 触发单周期变量
NumericSeries hh; // 多头触发单价位
NumericSeries Lstopline; // 止损线
bool con; // bool变量
BoolSeries con2; // boolSeries变量
Begin
// 集合竞价和小节休息过滤
If(BarStatus == 2 And IsCallAuctionTime) Return;
// 指标计算
Price = Close; // 关键价格,可以换成中位价等
AvgVal = Average(Price,Length); // 计算均线 默认10周期
AvgRange = Average(TrueRange,Length); // 计算真实波动均值(atr) 默认10周期
KCU = AvgVal + AvgRange*Constt; // 计算通道上轨=均线+1.2倍的10周期真实波动值
KCL = AvgVal - AvgRange*Constt; // 计算通道下轨=均线-1.2倍的10周期真实波动值
ChanRng = (KCU - KCL)/2; // 通道宽度/2
CountL = CountL + 1; // 每经过1根K线CountL+1,用于判断信号取消的变量,上穿上轨后,默认参数:开仓点仅挂单5根k线
con = CrossOver( Price,KCU); // bool变量con,当价格上穿上轨时为真
If(con)
{
SetBar = High;
CountL = 0;
hh = SetBar + (ChanRng*ChanPcnt);
} // 当con为真时,计算开仓线hh,CountL重置为0
// PlotNumeric('KCU',KCU);
// PlotNumeric('KCL',KCL);
// If(MarketPosition == 0)PlotNumeric('hh',hh);
// 系统入场
// 当价格上穿上轨,并且在buyN根K线内>=hh时,买入开仓
If(MarketPosition == 0)
{
If(Price[1] > KCU[1] and CountL <= buyn="" and="" high="">= hh)
{
Buy(0,max(Open,hh));
}
}
// 系统出场
con2 = CrossUnder(Close,AvgVal); // bool变量con,当价格下穿轨道中轨时为真
Lstopline = Lowest(Low[1],stopN);
If(MarketPosition == 1 and BarsSinceEntry > 0)
{
// 价格下穿轨道中轨时平仓
If(con2[1])
{
Sell(0,Open);
}
// 价格小于N周期低点平仓 默认4
If(Low <=>=>
{
Sell(0,Min(Open,Lstopline));
}
}
End
联系客服