// ------------------------------------------------------------------------ // 简称: 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 <= Lstopline) { Sell(0,Min(Open,Lstopline)); } } End |
|