R_Break策略
R-Breaker
在外汇交易系统中,枢轴点 (Pivot Points) 交易方法是一种经典的交易策略。Pivot Points是一个非常单纯的阻力支撑体系,根据昨日的最高价、最低价和收盘价,计算出七个价位,包括一个枢轴点、三个阻力位和三个支撑位。
期货
阻力线和支撑线是技术分析中经常使用的工具之一,并且支撑线和压力线的作用是可以互相转化的。从交易的角度上来看,Pivot Point好比是作战地图,给投资者指出了盘中应该关注的支撑和阻力价位,而至于具体的战术配合,Pivot Point并没有具体地规定,完全取决于投资者自身的交易策略。投资者可以根据盘中价格和枢轴点、支撑位和阻力位的相关走势灵活地制定策略,甚至可以根据 关键点位进行加减仓的头寸管理。
期货
R-Breaker根据昨日价格计算出六个价位作为今日盘中交易的参考价位,只是比Pivot Points的设置少了一个枢轴点。R-Breaker与Pivot Points的不同点体现在:通过参数设置,使得六个价格间的距离更加灵活,并且R-Breaker明确了具体的交易策略。根据盘中价格走势,同时采取趋 势追踪和反转策略。图中有颜色背景的区域可以视为观察区,当盘中日内最高价触及Ssetup后出现回落,且跌破参考Senter的阻力线时,采取反转策 略,即在S1点开仓做空;在空仓的情况下,如果盘中价格一路突破Bbreak的阻力线时,则采取趋势追踪策略,即在B2点开仓做多。类似地,B1点反转做 多,S2点顺势做空。
(。。。。。上图进一步的说明详解:主要的思想依据上图为:
根据前一个交易日的收盘价、最高价和最低价数据通过一定方式计算出六个价位,从大到小依次为:突破买入价(Bbreak)、观察卖出价(Ssetup)、反转卖出价(Senter)、反转买入价(Benter)、观察买入价(Bsetup)、突破卖出价(Sbreak)。以此来形成当前交易日盘中交易的触发条件。这里,通过对计算方式的调整。可以调节六个价格间的距离。
交易规则:
反转:
持多单,当日内最高价超过观察卖出价后,盘中价格出现回落,且进一步跌破反转卖出价构成的支撑线时,采取反转策略,即在该点位反手做空;
持空单,当日内最低价低于观察买入价后,盘中价格出现反弹,且进一步超过反转买入价构成的阻力线时,采取反转策略,即在该点位反手做多;
突破:
在空仓的情况下,如果盘中价格超过突破买入价,则采取趋势策略,即在该点位开仓做多;
在空仓的情况下,如果盘中价格跌破突破卖出价,则采取趋势策略,即在该点位开仓做空;。。。)
由于盘中开仓的触发条件涉及到多个价位,对日内价格走势较为敏感,因此该策略适用于在一分钟周期上交易。另外,该策略触发的交易次数并不多,不考虑跨周期的条件。TB IF888的1分钟数据源最早为2010/4/28,其他测试条件和Dual Thrust相同。
图6:R-Breaker策略的累计收益率
股指期货
R-Breaker中距离参数的设置对交易触发次数和最终收益率有一定影响,为了验证其策略的有效性,把R-Breaker的思路移植到距离参 数固定的Pivot Point上,测试结果显示收益率103.6%、最大资产回撤值比例14.6%、胜率40.96%、均盈利/均亏损1.97、交易次数595。
——————————————————————–
R_Break TB代码
——————————————————————–
//————————————————————————
// 简称: _R_Break
// 名称: _R_Break
// 类别: 公式应用
// 类型: 用户应用
// 输出:
//————————————————————————
Params
Numeric notbef(9.00);
Numeric notaft(14.55);
Numeric f1(0.35);
Numeric f2(0.07);
Numeric f3(0.25);
Numeric reverse(1.00);
Numeric rangemin(0.2);
Numeric xdiv(3);
Vars
NumericSeries ssetup(0);
NumericSeries bsetup(0);
NumericSeries senter(0);
NumericSeries benter(0);
NumericSeries bbreak(0);
NumericSeries sbreak(0);
NumericSeries ltoday(0);
NumericSeries hitoday(9999);
NumericSeries startnow(0);
NumericSeries div(0);
BoolSeries rfilter(false);
Numeric i_reverse;
Numeric i_rangemin;
Numeric i_vB;
Numeric i_vS;
Begin
i_reverse = reverse(OpenD(0)/100);
i_rangemin = rangemin(OpenD(0)/100);
if(BarStatus==0)
{
startnow=0;
div=max(xdiv,1);
}
if(Date != Date[1])
{
SetGlobalVar(0,0);
SetGlobalVar(1,0);
startnow=startnow+1;
ssetup=hitoday[1]+f1(Close[1]-ltoday[1]);
senter=((1+f2)/2)(hitoday[1]+Close[1])-(f2)ltoday[1];
benter=((1+f2)/2)(ltoday[1]+Close[1])-(f2)hitoday[1];
bsetup=ltoday[1]-f1(hitoday[1]-Close[1]);
bbreak=ssetup+f3(ssetup-bsetup);
sbreak=bsetup-f3(ssetup-bsetup);
hitoday=High;
ltoday=Low;
rfilter=(hitoday[1]-ltoday[1])>=i_rangemin;
}
if(High>hitoday)
{
hitoday=High;
}
if(Low<ltoday)
{
ltoday=Low;
}
if(Time100>=notbef and Time100<notaft and startnow>=2 and rfilter)
{
if(Time != GetGlobalVar(1) and GetGlobalVar(1) != 0)
{
SetGlobalVar(1,10000);
}
if(hitoday>=ssetup and marketposition>-1 and GetGlobalVar(1)<1)
{
If(Low<=(senter+(hitoday-ssetup)/div))
{
SellShort(1,senter+(hitoday-ssetup)/div);
SetGlobalVar(1,Time);
Return;
}
}
if(ltoday<=bsetup and marketposition<1 and GetGlobalVar(1)<1)
{
If(High>=(benter-(bsetup-ltoday)/div))
{
Buy(1,benter-(bsetup-ltoday)/div);
SetGlobalVar(1,Time);
Return;
}
}
if(marketposition==-1)
{
SetGlobalVar(0,1);
if(High-EntryPrice>=i_reverse)
{
BuyToCover(1,entryprice+i_reverse);
Return;
}
}
if(marketposition==1)
{
SetGlobalVar(0,1);
if(EntryPrice-Low>=i_reverse)
{
Sell(1,entryprice-i_reverse);
Return;
}
}
if(marketposition==0)
{
if(High>=bbreak and GetGlobalVar(0) == 0)
{
Buy(1,bbreak);
Return;
}
}
if(marketposition==0)
{
if(low<=sbreak and GetGlobalVar(0) == 0)
{
SellShort(1,sbreak);
Return;
}
}
}
if(Time*100>=notaft and Time<0.1600)
{
if(marketposition==-1)
{
BuyToCover(1,Open);
}
if(marketposition==1)
{
Sell(1,Open);
}
}
End
//————————————————————————
// 编译版本 GS2010.12.08
// 用户版本 2015/06/28 11:10
// 版权所有 zlqh29000620
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TrabeBlazer公式修改和重写的权利
//————————————————————————