广西北海银滩酒店预订:系统交易论坛 国外成熟策略R-Breaker分享
来源:百度文库 编辑:偶看新闻 时间:2024/04/29 11:20:12
标题: 国外成熟策略R-Breaker分享,提供翻译后的TB源码,日内系统 [打印本页]
作者: 穿堂风 时间: 2011-6-27 16:32 标题: 国外成熟策略R-Breaker分享,提供翻译后的TB源码,日内系统
本帖最后由 穿堂风 于 2011-6-27 17:25 编辑
R-Breaker这个系统,可能很多人比我熟悉,也更为了解,有错误处还请谅解
另外我并没实盘验证,在信号那加入了一个逻辑锁,用于控制实盘时有信号,但又不会多次满足反复开仓,这个逻辑锁我很多系统都会有,实战很好用。
作者: 穿堂风 时间: 2011-6-27 16:35
先上TS源码
- {R-Breaker}
- {***********SystemSetup*******************
- Trading between 9:15 and 14:29 ChicagoTime only
- MMStop $1000
- Close End of Day
- 10 min Time Frame
- ******************************************}
- input:notbef(715),notaft(1229);
- var:{input:}f1(.35),f2(0.07),f3(.25),reverse(2.00),
- rangemin(1.15),xdiv(3);
- var:ssetup(0),bsetup(0),senter(0),benter(0),bbreak(0),sbreak(0),
- ltoday(0),hitoday(9999),startnow(0),div(0),
- rfilter(false);
- if currentbar=1 then startnow=0;
- div=maxlist(xdiv,1);
- if d>d[1] then begin
- startnow=startnow+1;
- ssetup=hitoday[1]+f1*(c[1]-ltoday[1]);
- senter=((1+f2)/2)*(hitoday[1]+c[1])-(f2)*ltoday[1];
- benter=((1+f2)/2)*(ltoday[1]+c[1])-(f2)*hitoday[1];
- bsetup=ltoday[1]-f1*(hitoday[1]-c[1]);
- bbreak=ssetup+f3*(ssetup-bsetup){(1.3625*hitoday[1]+.45*c[1])-.8125*ltoday[1]};
- sbreak=bsetup-f3*(ssetup-bsetup){(1.3625*ltoday[1]+.45*c[1])-.8125*hitoday[1]};
- hitoday=h;
- ltoday=l;
- rfilter=hitoday[1]-ltoday[1]>=rangemin;
- end;
- if h>hitoday then hitoday=h;
- if l
- if t>=notbef and t
=2 and rfilter and
- date>entrydate(1) then begin
- if hitoday>=ssetup and marketposition>-1 then
- SELL("Rlev SE") senter+(hitoday-ssetup)/div stop;
- if ltoday<=bsetup and marketposition<1 then
- BUY("Rlev LE") benter-(bsetup-ltoday)/div stop;
- if marketposition=-1 then
- BUY("RbUP LE") entryprice+reverse stop;
- if marketposition=1 then
- SELL("RbDN SE") entryprice-reverse stop;
- if marketposition=0 then
- BUY("Break LE") bbreak stop;
- if marketposition=0 then
- SELL("Break SE") sbreak stop;
- end;
- if t>=notaft and t<>sess1endtime then begin
- if marketposition=-1 then
- EXITSHORT("RbUP SX") entryprice+reverse stop;
- if marketposition=1 then
- EXITLONG("RbDN LX") entryprice-reverse stop;
- EXITSHORT("Late SX") h+.05 stop;
- EXITLONG("Late LX") l-.05 stop;
- END;
作者: 穿堂风 时间: 2011-6-27 16:39
本帖最后由 穿堂风 于 2011-6-27 17:28 编辑
TB源码
- //------------------------------------------------------------------------
- // 简称: R_Breaker
- // 名称:
- // 类别: 公式应用
- // 类型: 用户应用
- // 输出: 穿堂风
- //------------------------------------------------------------------------
- /*R-Breaker*/
- 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=Low;
- }
- if(Time*100>=notbef and Time*100
=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
- // 用户版本 2011/06/27 14:29
- // 版权所有
- // 更改声明 TradeBlazer Software保留对TradeBlazer平台
- // 每一版本的TrabeBlazer公式修改和重写的权利
- //------------------------------------------------------------------------
作者: 穿堂风 时间: 2011-6-27 16:43
这个系统本身是用在SP上,多次出现在实盘赛的前列。
我觉得这个系统的构架和思维非常好,直接拿着套国内商品可能表现很差,不过大家能看到这个系统的核心思想就足够了,可以借鉴。
作者: 穿堂风 时间: 2011-6-27 16:51
忘了说了,得用TB V4,要不V3的系列值传递那还得接力一下。
作者: bluefox 时间: 2011-6-27 16:52
牛人啊 。。。。。。。。。。。
作者: 趋势跟踪 时间: 2011-6-27 18:22
谢谢楼主分享好的交易思路,顶!
作者: 祈人 时间: 2011-6-28 09:07
最好有注释,照顾下低水平的同学
作者: 穿堂风 时间: 2011-6-28 13:04
根据昨日波幅算出几个区间
突破上区间,做多
破下区间,做空
做多后,回撤至次上区间,则认为假突破,反手
做空类似
收盘前平仓,notaft(14.55)设置为14.55为出场时间,14点55分,适用1分钟和5分钟周期,其它周期自己手动修改参数
作者: forfree 时间: 2011-6-28 17:41
rfilter=(hitoday[1]-ltoday[1])>=i_rangemin;
这句是什么意思?
作者: 穿堂风 时间: 2011-6-28 18:05
rfilter=(hitoday[1]-ltoday[1])>=i_rangemin;
这句是什么意思?
forfree 发表于 2011-6-28 17:41
过滤昨日波幅过小的情况,比如昨日一直停板,波动为0,波幅太小没有可操作性。
作者: kings425 时间: 2011-7-7 00:00
rfilter=(hitoday[1]-ltoday[1])>=i_rangemin;
这句是什么意思?
forfree 发表于 2011-6-28 17:41
Rfilter= 这是个开关,用来判断
(hitoday[1]-ltoday[1])>=i_rangemin; 过滤掉最高价减去最低价减值小于i_rangemin
作者: selffinder 时间: 2011-7-8 14:53
请问,V4中还有opend这个函数吗,没找到啊
作者: selffinder 时间: 2011-7-8 15:58
if(Date != Date[1])
{....
startnow=startnow+1;
.....}
.....
if(Time*100>=notbef and Time*100
我的问题是,对于日内交易的话,满足Date != Date[1]条件的不就是当天开盘那根K线吗,那么startnow=startnow+1只能执行一次。后面startnow>=2的条件怎么能满足呢??求解答!!
作者: 穿堂风 时间: 2011-7-8 18:15
if(Date != Date[1])
{....
startnow=startnow+1;
.....}
.....
if(Time*100>=notbef and Time*100=2 and ...
selffinder 发表于 2011-7-8 15:58
有opend;
这块主要是保持原有系统框架,运行一次也会满足,大于等于2,等于2也成立啊.
作者: freetiger 时间: 2011-7-9 11:06
如果论坛多些穿堂风这样的大侠,TB会普及得快了。谢谢分享!
作者: 红永 时间: 2011-7-9 15:35
鼎兴俱乐部也顶一个
作者: speed_fj 时间: 2011-7-10 19:26
就是RB加个反手吧
作者: selffinder 时间: 2011-7-10 22:02
谢谢穿堂风大侠,后来我想了想是可以的。一个界面不一定就只显示一天的k线。
作者: cntxp 时间: 2011-7-11 19:38
本帖最后由 cntxp 于 2011-7-11 19:40 编辑
顶了再学
谢lz
lz在哪看的策略
作者: selffinder 时间: 2011-7-13 10:28
问一个细节性的问题,我想该模型就是利用前天的最高、最低、和收盘来确定今天交易的两个上下限。为啥上下限要通过程序中的那种方式确定呢,有什么统计学优势没有。还有穿堂风大虾,这个程序的参数设定原来是用在哪个品种上的呀?用股指5分钟测了一下,效果不好
作者: 穿堂风 时间: 2011-7-13 12:31
问一个细节性的问题,我想该模型就是利用前天的最高、最低、和收盘来确定今天交易的两个上下限。为啥上下限 ...
selffinder 发表于 2011-7-13 10:28
算法上可以自己去改,这个系统在SP上很有名,算法是根据SP的特性统计的,生搬可能不好,知道大致原理再引申吧.
作者: 穿堂风 时间: 2011-7-13 12:32
顶了再学
谢lz
lz在哪看的策略
cntxp 发表于 2011-7-11 19:38
群里一个人提供的,他叫来刀刀,我翻成了TB
作者: selffinder 时间: 2011-7-15 16:06
根据R_breaker模型做了些修改,但运行时开仓与我的意思不同,比如很多时候都是在刚开盘就建仓,但我的意思是想当其价格突破前日波动幅度后建仓。不知道程序哪里出了错误。请各路大虾特别是穿堂风帮忙诊断一下。程序如下:
Params
Numeric PercentOfRange1(0.5);
Numeric PercentOfRange2(0.4);//突破参数N
Numeric ExitOnCloseMins(14.45);//平仓时间
Numeric MinRange(0.004);//最小Range - 0.2%
Numeric LastTradeMins(14.00);//最后交易时间
Numeric BeginTradeMins(9.00);
Numeric Lots(1);
Numeric reverse(0.01);
Vars
NumericSeries DayOpen;
NumericSeries hightoday;
NumericSeries lowtoday;
NumericSeries preDayRange;
Numeric MaxProfit;
Numeric UpperBand1;
Numeric UpperBand2;
Numeric LowerBand1;
Numeric LowerBand2;
Numeric MyPrice;
Numeric i_reverse;
Begin
i_reverse=reverse*OpenD(0)/100;
If(Date != Date[1])
{
//startnow=startnow+1;
DayOpen = OpenD(0);
preDayRange = HighD(1) - LowD(1);
//如果昨日振幅过小,则取设置的最小振幅
preDayRange = max(preDayRange, DayOpen* MinRange);
UpperBand1= DayOpen + preDayRange* PercentOfRange1;
UpperBand2= DayOpen + preDayRange* PercentOfRange2;
LowerBand1 = Dayopen - preDayRange * PercentOfRange1;
LowerBand2 = Dayopen - preDayRange * PercentOfRange2;
hightoday=High;
lowtoday=low;
}
Else
{
DayOpen=DayOpen[1];
preDayRange=preDayRange[1];
If(High>hightoday)
{
hightoday=High;
}
If(Low
lowtoday=low;
}
}
//未开仓时,判断是否需要开仓
if(MarketPosition == 0){
//多头开仓
If(High >= UpperBand1 && Time < LastTradeMins / 100)
{
MyPrice= max(UpperBand1 , open);
Buy(Lots,MyPrice);
Return;
}
//空头开仓
If(Low <= LowerBand1 && Time < LastTradeMins/100)
{
MyPrice=min(LowerBand1,open);
Sellshort(Lots, MyPrice);
Return;
}
If(hightoday>=UpperBand2 And hightoday
if(low<=Dayopen+preDayRange* PercentOfRange2*0.618)
{
SellShort(1,Dayopen+(UpperBand2-Dayopen)*0.618);
Return;
}
}
If(lowtoday<=LowerBand2 And LowerBand1
if(High>=Dayopen-(Dayopen-LowerBand2)*0.618)
{
Buy(1,Dayopen-(Dayopen-LowerBand2)*0.618);
Return;
}
}
}
//多头止损
If(MarketPosition == 1){
If(EntryPrice-low>=preDayRange*0.618)
{
Sell(Lots,Min(EntryPrice-preDayRange,low));
Return;
}
}
//空头止损
If(MarketPosition == -1){
If(High-EntryPrice>=preDayRange){
BuyToCover(Lots, Max(EntryPrice+preDayRange,High));
Return;
}
}
//收盘平仓
If(Time >= ExitOnCloseMins / 100){
Sell(Lots, Close);
BuyToCover(Lots,Close);
}
End
作者: ww123 时间: 2011-7-17 12:14
最好有注释,照顾下低水平的同学
作者: jlwangsdu 时间: 2011-7-18 10:20
有opend;
这块主要是保持原有系统框架,运行一次也会满足,大于等于2,等于2也成立啊. ...
穿堂风 发表于 2011-7-8 18:15
运行一次startnow的值等于1吧?这时这个条件不满足啊···
作者: kings425 时间: 2011-7-19 09:21
startnow=startnow+1
作者: shijianxulie 时间: 3 天前 09:08
是个过滤器
欢迎光临 系统交易论坛 - 开拓者期货自动交易平台 (http://www.tradeblazer.net/forum/) Powered by Discuz! 7.2