WR威廉指标策略(TB版)_第1页
WR威廉指标策略(TB版)_第2页
WR威廉指标策略(TB版)_第3页
WR威廉指标策略(TB版)_第4页
WR威廉指标策略(TB版)_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

WR威廉指标策略(TB版)策略概述WR威廉指标策略是一种基于技术分析的交易策略,通过结合威廉指标(WR)和相对强弱指数(RSI)来判断市场的买卖点。该策略还包括了跟踪止损和固定止损的设置,以提高交易的风险管理效率。策略参数Length1:用于计算威廉指标的周期数,默认值为10。Length:用于计算RSI指标的周期数,默认值为14。TrailingStart1:第一级跟踪止盈启动设置,默认值为50。TrailingStart2:第二级跟踪止盈启动设置,默认值为80。TrailingStop1:第一级跟踪止盈设置,默认值为30。TrailingStop2:第二级跟踪止盈设置,默认值为20。StopLossSet:固定止损点数,默认值为30。指标计算威廉指标(WR):公式:PRValue=100-((HH-Close)/Divisor)*100其中,HH为过去Length1天内的最高价,Divisor为HH与过去Length1天内的最低价之差,Close为当日收盘价。相对强弱指数(RSI):通过计算价格变动的平均收益与平均损失的比率来评估市场的强弱。买卖规则买入条件:当威廉指标(前一日值)大于等于50且RSI指标(前一日值)也大于等于50时,买入。卖出条件:当威廉指标(前一日值)小于等于50且RSI指标(前一日值)也小于等于50时,卖出(或做空)。止损与止盈固定止损:根据设定的StopLossSet值,在达到设定的止损点时进行平仓。跟踪止损:第一级:当价格从买入点上涨(或下跌)超过TrailingStart1MinPoint时,若价格回落超过TrailingStop1MinPoint,则触发平仓。第二级:当价格从买入点上涨(或下跌)超过TrailingStart2MinPoint时,若价格回落超过TrailingStop2MinPoint,则触发平仓。策略流程计算威廉指标和RSI指标。判断当前市场状况是否符合买入或卖出条件。若符合条件,则执行买入或卖出操作。监控价格走势,根据止损和止盈规则进行平仓操作。附加说明策略中还包括了对集合竞价和小节休息的过滤,以确保交易信号的准确性。策略通过记录开仓后的最高价和最低价,用于后续的跟踪止损判断。提供了详细的变量声明和逻辑判断,以确保策略的可靠性和执行效率。策略信号代码:ParamsNumericLength1(10);NumericLength(14);NumericTrailingStart1(50);NumericTrailingStart2(80);NumericTrailingStop1(30);NumericTrailingStop2(20);NumericStopLossSet(30);VarsNumericHH;NumericDivisor;NumericSeriesPRValue;NumericSeriesNetChgAvg(0);NumericSeriesTotChgAvg(0);NumericSF(0);NumericChange(0);NumericChgRatio(0);NumericSeriesRSIValue;NumericSeriesHighestAfterEntry;NumericSeriesLowestAfterEntry;NumericMinPoint;NumericMyEntryPrice;Numericmyprice;Numericmyexitprice;BeginHH=Highest(High,Length1);Divisor=HH-Lowest(Low,Length1);If(Divisor<>0)PRValue=100-((HH-Close)/Divisor)*100;elsePRValue=Divisor;If(CurrentBar<=Length-1){NetChgAvg=(Close-Close[Length])/Length;TotChgAvg=Average(Abs(Close-Close[1]),Length);}Else{SF=1/Length;Change=Close-Close[1];NetChgAvg=NetChgAvg[1]+SF*(Change-NetChgAvg[1]);TotChgAvg=TotChgAvg[1]+SF*(Abs(Change)-TotChgAvg[1]);}If(TotChgAvg<>0)ChgRatio=NetChgAvg/TotChgAvg;elseChgRatio=0;RSIValue=50*(ChgRatio+1);If(!CallAuctionFilter())Return;If(MarketPosition<>1&&PRValue[1]>=50AndRSIValue[1]>=50)Buy(1,Open);If(MarketPosition<>-1&&PRValue[1]<=50AndRSIValue[1]<=50)SellShort(1,Open);If(BarsSinceEntry==0){HighestAfterEntry=Close;LowestAfterEntry=Close;If(MarketPosition<>0){HighestAfterEntry=Max(HighestAfterEntry,AvgEntryPrice);LowestAfterEntry=Min(LowestAfterEntry,AvgEntryPrice);}}else{HighestAfterEntry=Max(HighestAfterEntry,High);LowestAfterEntry=Min(LowestAfterEntry,Low);}MinPoint=MinMove*PriceScale;MyEntryPrice=AvgEntryPrice;If(MarketPosition==1){If(HighestAfterEntry[1]>=MyEntryPrice+TrailingStart2*MinPoint){If(Low<=HighestAfterEntry[1]-TrailingStop2*MinPoint)MyExitPrice=HighestAfterEntry[1]-TrailingStop2*MinPoint;Sell(0,MyExitPrice);}elseif(HighestAfterEntry[1]>=MyEntryPrice+TrailingStart1*MinPoint){If(Low<=HighestAfterEntry[1]-TrailingStop1*MinPoint){MyExitPrice=HighestAfterEntry[1]-TrailingStop1*MinPoint;Sell(0,MyExitPrice);}}elseif(Low<=MyEntryPrice-StopLossSet*MinPoint){MyExitPrice=MyEntryPrice-StopLossSet*MinPoint;Sell(0,MyExitPrice);}}elseif(MarketPosition==-1){If(LowestAfterEntry[1]<=MyEntryPrice-TrailingStart2*MinPoint){If(High>=LowestAfterEntry[1]+TrailingStop2*MinPoint){MyExitPrice=LowestAfterEntry[1]+TrailingStop2*MinPoint;BuyToCover(0,MyExitPrice);}}elseif(LowestAfterEntry[1]<=MyEntryPrice-TrailingStart1*MinPoint){If(High>=LowestAfterEntry[1]+TrailingStop1*MinPoint){MyExitPrice=LowestAfterEntry[1]+TrailingStop1*MinPoint;BuyToCover(0,MyExitPrice);}}elseIf(High>=MyEntryPrice+StopLossSet*MinPoint){MyExitPrice=MyEntryPrice+StopLossSet*MinPoint;BuyToCover(0,MyExitPrice);}}End第一个求最高函数Highest,代码如下:ParamsNumericSeriesPrice(0);//声明序列参数Price,赋值0.NumericLength(5);//声明参数Length,赋值5。VarsNumericHighestValue;//声明变量HighestValue.Numerici;//声明变量i。BeginHighestValue=Price;//变量HighestValue的值等于价格。fori=1toLength-1//循环语句,变量i的值从1循环到参数Length-1,循环执行花括号里的语句程序。{If(Price[i]>HighestValue)//假如Price[i]大于变量HighestValue,其实这当前价格是一个中间值,作用是为了求前1,2,3,4数位的价格哪个最大。HighestValue=Price[i];//可以看到,假如Price[1]的值大于当前价,那么就把Price[1]的值赋予给HighestValue,再把Price[1]跟Price[2]对比,循环到Price[4]为止。}ReturnHighestValue;//根据对比的这5根k线的价格,把最大值返回给主函数。End第二个求最低函数Lowest,代码如下:ParamsNumericSeriesPrice(0);NumericLength(5);VarsNumericLowestValue;Numerici;BeginLowestValue=Price;fori=1toLength-1{If(Price[i]<LowestValue)LowestValue=Price[i];}ReturnLowestValue;End第三个求威廉指标函数PercentR。算法:N日内最高价与当日收盘价的差,除以N日内最高价与最低价的差,结果放大100倍。代码如下:ParamsNumericLength(10);//声明参数Length,赋值为10,VarsNumericHH;//声明变量名为HH。NumericDivisor;//声明变量名为Divisor。NumericPRValue;//声明变量名为PRValue。BeginHH=Highest(High,Length);//变量HH值等于,调用函数Highest,求出10周期内的最高价。Divisor=HH-Lowest(Low,Length);//变量Divisor值等于,10周期内的最高价减去最低价。If(Divisor<>0)//假如变量Divisor不等于0.PRValue=100-((HH-Close)/Divisor)*100;//变量PRValue值=100-((10周期内最高价-当前收盘价)/变量Divisor值)*100else//假如变量Divisor等于0.PRValue=Divisor;//变量PRValue等于0ReturnPRValue;//把变量PRValue的值返回给主函数End显示在k线图里的威廉指标代码如下:ParamsNumericLength(5);//声明参数Length,赋值5.NumericOverSold(20);//声明参数OverSold,赋值20.NumericOverBought(80);声明参数OverBought,赋值80.VarsNumericWRValue;//声明变量WRValue。BeginWRValue=PercentR(Length);//变量WRValue值,就是把参数5带回函数PercentR里重新求一遍,再把得到的值返回来给WRValue。PlotNumeric("WR",WRValue);//画线WR,替代WRValue。PlotNumeric("超买",OverBought);//画线超买,就是初值80.PlotNumeric("超卖",OverSold);//画线超卖,就是初值20.End策略买卖规则:跟RSI指标共振。即同步穿过50中间值,买入;同步跌破50中间值,卖出。固定止损30,止盈分50与80两级。策略代码解释如下:ParamsNumericLength1(10);NumericLength(14);NumericTrailingStart1(50);//跟踪止盈启动设置1NumericTrailingStart2(80);//跟踪止盈启动设置2NumericTrailingStop1(30);//跟踪止盈设置1NumericTrailingStop2(20);//跟踪止盈设置2NumericStopLossSet(30);//固定止损30个点VarsNumericHH;NumericDivisor;NumericSeriesPRValue;NumericSeriesNetChgAvg(0);NumericSeriesTotChgAvg(0);NumericSF(0);NumericChange(0);NumericChgRatio(0);NumericSeriesRSIValue;NumericSeriesHighestAfterEntry;NumericSeriesLowestAfterEntry;NumericMinPoint;NumericMyEntryPrice;Numericmyprice;Numericmyexitprice;Begin//计算WR指标HH=Highest(High,Length1);Divisor=HH-Lowest(Low,Length1);If(Divisor<>0)PRValue=100-((HH-Close)/Divisor)*100;elsePRValue=Divisor;//计算RSI指标If(CurrentBar<=Length-1){NetChgAvg=(Close-Close[Length])/Length;TotChgAvg=Average(Abs(Close-Close[1]),Length);}Else{SF=1/Length;Change=Close-Close[1];NetChgAvg=NetChgAvg[1]+SF*(Change-NetChgAvg[1]);TotChgAvg=TotChgAvg[1]+SF*(Abs(Change)-TotChgAvg[1]);}If(TotChgAvg<>0){ChgRatio=NetChgAvg/TotChgAvg;}else{ChgRatio=0;}RSIValue=50*(ChgRatio+1);If(!CallAuctionFilter())Return;//集合竞价和小节休息过滤If(MarketPosition<>1&&PRValue[1]>=50AndRSIValue[1]>=50){Buy(1,Open);}If(MarketPosition<>-1&&PRValue[1]<=50AndRSIValue[1]<=50){SellShort(1,Open);}If(BarsSinceentry==0){HighestAfterEntry=Close;LowestAfterEntry=Close;If(MarketPosition<>0){HighestAfterEntry=Max(HighestAfterEntry,AvgEntryPrice);//开仓的Bar,将开仓价和当时的收盘价的较大值保留到HighestAfterEntryLowestAfterEntry=Min(LowestAfterEntry,AvgEntryPrice);//开仓的Bar,将开仓价和当时的收盘价的较小值保留到LowestAfterEntry}}else{HighestAfterEntry=Max(HighestAfterEntry,High);//记录下当前Bar的最高点,用于下一个Bar的跟踪止损判断LowestAfterEntry=Min(LowestAfterEntry,Low);//记录下当前Bar的最低点,用于下一个Bar的跟踪止损判断}Commentary("HighestAfterEntry="+Text(HighestAfterEntry));Commentary("LowestAfterEntry="+Text(LowestAfterEntry));Commentary("MyEntryPrice="+Text(MyEntryPrice));MinPoint=MinMove*PriceScale;MyEntryPrice=AvgEntryPrice;If(MarketPosition==1)//有多仓的情况{If(HighestAfterEntry[1]>=MyEntryPrice+TrailingStart2*MinPoint)//第二级跟踪止损的条件表达式{If(Low<=HighestAfterEntry[1]-TrailingStop2*MinPoint){MyExitPrice=HighestAfterEntry[1]-TrailingStop2*MinPoint;Sell(0,MyExitPrice);}}elseif(HighestAfterEntry[1]>=MyEntryPrice+TrailingStart1*MinPoint)//第一级跟踪止损的条件表达式{If(Low<=High

温馨提示

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

评论

0/150

提交评论