海龟通道策略(TBQ版)_第1页
海龟通道策略(TBQ版)_第2页
海龟通道策略(TBQ版)_第3页
海龟通道策略(TBQ版)_第4页
海龟通道策略(TBQ版)_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

海龟通道策略(TBQ版)海龟通道策略,作为著名的趋势跟踪策略之一,其核心思想在于利用市场波动性和趋势持续性来实现盈利。该策略通过设定一系列参数和条件,自动判断市场趋势,并据此进行买卖操作。策略概述海龟通道策略是一种基于技术分析的趋势跟踪策略,它结合了唐奇安通道、平均波动率(ATR)以及风险管理等要素。该策略通过计算特定周期内的最高价、最低价和平均波动率,构建出上下两条通道线,以此作为买卖信号的触发点。交易逻辑详解1.头寸计算:-根据设定的头寸模式(如海龟风险度、固定头寸等),计算出当前应持有的交易单位数(TurtleUnits)。这一过程涉及到初始资金、风险比例、平均波动率等多个参数的综合考量。2.开仓条件:-当市场价格突破唐奇安通道的上轨或下轨时,视为买入或卖出的信号。具体来说,若当前市场处于多头趋势(即价格高于唐奇安通道上轨),且交易单位数满足条件,则执行买入操作;反之,若市场处于空头趋势(即价格低于唐奇安通道下轨),则执行卖出操作。3.加仓条件:-在已持有多头或空头头寸的情况下,若市场价格继续朝有利方向移动,并超过预设的增仓点(如开仓价加上0.5倍的N值),则进行加仓操作。这一过程旨在捕捉市场的持续趋势,提高盈利空间。4.止损与离市条件:-为了控制风险,策略设定了止损和离市条件。当市场价格触及止损点(如多头头寸时价格下跌至开仓价减去2倍的N值)时,策略会自动平仓以锁定损失。此外,策略还根据设定的离市周期(TrailingExitLength)动态调整离市点,以适应市场波动性的变化。5.风险管理:-策略通过多种方式来管理风险,包括设定最大建仓次数、固定头寸大小、风险比例等。这些参数共同构成了策略的风险控制体系,确保在追求盈利的同时,能够有效控制潜在损失。策略特点1.趋势跟踪:-海龟通道策略的核心在于捕捉市场趋势,并跟随趋势进行交易。这种策略在趋势明显的市场环境中表现尤为出色,能够充分把握市场的盈利机会。2.风险管理:-该策略注重风险管理,通过设定止损点、离市点以及头寸规模等参数来控制潜在风险。这有助于在市场波动较大时保持稳定的收益水平。3.自动化交易:-海龟通道策略是一种自动化交易策略,能够自动执行买卖操作。这降低了人为干预和情绪影响的可能性,提高了交易的客观性和准确性。4.灵活性:-该策略提供了多种头寸模式和参数设置选项,使得投资者可以根据自己的风险承受能力和市场情况灵活调整策略参数,以适应不同的交易需求。海龟通道策略是一种基于技术分析的趋势跟踪策略,它通过结合唐奇安通道、平均波动率以及风险管理等要素来构建交易逻辑。该策略具有趋势跟踪、风险管理、自动化交易以及灵活性等特点,能够在不同市场环境下实现稳定的盈利。策略代码:ParamsNumericnEntries(2);//最大建仓次数NumericATRLength(26);//平均波动周期ATRLengthNumericboLength(20);//短周期BreakOutLengthNumericteLength(10);//离市周期TrailingExitLengthNumericRiskRatio(0.2);//①风险度or比例%NumericLots(1);//②固定头寸NumericFund(50);//③初始资金:万Enum<String>Pos_Mode(["海龟风险度","固定头寸","固定金额","固定风险度"]);//头寸模式Vars//原参数NumericfsLength(55);//长周期FailSafeLengthNumericMinPoint;//最小变动单位NumericN;//N值NumericTotalEquity;//按最新收盘价计算出的总资产NumericTurtleUnits;//交易单位NumericExitHighestPrice;//离市时判断需要的N周期最高价NumericExitLowestPrice;//离市时判断需要的N周期最低价NumericmyEntryPrice;//开仓价格NumericmyExitPrice;//平仓价格Series<Numeric>AvgTR;//ATRSeries<Numeric>DonchianHi;//唐奇安通道上轨,延后1个BarSeries<Numeric>DonchianLo;//唐奇安通道下轨,延后1个BarSeries<Numeric>fsDonchianHi;//唐奇安通道上轨,延后1个Bar,长周期Series<Numeric>fsDonchianLo;//唐奇安通道下轨,延后1个Bar,长周期Series<Numeric>preEntryPrice(0);//前一次开仓的价格BoolL4En(False);//多进BoolL4Ex(False);//卖平BoolS4En(False);//空进BoolS4Ex(False);//买平BoolSendOrderThisBar(False);//当前Bar有过交易Series<Bool>PreBreakoutFailure(false);//前一次突破是否失败Defs//集合竞价过滤BoolR_JHJJ(){If(BarStatus==2){If(Time==0.090000&&CurrentTime<0.090000)ReturnTrue;If(Time==0.093000&&CurrentTime<0.093000)ReturnTrue;If(Time==0.210000&&CurrentTime<0.210000)ReturnTrue;}ReturnFalse;}//涨跌停板过滤BoolR_ZDT(){If(BarStatus==2&&((Close==Q_LowerLimit)or(Close==Q_UpperLimit))){ReturnTrue;}ReturnFalse;}Events//此处实现事件函数//初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作OnInit(){//多图层订阅行情//freqString订阅频率'mon':月,'w':周,'d':日,'h':时,'m':分,'s':秒,'tick':tick,字符串前面可以添加数字,如'3d'表示周期是3天;//flagIntegerEnum_Data_OnlyNight()表示仅夜盘,Enum_Data_OnlyDay()表示仅日盘,Enum_Data_RolloverBackWard()表示后复权,可做或运算,表示多种情况//SubscribeBar(Data0.Symbol,"1h",Data0.BeginDateTime);//按样本数订阅//SubscribeBarCounts(Data0.Symbol,"1h",1000);//与数据源有关Range[0:DataCount-1]{//=========数据源相关设置==============AddDataFlag(Enum_Data_RolloverBackWard());//设置后复权AddDataFlag(Enum_Data_RolloverRealPrice());//设置映射真实价格AddDataFlag(Enum_Data_AutoSwapPosition());//设置自动换仓AddDataFlag(Enum_Data_IgnoreSwapSignalCalc());//设置忽略换仓信号计算/*备注:Enum_Data_IgnoreSwapSignalCalc,对于一个策略来说,换仓的这笔交易并不是策略规则产生的,所以将换仓前后的这两笔交易合并为一笔能更好的统计策略性能。合并之后,交易盈亏依旧是真实的,只不过换仓前后的这两笔交易算一笔交易,但是手续费会从测试报告中扣除。忽略换仓时,换仓后的开仓市值为原始的开仓市值。开仓均价按照原始开仓市值计算得来。*/SetSwapPosVolType(2);//换月时头寸:1=等市值,2=等持仓量//AddDataFlag(Enum_Data_NotGenReport());//设置数据源不参与生成报告标志//=========交易相关设置==============//SetOrderPriceOffset(2);//设置委托价为叫买/卖价偏移2跳//SetOrderMap2MainSymbol();//设置委托映射到主力}//与数据源无关//SetBeginBarMaxCount(10);//设置最大起始bar数为10//SetBackBarMaxCount(10);//设置最大回溯bar数为10//=========交易相关设置==============SetInitCapital(Fund*10000);//设置初始资金}OnReady(){Array<CodeProperty>props;//获取指定合约的所有合约属性Boolret=GetProperty(Symbol,props);Print("GetProperty:"+IIFString(ret,"True","False")+","+TextArray(props));}OnBarOpen(ArrayRef<Integer>indexs){}OnBar(ArrayRef<Integer>indexs){Range[0:DataCount-1]{If(BarStatus==0){preEntryPrice=InvalidNumeric;PreBreakoutFailure=false;}MinPoint=MinMove*PriceScale;AvgTR=XAverage(TrueRange,ATRLength);N=AvgTR[1];//头寸计算If(Pos_Mode=="海龟风险度"){TotalEquity=Portfolio_CurrentCapital()+Portfolio_UsedMargin();TurtleUnits=(TotalEquity*RiskRatio/100)/(N/ROLLOVER*ContractUnit()*BigPointValue());TurtleUnits=IntPart(TurtleUnits);//对小数取整}ElseIf(Pos_Mode=="固定风险度"){TotalEquity=Fund*10000;TurtleUnits=(TotalEquity*RiskRatio/100)/(N/ROLLOVER*ContractUnit()*BigPointValue());TurtleUnits=IntPart(TurtleUnits);//对小数取整}ElseIf(Pos_Mode=="固定头寸"){TurtleUnits=Lots;}ElseIf(Pos_Mode=="固定金额"){TurtleUnits=(Fund*10000*RiskRatio/100)/(O/ROLLOVER*MarginRatio*ContractUnit()*BigPointValue());TurtleUnits=IntPart(TurtleUnits);//对小数取整//Commentary("TT0="+Text((Fund*10000*RiskRatio/100)));//Commentary("TT1="+Text((O/ROLLOVER*MarginRatio*ContractUnit()*BigPointValue())));}Else{//Numericmylots=MAX(1,INTPART(Fund/(C[1]/Rollover()*ContractUnit()*BigPointValue()*0.10)));//简单的通用性测试保证金比例10%TurtleUnits=0;}TurtleUnits=Max(1,TurtleUnits);//限定最小为1DonchianHi=HighestFC(High[1],boLength);DonchianLo=LowestFC(Low[1],boLength);//fsDonchianHi=HighestFC(High[1],fsLength);//fsDonchianLo=LowestFC(Low[1],fsLength);ExitLowestPrice=LowestFC(Low[1],teLength);ExitHighestPrice=HighestFC(High[1],teLength);//开平条件Booll4e=High>DonchianHi&&TurtleUnits>=1;//多进Booll4x=False;//卖平Bools4e=False;//空进Bools4x=False;//买平//进出场价格Numericl4e_price=min(high,DonchianHi+MinPoint);//开多价格Numericl4x_price=Open;//平多价格Numerics4e_price=Open;//开空价格Numerics4x_price=Open;//平空价格//开平处理//If(MarketPosition!=1&&l4e)//{//Buy(lots,l4e_price);//}If(MarketPosition!=-1&&s4e){SellShort(lots,s4e_price);}If(MarketPosition==1&&BarsSinceEntry>0&&l4x){Sell(0,l4x_price);}If(MarketPosition==-1&&BarsSinceEntry>0&&s4x){BuyToCover(0,s4x_price);}Commentary("N="+Text(N));Commentary("MinPoint="+Text(MinPoint));Commentary("preEntryPrice="+Text(preEntryPrice));Commentary("PreBreakoutFailure="+IIFString(PreBreakoutFailure,"True","False"));PlotNumeric("DonchianHi",DonchianHi);PlotNumeric("DonchianLo",DonchianLo);//设定画线类型,如:Enum_Dot,Enum_Line,Enum_Bar,Enum_Cross,默认为属性框中设定//设定画线风格,如:Enum_Solid,Enum_Dash,Enum_Broken,Enum_Dash_Dot,默认为属性框中设定//设定画线线宽,如:Enum_1Pix,Enum_2Pix,Enum_3Pix,Enum_4Pix,Enum_5Pix,Enum_6Pix,Enum_7Pix,默认为属性框中设定//PlotAuto("preEntryPrice",preEntryPrice,0,White,Enum_Line,Enum_Dash,Enum_2Pix);//开仓信号交易处理If(MarketPosition==0){//突破开仓//If(High>DonchianHi&&TurtleUnits>=1)If(l4e){//开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交//myEntryPrice=min(high,DonchianHi+MinPoint);myEntryPrice=l4e_price;myEntryPrice=IIF(myEntryPrice<Open,Open,myEntryPrice);//大跳空的时候用开盘价代替preEntryPrice=myEntryPrice;Buy(TurtleUnits,myEntryPrice);SendOrderThisBar=True;PreBreakoutFailure=False;}If(Low<DonchianLo&&TurtleUnits>=1){//开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交myEntryPrice=max(low,DonchianLo-MinPoint);myEntryPrice=IIF(myEntryPrice>Open,Open,myEntryPrice);//大跳空的时候用开盘价代替preEntryPrice=myEntryPrice;SellShort(TurtleUnits,myEntryPrice);SendOrderThisBar=True;PreBreakoutFailure=False;}}//持仓处理If(MarketPosition==1)//有多仓的情况{Commentary("ExitLowestPrice="+Text(ExitLowestPrice));If(Low<ExitLowestPrice){myExitPrice=max(Low,ExitLowestPrice-MinPoint);myExitPrice=IIF(myExitPrice>Open,Open,myExitPrice);//大跳空的时候用开盘价代替Sell(0,myExitPrice);//数量用0的情况下将全部平仓}Else{If(preEntryPrice!=InvalidNumeric&&TurtleUnits>=1){If(Open>=preEntryPrice+0.5*N&&CurrentEntries<nEntries)//如果开盘就超过设定的1/2N,则直接用开盘价增仓。{myEntryPrice=Open;preEntryPrice=myEntryPrice;Buy(TurtleUnits,myEntryPrice);SendOrderThisBar=True;}while(High>=preEntryPrice+0.5*N&&CurrentEntries<nEntries)//以最高价为标准,判断能进行几次增仓{myEntryPrice=preEntryPrice+0.5*N;preEntryPrice=myEntryPrice;if(False==Buy(TurtleUnits,myEntryPrice)){break;}SendOrderThisBar=True;}}//止损指令If(Low<=preEntryPrice-2*N&&SendOrderThisBar==false)//加仓Bar不止损{myExitPrice=preEntryPrice-2*N;myExitPrice=IIF(myExitPrice>Open,Open,myExitPrice);//大跳空的时候用开盘价代替Sell(0,myExitPrice);//数量用0的情况下将全部平仓PreBreakoutFailure=True;}}}ElseIf(MarketPosition==-1)//有空仓的情况{//求出持空仓时离市的条件比较值Commentary("ExitHighestPrice="+Text(ExitHighestPrice));If(High>ExitHighestPrice){myExitPrice=Min(High,ExitHighestPrice+MinPoint);myExitPrice=IIF(myExitPrice<Open,Open,myExitPrice);//大跳空的时候用开盘价代替BuyToCover(0,myExitPrice);//数量用0的情况下将全部平仓}Else{If(preEntryPrice!=InvalidNumeric&&TurtleUnits>=1){If(Open<=preEntryPrice-0.5*N&&CurrentEntries<

温馨提示

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

评论

0/150

提交评论