期货软件TB系统源代码解读系列72-凯特纳通道的交易系统
策略说明:
基于凯特纳通道的交易系统
系统要素:
1. 计算关键价格的凯特纳通道
2. 价格突破凯特纳通道后,设定入场触发单
入场条件:
1、价格突破凯特纳通道后,在当根K线高点之上N倍通道幅度,设定多头触发单,此开仓点将挂单X根k线
2、价格突破凯特纳通道后,在当根K线低点之下N倍通道幅度,设定空头触发单,此开仓点将挂单X根k线
出场条件:
1. 价格下穿轨道中轨时平仓
2. 价格小于N周期低点平仓
做多代码及解读如下:
Params
Numeric length(10);
//声明数值参数length,初值10,即均线参数。//
Numeric Constt(1.2);
// 声明数值参数Constt,初值1.2,即通道倍数。//
Numeric ChanPcnt(0.5) ;
// 声明数值参数ChanPcnt,初值0.5,即入场参数。//
Numeric buyN(5);
// 声明数值参数buyN,初值5,入场触发条件有效K线周期。//
Numeric stopN(4);
//声明数值参数stopN,初值4, 低点止损参数。//
Vars
NumericSeries Price(0);
// 声明数值序列变量Price,初值0,即价格。//
NumericSeries KCU(0);
// 声明数值序列变量KCU,初值0,通道上轨。//
NumericSeries KCL(0);
// 声明数值序列变量KCL,初值0,通道下轨。//
NumericSeries ChanRng(0);
//声明数值序列变量ChanRng,初值0, 通道宽度。//
NumericSeries AvgVal(0);
//声明数值序列变量AvgVal,初值0,通道中轨。//
NumericSeries AvgRange(0);
// 声明数值序列变量AvgRange,初值0,真实波动均值。//
NumericSeries Setbar(0);
//声明数值序列变量Setbar,初值0.//
NumericSeries CountL(0);
// 声明数值序列变量CountL,初值0,触发单周期变量。//
NumericSeries hh;
// 声明数值序列变量hh,多头触发单价位。//
NumericSeries Lstopline;
// 声明数值序列变量Lstopline,即止损线。//
bool con;
// 声明布尔型变量con。//
BoolSeries con2;
// 声明布尔型序列变量con2。//
Begin
If(!CallAuctionFilter()) 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)//假如变量con为真。//
{
SetBar = High;
//变量SetBar 赋值为当前最高价。//
CountL = 0;
//变量CountL = 0.//
hh = SetBar + (ChanRng*ChanPcnt);
//直接代入上面求得的数值了。//
}
// 系统入场。//
If(MarketPosition == 0)//当前没有持仓。//
{
If(Price[1] > KCU[1] and CountL <= buyN and High >= hh) // 当价格上穿上轨,并且在buyN根K线内>=变量CountL,且当前最高价大于等于变量hh时,买入开仓。//
{
Buy(0,max(Open,hh));
//开仓买入。//
}
}
// 系统出场。//
con2 = CrossUnder(Close,AvgVal);
// 布尔型变量con2,当价格下穿轨道中轨时为真。//
Lstopline = Lowest(Low[1],stopN);
//止损线为求4周期内的最低价。//
If(MarketPosition == 1 and BarsSinceEntry > 0)//当前持有多单,且建仓数位大于0.//
{
If(con2[1])// 价格下穿轨道中轨时。//
{
Sell(0,Open);
//平仓。//
}
If(Low <= Lstopline)// 当前价格小于4周期低点平仓 .//
{
Sell(0,Min(Open,Lstopline));
//平仓。//
}
}
End
文章图片
做空代码及结果如下:
Params
Numeric length(10);
Numeric Constt(1.2);
Numeric ChanPcnt(0.5) ;
Numeric sellN(5);
Numeric stopN(4);
Vars
NumericSeries Price(0);
NumericSeries KCU(0);
NumericSeries KCL(0);
NumericSeries ChanRng(0);
NumericSeries AvgVal(0);
NumericSeries AvgRange(0);
NumericSeries Setbar(0);
NumericSeries CountS(0);
NumericSeries ll;
NumericSeries Sstopline;
bool con;
BoolSeries con2;
Begin
If(!CallAuctionFilter()) Return;
Price = Close;
AvgVal = Average(Price,Length);
AvgRange = Average(TrueRange,Length);
KCU = AvgVal + AvgRange*Constt;
KCL = AvgVal - AvgRange*Constt;
ChanRng = (KCU - KCL)/2;
CountS = CountS + 1;
con = CrossUnder(price,KCL);
If(con)
{
SetBar = Low;
countS = 0;
ll = SetBar - (ChanRng*Chanpcnt);
}
If(MarketPosition == 0)
{
If(Price[1] < KCL[1] and CountS <= sellN and Low <= ll)
{
SellShort(0,Min(Open,ll));
}
}
con2 = CrossOver(Close,AvgVal);
Sstopline = Highest(High[1],stopN);
If(MarketPosition == -1 and BarsSinceEntry > 0)
{
If(con2[1])
{
BuyToCover(0,Open);
}
If(High >= Sstopline)
{
BuyToCover(0,max(Sstopline,Open));
}
}
【期货软件TB系统源代码解读系列72-凯特纳通道的交易系统】End
文章图片
推荐阅读
- 如何在Mac中的文件选择框中打开系统隐藏文件夹
- 单点登陆
- 操作系统|[译]从内部了解现代浏览器(1)
- 游乐园系统,助力游乐园管理
- 中国MES系统软件随工业化成长
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Cesium|Cesium 粒子系统学习
- 迅捷流程图制作软件的使用方法!
- 我的软件测试开发工程师书单
- Android系统启动之init.rc文件解析过程