R-Breaker交易系统策略(TB版)_第1页
R-Breaker交易系统策略(TB版)_第2页
R-Breaker交易系统策略(TB版)_第3页
R-Breaker交易系统策略(TB版)_第4页
R-Breaker交易系统策略(TB版)_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

R_Breaker交易系统(TB版)策略概述R_Breaker交易系统是一种基于价格行为的交易策略,旨在通过计算关键支撑和阻力水平来捕捉市场中的买卖机会。策略中定义了多个参数和变量,以动态调整这些关键水平,并根据当前市场价格走势和持仓情况执行相应的交易操作。参数定义notbef:开始时间参数,默认值为9.00(表示上午9点)notaft:结束时间参数,默认值为14.55(表示下午2点55分)f1:相关计算系数1,默认值为0.35f2:相关计算系数2,默认值为0.07f3:相关计算系数3,默认值为0.25reverse:反转参数,默认值为1.00rangemin:范围最小参数,默认值为0.2xdiv:除数参数,默认值为3变量定义ssetup:空头设置系列bsetup:多头设置系列senter:空头进入系列benter:多头进入系列bbreak:多头突破系列sbreak:空头突破系列ltoday:今日最低价格系列hitoday:今日最高价格系列startnow:开始标识系列div:除数系列rfilter:过滤条件系列i_reverse:反转计算值i_rangemin:范围最小计算值i_vB:与多头相关的数值i_vS:与空头相关的数值主要逻辑初始化变量:在新的K线开始时,初始化开始标识和除数变量。当日期变化时,重置全局变量,并计算新的支撑和阻力水平。价格更新:实时更新今日最高价和最低价。交易逻辑:在特定时间区间内(上午9点到下午2点55分),根据当前价格与预设的支撑阻力水平关系,以及持仓情况,执行相应的交易操作。当价格满足空头或多头条件时,执行卖出或买入操作。持有仓位时,根据反转条件执行平仓操作。若无持仓,且价格突破多头或空头突破水平,则执行相应的买入或卖出操作。平仓处理:在交易时间结束后(下午2点55分到次日开盘前),若持有仓位,则以开盘价平仓。交易操作空头卖出:当价格低于空头进入价时执行卖出。多头买入:当价格高于多头进入价时执行买入。空头平仓:当价格高于进场价一定幅度时执行平仓。多头平仓:当价格低于进场价一定幅度时执行平仓。特殊处理使用全局变量来记录特定事件(如时间变化),以避免重复执行相同操作。通过过滤条件限制交易,确保价格有足够的波动性。注意事项策略中的时间参数notbef和notaft可以直接用时间值(如0.0900和0.1455)表示,以更直接地控制交易时段。变量(如i_vB和i_vS)在策略中未明确使用,是预留用于未来扩展。以下是代码的中文注解:Params//参数定义Numericnotbef(9.00);//开始时间参数Numericnotaft(14.55);//结束时间参数Numericf1(0.35);//相关计算系数1Numericf2(0.07);//相关计算系数2Numericf3(0.25);//相关计算系数3Numericreverse(1.00);//反转参数Numericrangemin(0.2);//范围最小参数Numericxdiv(3);//除数参数Vars//变量定义NumericSeriesssetup(0);//空头设置系列NumericSeriesbsetup(0);//多头设置系列NumericSeriessenter(0);//空头进入系列NumericSeriesbenter(0);//多头进入系列NumericSeriesbbreak(0);//多头突破系列NumericSeriessbreak(0);//空头突破系列NumericSeriesltoday(0);//今日最低价格系列NumericSerieshitoday(9999);//今日最高价格系列NumericSeriesstartnow(0);//开始标识系列NumericSeriesdiv(0);//除数系列BoolSeriesrfilter(false);//过滤条件系列Numerici_reverse;//反转计算值Numerici_rangemin;//范围最小计算值Numerici_vB;//可能与多头相关的数值Numerici_vS;//可能与空头相关的数值Begin//主程序开始i_reverse=reverse*(OpenD(0)/100);//计算反转值i_rangemin=rangemin*(OpenD(0)/100);//计算范围最小值if(BarStatus==0)//如果是新的K线{startnow=0;//初始化开始标识div=max(xdiv,1);//设置除数}if(Date!=Date[1])//如果日期变化{SetGlobalVar(0,0);//设置全局变量0为0SetGlobalVar(1,0);//设置全局变量1为0startnow=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(Time*100>=notbefandTime*100<notaftandstartnow>=2andrfilter)//在特定时间区间,且满足其他条件{if(Time!=GetGlobalVar(1)andGetGlobalVar(1)!=0)//如果时间变化且全局变量1不为0{SetGlobalVar(1,10000);//设置全局变量1}if(hitoday>=ssetupandmarketposition>-1andGetGlobalVar(1)<1)//满足空头条件{If(Low<=(senter+(hitoday-ssetup)/div))//进一步判断{SellShort(1,senter+(hitoday-ssetup)/div);//执行空头卖出操作SetGlobalVar(1,Time);//设置全局变量1Return;//返回}}if(ltoday<=bsetupandmarketposition<1andGetGlobalVar(1)<1)//满足多头条件{If(High>=(benter-(bsetup-ltoday)/div))//进一步判断{Buy(1,benter-(bsetup-ltoday)/div);//执行多头买入操作SetGlobalVar(1,Time);//设置全局变量1Return;//返回}}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>=bbreakandGetGlobalVar(0)==0)//满足多头突破条件{Buy(1,bbreak);//执行多头买入操作Return;//返回}}if(marketposition==0)//如果没有仓位{if(low<=sbreakandGetGlobalVar(0)==0)//满足空头突破条件{SellShort(1,sbreak);//执行空头卖出操作Return;//返回}}}if(Time*100>=notaftandTime<0.1600)//在特定时间区间{if(marketposition==-1)//如果是空头仓位{BuyToCover(1,Open);//执行空头平仓操作}if(marketposition==1)//如果是多头仓位{Sell(1,Open);//执行多头平仓操作}}End//主程序结束策略信号代码ParamsNumericnotbef(9.00);Numericnotaft(14.55);Numericf1(0.35);Numericf2(0.07);Numericf3(0.25);Numericreverse(1.00);Numericrangemin(0.2);Numericxdiv(3);VarsNumericSeriesssetup(0);NumericSeriesbsetup(0);NumericSeriessenter(0);NumericSeriesbenter(0);NumericSeriesbbreak(0);NumericSeriessbreak(0);NumericSeriesltoday(0);NumericSerieshitoday(9999);NumericSeriesstartnow(0);NumericSeriesdiv(0);BoolSeriesrfilter(false);Numerici_reverse;Numerici_rangemin;Numerici_vB;Numerici_vS;Begini_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(Time*100>=notbefandTime*100<notaftandstartnow>=2andrfilter){if(Time!=GetGlobalVar(1)andGetGlobalVar(1)!=0){SetGlobalVar(1,10000);}if(hitoday>=ssetupandmarketposition>-1andGetGlobalVar(1)<1){If(Low<=(senter+(hitoday-ssetup)/div)){SellShort(1,senter+(hitoday-ssetup)/div);SetGlobalVar(1,Time);Return;}}if(ltoday<=bsetupandmarketposition<1andGetGlobalVar(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>=bbreakandGetGlobalVar(0)==0){Buy(1,bbreak);Return;}}if(marketposition==0){if(low<=sbreakandGetGlobalVar(0)==0){SellShort(1,sbreak);Return;}}}if(Time*100>=notaftandTime<0.1600){if(marketposition==-1){BuyToCover(1,Open);}if(marketposition==1){Sell(1,Open);}}End另一版本策略代码ParamsNumericnotbef(9.00);//声明数值参数notbef,初值为9.00,其实不用这个直接表示Time>0.0900更方便的。//Numericnotaft(14.55);//声明数值参数notaft,初值为14.55,同理的,可在正文直接表示Time<0.1455。//Numericf1(0.35);//声明数值参数f1,初值为0.35.//Numericf2(0.07);//声明数值参数f2,初值为0.07.//Numericf3(0.25);//声明数值参数f3,初值为0.25.//Numericreverse(1.00);//声明数值参数reverse,初值为1.00.//Numericrangemin(0.2);//声明数值参数rangemin,初值为0.2.//Numericxdiv(3);//声明数值参数xdiv,初值为3.//VarsNumericSeriesssetup(0);//声明数值序列变量ssetup,初值0.//NumericSeriesbsetup(0);//声明数值序列变量bsetup,初值0.//NumericSeriessenter(0);//声明数值序列变量senter,初值0.//NumericSeriesbenter(0);//声明数值序列变量benter,初值0.//NumericSeriesbbreak(0);//声明数值序列变量bbreak,初值0.//NumericSeriessbreak(0);//声明数值序列变量sbreak,初值0.//NumericSeriesltoday(0);//声明数值序列变量ltoday,初值0.//NumericSerieshitoday(9999);//声明数值序列变量hitoday,初值为9999.//NumericSeriesstartnow(0);//声明数值序列变量startnow,初值0.//NumericSeriesdiv(0);//声明数值序列变量div,初值0.//BoolSeriesrfilter(false);////声明布尔型序列变量rfilter,初值为假。//Numerici_reverse;//声明数值变量i_reverse.//Numerici_rangemin;//声明数值变量i_rangemin.//Numerici_vB;//声明数值变量i_vB.//Numerici_vS;//声明数值变量i_vS.//Begini_reverse=reverse*(OpenD(0)/100);//变量i_reverse=参数reverse*(当天开盘价OpenD(0)/100).//i_rangemin=rangemin*(OpenD(0)/100);//变量i_rangemin=参数rangemin*(当天开盘价OpenD(0)/100).//if(BarStatus==0)//当前为第一根k线的。//{startnow=0;//变量startnow=0.//div=max(xdiv,1);//代入相应参数,即Max(3,1),可得变量div=3.//}if(Date!=Date[1])//假如当前日期不等于前一天的日期的。//{SetGlobalVar(0,0);//全局变量,就是系统本身只定义了一个GlobalVar全局变量,这个全局变量一共有0到49共50个存储位置,你希望在第一个位置放进一个数据(在本软件中一般放下的是静态数据,不因K线的移动而改变),就用setglobalvar(0,你的数),放进第二个数又不希望覆盖第一个,就用setglobalvar(1,你的数),最多能放下共50个静态数据;然后是引用这些数据了,就用getglobalvar(存储位置)等等,这个全局变量最起码是生存于当前的程序模块中,比如用户函数、技术指标、K形态、特征走势、交易指令中。设置setglobalvar(0,你的数),setglobalvar(1,你的数),setglobalvar(2,你的数),setglobalvar(3,你的数),.....可以设置到setglobalvar(49,你的数).调用getglobalvar(0,你的数),getglobalvar(1,你的数),getglobalvar(2,你的数),getglobalvar(3,你的数),...getglobalvar(49,你的数)。//SetGlobalVar(1,0);//设置第二个数据位置了,值为0。//startnow=startnow+1;//变量startnow=0+1.//ssetup=hitoday[1]+f1*(Close[1]-ltoday[1]);//代入初始相应数值,即ssetup=9999+0.35*(前一根k线收盘价-0)。//senter=((1+f2)/2)*(hitoday[1]+Close[1])-(f2)*ltoday[1];//同上代入,senter=((1+0.07)/2)*(9999+Close[1])-0.07*0.//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;//变量hitoday=当前最高价High//ltoday=Low;//变量ltoday=当前最低价Low//rfilter=(hitoday[1]-ltoday[1])>=i_rangemin;//变量rfilter=(前一变量hitoday[1]-前一变量ltoday[1])>=i_rangemin,其实就是昨天振幅是否大于等于当前开盘价/100*0.2//}if(High>hitoday)//假如当前最高价大于hitoday,一般比如焦炭、螺纹很少大于的,铜、锌到是可以。//{hitoday=High;//变量hitoday=当前最高价。//}if(Low<ltoday)//假如当前最低价小于ltoday,几乎没有品种最低价小于0的吧。//{ltoday=Low;//变量itoday=当前最低价。//}if(Time*100>=notbefandTime*100<notaftandstartnow>=2andrfilter)//假如时间大于9点,并且小于两点五十五分,并且变量startnow>=2并且rfilter为真。//{if(Time!=GetGlobalVar(1)andGetGlobalVar(1)!=0)//getglobalvar(1)获取上面我们已经设置的第二个位置,假如时间不等于位置2数值,并且位置2数值不等于0的时候,才执行下列语句(显然我们上边设置第二位置值为0,不符合这个条件的)。//{SetGlobalVar(1,10000);//设置第二位置,值为10000.//}if(hitoday>=ssetupandmarketposition>-1andGetGlobalVar(1)<1)//假如变量hitoday>=变量ssetup,并且MarketPosition>-1(觉得应该写成<>-1,要不然理解就是没有持仓,或者可以持有多单时),并且获取位置2的数值(初值0)小于1的。//{If(Low<=(senter+(hitoday-ssetup)/div))//代入上面算得的数值,假如当前最低价Low<=(变量senter+(变量hitoday-变量ssetup)/3).//{SellShort(1,senter+(hitoday-ssetup)/div);//卖出1手,价格就是依据这个(变量senter+(变量hitoday-变量ssetup)/3)算得的值。//SetGlobalVar(1,Time);//这个设置第二位置,值为当前时间,设置这个时间,我也不知道干啥用的。//Return;//不再执行。//}}if(ltoday<=bsetupandmarketposition<1andGetGlobalVar(1)<1)//假如变量itoday<=变量bsetup,并且MarketPosition<1,并且获取位置2的数值(初值0)小于1的。//{If(High

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论