




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
正交分量交易系统(TS版)本策略的核心在于利用Hilbert变换来识别价格序列中的周期波动,并据此构建买卖信号。具体来说,策略首先通过HilbertPeriod函数计算价格的周期值,然后根据这个周期值来确定买入和卖出的通道边界。当市场价格突破这些通道边界时,策略会生成相应的交易信号。1.周期计算:使用HilbertPeriod函数对价格序列进行处理,以识别其潜在的周期波动。这个函数通过一系列复杂的数学运算(包括平滑、去趋势、同相和正交分量的计算等)来提取价格的周期性特征,并最终得到一个周期值。2.通道构建:基于计算得到的周期值,策略动态地构建买入和卖出的通道。这些通道的宽度取决于周期值以及用户定义的参数(如EntryVal、EntryK、ExitVal和ExitK)。通道的构建旨在捕捉价格波动的关键区域,从而为交易决策提供依据。3.买卖信号生成:当市场价格突破买入通道的上边界时,策略认为市场处于超买状态,此时应考虑卖出;相反,当市场价格跌破卖出通道的下边界时,策略认为市场处于超卖状态,此时应考虑买入。这种基于价格波动边界的交易逻辑有助于捕捉市场的短期趋势和反转点。特点概述1.动态适应性:本策略能够根据市场价格的波动情况动态调整通道的宽度和位置,从而适应不同市场环境下的交易需求。这种动态适应性使得策略在面对市场变化时具有较高的灵活性和鲁棒性。2.趋势捕捉与反转点识别:通过结合Hilbert变换的周期识别能力和通道突破的交易逻辑,本策略不仅能够捕捉市场的短期趋势,还能在一定程度上识别价格的反转点。这有助于投资者在复杂多变的市场环境中把握更多的交易机会。3.参数化设置:策略提供了多个可配置的参数(如EntryVal、EntryK、ExitVal和ExitK等),允许用户根据自身的交易经验和风险偏好进行个性化设置。这种参数化设计使得策略具有更广泛的适用性和可定制性。4.直观易懂的交易信号:策略通过简单的通道突破逻辑生成买卖信号,使得交易决策过程直观易懂。这有助于投资者更好地理解和执行交易策略,降低因复杂计算或模糊逻辑而导致的误判风险。5.注释与可视化支持:提供了详细的注释和可视化支持(如图表上的通道和标记)。这不仅有助于开发者理解和维护代码,还能帮助投资者更好地理解策略的运行逻辑和交易信号的产生过程。综上所述,本策略以其动态适应性、趋势捕捉与反转点识别能力、参数化设置、直观易懂的交易信号以及注释与可视化支持等特点,为投资者提供了一个灵活且高效的交易工具。以下是对函数HilbertPeriod代码的注解:一、输入参数和局部变量定义-
Inputs:Price(numeric)
:定义输入为价格数值序列。-
Vars:Smoother(0),Detrender(0),I1(0),Q1(0),jI(0),jQ(0),I2(0),Q2(0),X1(0),X2(0),Y1(0),Y2(0),Re(0),Im(0),Period(0)
:定义多个局部变量,用于存储中间计算结果和最终的周期值。二、条件判断和核心计算1.
IfCurrentBar>5thenbegin
:当当前柱状线大于5时执行以下代码块。-
Smoother=(4*Price+3*Price[1]+2*Price[2]+Price[3])/10
:计算平滑后的价格值,通过对当前价格和之前几个周期的价格进行加权平均。-
Detrender=(.25*Smoother+.75*Smoother[2]-.75*Smoother[4]-.25*Smoother[6])*(.046*Period[1]+.332)
:计算去趋势值,基于平滑后的价格进行一系列运算,并考虑上一个周期的周期值。-接下来计算同相(InPhase)和正交(Quadrature)分量:-
Q1=(.25*Detrender+.75*Detrender[2]-.75*Detrender[4]-.25*Detrender[6])*(.046*Period[1]+.332)
:计算正交分量的中间值。-
I1=Detrender[3]
:将去趋势值延迟三个周期作为同相分量的初始值。-
jI=.25*I1+.75*I1[2]-.75*I1[4]-.25*I1[6]
和
jQ=.25*Q1+.75*Q1[2]-.75*Q1[4]-.25*Q1[6]
:对同相和正交分量进行相位调整。-
I2=I1-jQ
和
Q2=Q1+jI
:通过相位调整后的分量进行计算,得到新的同相和正交分量。-
I2=.15*I2+.85*I2[1]
和
Q2=.15*Q2+.85*Q2[1]
:对新的同相和正交分量进行平滑处理。-
X1=I2*I2[1]
、
X2=I2*Q2[1]
、
Y1=Q2*Q2[1]
、
Y2=Q2*I2[1]
:进行复数共轭乘法运算,得到中间结果。-
Re=X1+Y1
和
Im=X2-Y2
:计算实部和虚部。-
Re=.2*Re+.8*Re[1]
和
Im=.2*Im+.8*Im[1]
:对实部和虚部进行平滑处理。-
IfIm<>0andRe<>0thenPeriod=360/ArcTangent(Im/Re)
:如果虚部和实部都不为0,则通过反正切函数计算周期值。-对计算得到的周期值进行一系列限制和平滑处理:-
IfPeriod>1.5*Period[1]thenPeriod=1.5*Period[1]
:如果当前周期值大于上一个周期值的1.5倍,则进行限制。-
IfPeriod<.67*Period[1]thenPeriod=.67*Period[1]
:如果当前周期值小于上一个周期值的0.67倍,则进行限制。-
IfPeriod<6thenPeriod=6
:如果周期值小于6,则设为6。-
IfPeriod>50thenPeriod=50
:如果周期值大于50,则设为50。-
Period=.2*Period+.8*Period[1]
:对周期值进行平滑处理。2.
HilbertPeriod=Period
:将计算得到的周期值赋给
HilbertPeriod
。以下是指标代码的注释:inputs:Price((H+L)/2),EntryVal(0),EntryK(0),ExitVal(0),ExitK(0);//定义输入参数,包括Price(使用开盘价和收盘价的中间值作为价格数据)、EntryVal和ExitVal(用于设置通道的Entry和Exit值)、EntryK和ExitK(用于设置通道的宽度,以周期为单位)。vars:Period(0),count(0),EntryLookBack(0),ExitLookBack(0),EntryChannel(0),ExitChannel(0);//定义变量,包括Period(Hilbert周期数)、count(循环计数器)、EntryLookBack和ExitLookBack(Entry和Exit通道的回看周期)、EntryChannel和ExitChannel(Entry和Exit通道的值)。Period=HilbertPeriod(Price);//计算Hilbert周期数,用于确定通道的宽度。IfEntryVal<>0thenEntryLookBack=EntryValelseEntryLookBack=EntryK*Period;//如果EntryVal不为0,则使用EntryVal作为Entry通道的回看周期;否则,使用EntryK乘以Period。ifEntryLookBack<1thenEntryLookBack=1;//确保EntryLookBack至少为1。IfExitVal<>0thenExitLookBack=ExitValelseExitLookBack=ExitK*Period;//如果ExitVal不为0,则使用ExitVal作为Exit通道的回看周期;否则,使用ExitK乘以Period。ifExitLookBack<1thenExitLookBack=1;//确保ExitLookBack至少为1。EntryChannel=0;//初始化Entry通道值为0。forcount=1toEntryLookBackbeginifEntryChannel<High[count]thenEntryChannel=High[count];end;//遍历EntryLookBack周期,找到最高价,作为Entry通道的值。ExitChannel=100000;//初始化Exit通道值为一个非常高的值,用于确保不会被突破。forcount=1toExitLookBackbeginifExitChannel>Low[count]thenExitChannel=Low[count];end;//遍历ExitLookBack周期,找到最低价,作为Exit通道的值。plot1(EntryChannel,“EntryChannel”);//在图表上绘制Entry通道。plot2(ExitChannel,“ExitChannel”);//在图表上绘制Exit通道。IfHigh>EntryChannelthenplot3(EntryChannel,“Enter”);//如果当前周期的高价大于Entry通道的值,则在图表上绘制一个“Enter”标记。IfLow<ExitChannelthenplot4(ExitChannel,“Exit”);//如果当前周期的低价小于Exit通道的值,则在图表上绘制一个“Exit”标记。指标使用Hilbert周期数来确定通道的宽度,并通过Entry和Exit通道的值来判断是否发出买入或卖出信号。Entry和Exit通道的值是通过回看周期内的最高价和最低价计算得出的。如果当前周期的高价大于Entry通道的值,则发出买入信号;如果当前周期的低价小于Exit通道的值,则发出卖出信号。以下是对策略代码的注释:inputs:Price((H+L)/2),EntryVal(15),EntryK(0),ExitVal(15),ExitK(0);注释:定义输入参数,价格为最高价和最低价的平均值,
EntryVal
和
ExitVal
可能是用于入场和出场的特定值,
EntryK
和
ExitK
可能是用于计算入场和出场时的系数。vars:Period(0),count(0),EntryLookBack(0),ExitLookBack(0),EntryChannel(0),ExitChannel(0);注释:定义变量,
Period
用于存储周期值,
count
用于循环计数,
EntryLookBack
和
ExitLookBack
分别用于存储入场和出场的回溯周期数,
EntryChannel
和
ExitChannel
分别用于存储入场和出场的通道值。Period=HilbertPeriod(Price);注释:使用
HilbertPeriod
函数计算价格的周期值,并存储在
Period
中。IfEntryVal<>0thenEntryLookBack=EntryValelseEntryLookBack=EntryK*Period;注释:如果
EntryVal
不为0,则将
EntryLookBack
设为
EntryVal
,否则设为
EntryK
乘以周期值
Period
。ifEntryLookBack<1thenEntryLookBack=1;注释:如果
EntryLookBack
小于1,则将其设为1。IfExitVal<>0thenExitLookBack=ExitValelseExitLookBack=ExitK*Period;注释:如果
ExitVal
不为0,则将
ExitLookBack
设为
ExitVal
,否则设为
ExitK
乘以周期值
Period
。ifExitLookBack<1thenExitLookBack=1;注释:如果
ExitLookBack
小于1,则将其设为1。EntryChannel=0;注释:初始化入场通道值为0。forcount=1toEntryLookBackbeginifEntryChannel<High[count]thenEntryChannel=High[count];end;注释:通过循环,在回溯的
EntryLookBack
周期内,找到最高价格并存储在
EntryChannel
中。ExitChannel=100000;注释:初始化出场通道值为一个较大的值。forcount=1toExitLookBackbeginifExitChannel>Low[count]thenExitChannel=Low[count];end;注释:通过循环,在回溯的
ExitLookBack
周期内,找到最低价格并存储在
ExitChannel
中。IfMarketPosition=0andHigh>EntryChannelthenBuy;注释:如果当前没有持仓,且当前最高价大于入场通道值,则买入。IfMarketPosition=1andLow<ExitChannelthenExitLong;注释:如果当前持有多头仓位,且当前最低价小于出场通道值,则平掉多头仓位。##BeginCmtryvar:textString(“flat.”);IfCheckCommentarythenBEGINifMarketPosition=1thentextString=“long.”;ifMarketPosition=0thentextString=“flat.”;commentary(“Marketpositionis”,textString,NewLine);commentary(“Highis”,high,“,channel”,EntryChannel,“,lookback”,ceiling(EntryLookBack),“bars.”,NewLine);commentary(“Lowis”,low,“,channel”,ExitChannel,“,lookback”,ceiling(ExitLookBack),“bars.”,NewLine);End;##End;注释:如果
CheckCommentary
为真,则根据市场持仓状态设置
textString
的值,然后使用
commentary
函数输出市场持仓状态、当前最高价、入场通道值和入场回溯周期数、当前最低价、出场通道值和出场回溯周期数等信息。函数HilbertPeriod代码:Inputs:Price(numeric);Vars:Smoother(0),Detrender(0),I1(0),Q1(0),jI(0),jQ(0),I2(0),Q2(0),X1(0),X2(0),Y1(0),Y2(0),Re(0),Im(0),Period(0);IfCurrentBar>5thenbeginSmoother=(4*Price+3*Price[1]+2*Price[2]+Price[3])/10;Detrender=(.25*Smoother+.75*Smoother[2]-.75*Smoother[4]-.25*Smoother[6])*(.046*Period[1]+.332);Q1=(.25*Detrender+.75*Detrender[2]-.75*Detrender[4]-.25*Detrender[6])*(.046*Period[1]+.332);I1=Detrender[3];jI=.25*I1+.75*I1[2]-.75*I1[4]-.25*I1[6];jQ=.25*Q1+.75*Q1[2]-.75*Q1[4]-.25*Q1[6];I2=I1-jQ;Q2=Q1+jI;I2=.15*I2+.85*I2[1];Q2=.15*Q2+.85*Q2[1];X1=I2*I2[1];X2=I2*Q2[1];Y1=Q2*Q2[1];Y2=Q2*I2[1];Re=X1+Y1;Im=X2-Y2;Re=.2*Re+.8*Re[1];Im=.2*Im+.8*Im[1];IfIm<>0andRe<>0thenPeriod=360/ArcTangent(Im/Re);IfPeriod>1.5*Period[1]thenPeriod=1.5*Period[1];IfPeriod<.67*Period[1]thenPeriod=.67*Period[1];IfPeriod<6thenPeriod=6;IfPeriod>50thenPeriod=50;Period=.2*Period+.8*Period[1];HilbertPeriod=Period;end;指标代码:inputs:Price((H+L)/2),EntryVal(0),EntryK(0),ExitVal(0),ExitK(0);vars:Period(0),count(0),EntryLookBack(0),ExitLookBack(0),EntryChannel(0),ExitChannel(0);Period=HilbertPeriod(Price);IfEntryVal<>0thenEntryLookBack=EntryValelseEntryLookBack=EntryK*Period;ifEntryLookBack<1thenEntryLookBack=1;IfExitVal<>0thenExitLookBack=ExitValelseExitLookBack=ExitK*Period;ifExitLookBack<1thenExitLookBack=1;EntryChannel=0;forcount=1toEntryLookBackbeginifEntryChannel<High[count]thenEntryChannel=High[count];end;ExitChannel=100000;forcount=1toExitLookBackbeginifExitChannel>Low[count]thenExitChannel=Low[count];end;plot1(EntryChannel,“EntryChannel”);plot2(ExitChannel,“ExitChannel”);IfHigh>EntryChannelthenplot3(EntryChannel,“Enter”);IfLow<ExitChannelthenplot4(ExitChannel,“Exit”);策略代码:inputs:Price((H+L)/2),EntryVal(15),EntryK(0),ExitVal(15),ExitK(0);vars:Period(0),count(0),EntryLookBack(0),ExitLookBack(0),EntryChannel(0),ExitChannel(0);Period
=HilbertPeriod(Price);IfEntryVal<>0thenEntryLookBack=EntryValelseEntryLookBack=EntryK*Period;if
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中介购买合同正式合同范本
- 全职舞蹈老师合同范例
- 加盟分公司合同范本
- 加盟新鲜猪肉合同范本
- 2024年西安电力中心医院招聘笔试真题
- 准新车购车合同范本
- 2024年空港数字城市开发建设有限公司社会招聘考试真题
- 产权回购合同范本
- 公司雇佣会计合同范例
- 买鸡合同范本
- 综合交通运输概论
- 现代压裂技术:提高天然气产量的有效方法
- 网络营销策划与文案写作PPT完整全套教学课件
- 比亚迪汉DM-i说明书
- 晚熟的人(莫言诺奖后首部作品)
- GA/T 2002-2022多道心理测试通用技术规程
- 《玉磨弥蒙铁路建设项目标准化管理考核实施办法》的通知滇南安质〔XXXX〕号
- 2022年10月自考00043经济法概论(财经类)试题及答案
- 桥梁施工流程图
- 新人教鄂教版(2017)五年级下册科学全册教学课件
- 工程电磁场静电场第讲
评论
0/150
提交评论