时间:2020-04-14 | 栏目:TB交易开拓者策略 | 点击:次
策略说明:
本策略基于均线与均线间的动能变化建立的交易系统
系统要素:
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
十年专业期货服务平台,全国最低手续费保证金开户,咨询微信:cclk88