中孚期货期权网
返回首页

期货软件TB系统源代码解读:基于均线与动能的交易系统策略

admin未知

策略说明:

本策略基于均线与均线间的动能变化建立的交易系统

 系统要素:

1.根长期均线进行趋势判断

2.根较短均线值之差揭示的动能变化为交易提供基础

入场条件:

1. 当价格高于长期均线且动能相对之前变强时做多

2. 当价格低于长期均线且动能相对之前变弱时做空

出场条件: 

1. 当动能减弱时, 价格低于ExitStopN根K线低点多头平仓

2. 当动能增强时, 价格高于ExitStopN根K线高点空头平仓

在看这均线与动能程序化系统代码前,我们先来看一个求振荡函数PriceOscillator,因为在交易系统里涉及到这个函数,当然还涉及到求均值函数,但这个解读过了,这里就不再写了。求振荡函数代码如下:

Params

NumericSeries Price(1);//声明数值序列参数Price,初值1。//

Numeric FastLength(9);//声明数值参数FastLength,初值9.//

Numeric SlowLength(18);//声明数值参数SlowLength,初值18.//

Vars

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

Begin

POValue = Average(Price, FastLength) - Average(Price, SlowLength);//先把相应的价格参数,与相应快慢周期,代入函数Average求得均值,再把这两结果相互一减了。即可求得变量POValue值。//

Return POValue;//把这变量POValue值返回给主函数了。//

End

接下来看均线与动能程序化系统做多的代码解读如下:

Params

    Numeric FastMALength(5); //声明数值参数FastMALength,初值5,即动能计算中的快均线值。//

    Numeric SlowMALength(20); //声明数值参数SlowMALength,初值20,即动能计算中的慢均线值。//

    Numeric TrendMALength(50); //声明数值参数TrendMALength,初值50,即显示趋势的均线值。//

Numeric ExitStopN(3); //声明数值参数ExitStopN,初值3,即求高低点的bar数值。//

Vars

NumericSeries TrendMA(0); //声明数值序列变量TrendMA,初值0,即趋势线。//

NumericSeries PriceOsci(0); //声明数值序列变量PriceOsci,初值0,即均线的动能。//

NumericSeries ExitL; //声明数值序列变量ExitL,即出场价格。//

NumericSeries MP; //声明数值序列变量MP,即MarketPosition状态记录。//

Begin

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

TrendMA = AverageFC(C,TrendMALength);//计算趋势线,即把收盘价与周期50代入函数AverageFC求值,即可求得变量TrendMA值了。//

PriceOsci = PriceOscillator(C,FastMALength,SlowMALength);//计算均线动能,代入相应三个参数了,返回求振荡函数求得值,再把值赋值给变量PriceOsci就行。//

PlotNumeric("TrendMA",TrendMA);//这两线,在tb里是不显示的,但我觉得画出来好分析点,画线趋势线。//

//系统入场。//

If(MarketPosition <> 1 and TrendMA[1]<>0)//假如当前没有持有多单,并且前一趋势线值不等于0.//

{

If(C[1] > TrendMA[1] and PriceOsci[1] <= 0 and PriceOsci[1] > PriceOsci[2] And Vol > 0)//当上根K线的收盘价格高于前一TrendMA线值, 并且如果上根K线的动能相对于上上根为增强且动能仍未负, 则在本根K线开盘价做多。//

{

Buy(0,Open);//以开盘价开多单。//

}

}

//系统出场。//

ExitL = LowestFC(L,ExitStopN);//出场价的算法,把相应数值返回函数LowestFC,快速求出最低价了。//

If(MarketPosition == 1 and MP[1] == 1)//假如当前持有多单,并且前一变量MP等于1.//

{

If(PriceOsci[1] < PriceOsci[2] and Low <= ExitL[1] And Vol > 0)//当均线动能减弱时, 如果价格跌穿过去ExitStopN根K线的低点后平仓。//

{

Sell(0,Min(Open,ExitL[1]));//平仓,开盘价与出场价比较取小值。//

}

}

MP = MarketPosition;//把当前持仓状态赋值给变量MP。//

End

 
 
 

均线与动能程序化系统做空的代码与结果如下:

Params

    Numeric FastMALength(5); 

    Numeric SlowMALength(20); 

    Numeric TrendMALength(50); 

Numeric ExitStopN(3); 

Vars

NumericSeries TrendMA(0); 

NumericSeries PriceOsci(0); 

NumericSeries ExitS; 

NumericSeries MP; 

Begin

If(!CallAuctionFilter()) Return;

TrendMA = AverageFC(C,TrendMALength);

PriceOsci = PriceOscillator(C,FastMALength,SlowMALength);

PlotNumeric("TrendMA",TrendMA);

If(MarketPosition <> -1 and TrendMA[1]<>0)

{

If(C[1] < TrendMA[1] and PriceOsci[1] >= 0 and PriceOsci[1] < PriceOsci[2] And Vol > 0)

{

SellShort(0,Open);

}

}

ExitS = HighestFC(H,ExitStopN);

If(MarketPosition == -1 and MP[1] == -1)

{

If(PriceOsci[1] > PriceOsci[2] and High >= ExitS[1] And Vol > 0)

{

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

}

}

MP = MarketPosition;

End

 

版权声明:本网未注明“来源:中国期货期权网”的稿件均为转载稿,本网转载出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如对稿件内容有疑议,认为转载稿涉及版权等问题,请在两周内来电或来函与中孚期货期权网联系,我们将在第一时间处理



微信扫码二维码 “零佣金”期货开户