期货软件TB系统源代码解读系列66-价格区间突破的交易系统

策略说明: 基于通道突破的判断

系统要素:

1. 计算50根k线最高价的区间

2. 计算30根k线最低价的区间

入场条件:

1.价格高于50根K线最高价的区间入场

出场条件:

1. 当前价格低于30根K线最低价的区间出场

2. 当前价格低于入场价一定ATR波动率幅度出场

做多代码及解读如下:

Params

Numeric Length1(50); //声明数值参数Length1,初值50,即长周期区间参数。//

Numeric Length2(30); //声明数值参数Length2,初值30,即短周期区间参数。//

Numeric IPS(4);//声明数值参数IPS,初值4,保护止损波动率参数。//

Numeric AtrVal(10);//声明数值参数AtrVal,初值10,波动率参数。//

Vars 

NumericSeries ProtectStopL;//声明数值序列变量ProtectStopL。//

NumericSeries ATR;//声明数值序列变量ATR。//

NumericSeries Upperband;//声明数值序列变量Upperband。//

NumericSeries Lowerband; //声明数值序列变量Lowerband。//

NumericSeries Exitlong;//声明数值序列变量Exitlong。//

NumericSeries Exitshort;//声明数值序列变量Exitshort。//

Numeric L2;//声明数值变量L2.//

Numeric L1;//声明数值变量L1.//

Numeric Minpoint;//声明数值变量Minpoint。//

Begin

If(!CallAuctionFilter()) Return;// 集合竞价和小节休息过滤。//

Minpoint = Minmove*PriceScale;//一跳的固定公式。//

  ATR = AvgTrueRange(AtrVal); //计算ATR值。//

L1 = Max(Length1,Length2); //进场周期选择较大的区间参数。//

L2 = Min(Length1,Length2); //出场周期选择较小的区间参数。//

Upperband = Highest(High, L1); //长周期最高价区间。//

Lowerband = lowest(Low,L1); //长周期最低价区间。//

Exitlong = Lowest(Low,L2); //短周期最低价区间。//

Exitshort = Highest(high,L2); //短周期最高价区间。//

//系统入场 。//

If(Marketposition == 0 and High >= Upperband[1] + Minpoint And Vol > 0)    //当前没有持仓,且当前最高价格大于长周期最高价区间入场做多。//

{

Buy(0, Max(Open, Upperband[1] + Minpoint));//开多。//

ProtectStopL = Entryprice - IPS*ATR[1];//保护性止损计算公式。//

}

//系统出场。//

If(MarketPosition == 1 and BarsSinceEntry >0 And Vol > 0)//当前持有多单,且建仓数位大于0,且成交量大于0。//

{

If( Low <= ProtectStopL[1] and ProtectStopL[1] >= Exitlong[1]) //最低价格小于等于前一个保护性止损,且前一个保护性止损大于等于前一个短周期最低价区间。//

{

Sell (0,Min(Open,ProtectStopL[1]));//平仓。//

}

Else if (Low <= Exitlong[1] - Minpoint)   //价格低于短周期最低价区间出场。//

{

Sell(0, Min( Open, Exitlong[1] - Minpoint));//平仓。//

}

}

End

做空代码及结果如下:

Params

Numeric Length1(50);

Numeric Length2(30);

Numeric IPS(4);

Numeric AtrVal(10);

Vars 

NumericSeries ProtectStopS;

NumericSeries ATR;

NumericSeries Upperband;

NumericSeries Lowerband; 

NumericSeries Exitlong;

NumericSeries Exitshort;

Numeric L2;

Numeric L1;

Numeric Minpoint;

Begin

If(!CallAuctionFilter()) Return;

Minpoint = Minmove*PriceScale;

  ATR = AvgTrueRange(AtrVal);

L1 = Max(Length1,Length2);      

L2 = Min(Length1,Length2);

Upperband = Highest(High, L1);   

Lowerband = lowest(Low,L1);     

Exitlong = Lowest(Low,L2);   

Exitshort = Highest(High,L2);   

If(Marketposition ==0 and Low <= Lowerband[1] - Minpoint And Vol > 0)

{

  Sellshort(0, Min(Open , Lowerband[1] - Minpoint));

ProtectStopS = Entryprice + IPS*ATR[1];

}

If(MarketPosition == -1 and BarsSinceEntry>0 And Vol > 0)

{

  If(High >= ProtectStopS[1] and ProtectStopS[1] <= Exitshort[1] )

{

BuyToCover(0, Max(Open , ProtectStopS[1]));  

}

Else if ( High >= Exitshort[1] + Minpoint)

{

BuyToCover(0, Max(Open , Exitshort[1] + Minpoint)); 

}

}

End

我个人感觉这个系统还是不错的,那些参数要是不符合你,可以根据个人意愿修改的。

你可能感兴趣的:(期货软件TB系统源代码解读系列66-价格区间突破的交易系统)