版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
顶底分形策略(TBQ版)顶底分形策略是一种基于技术分析的交易策略,主要用于捕捉市场的顶部和底部形态。该策略结合了移动平均线和分形形态,旨在通过识别特定的价格模式来生成交易信号。**交易逻辑思路**1.**合约名称处理**:-策略首先通过`SymbolReplace`函数对合约名称进行处理,以提取合约代码和交易所信息。这一过程对于后续的交易执行至关重要,因为它确保了策略能够准确地针对特定的合约进行操作。2.**移动平均线计算**:-在每个交易周期,策略会计算收盘价的60周期移动平均线(MA60)。这条均线作为策略判断市场趋势的重要参考,帮助交易者了解当前市场是处于上升趋势还是下降趋势。3.**分形形态识别**:-策略通过比较连续几根K线的最高价、最低价来判断是否出现顶分型或底分型形态。这些形态是市场转折点的潜在标志,为交易者提供了入场和离场的信号。4.**交易信号生成**:-当市场出现特定的顶分型或底分型形态,并且满足其他相关条件(如收盘价相对于移动平均线的位置)时,策略会生成相应的交易信号。这些信号指示交易者应该进行买入还是卖出操作。5.**止损与止盈设置**:-策略在开仓时会立即设置止损点,以控制潜在的风险。同时,当市场出现与持仓方向相反的分形形态时,策略会考虑平仓以实现利润。6.**交易执行**:-根据生成的交易信号,策略会执行相应的买入或卖出操作。这些操作可以是做多(买入)或做空(卖出),具体取决于市场的当前状态和交易者的风险偏好。**策略特点**1.**趋势跟踪与反转捕捉**:-该策略不仅能够跟踪市场的主要趋势(通过移动平均线),还能够捕捉市场的短期反转点(通过分形形态)。这使得交易者能够在不同的市场环境下灵活应对。2.**风险管理**:-策略在开仓时即设置止损点,确保了交易者的风险在可控范围内。此外,通过结合分形形态和其他条件来生成交易信号,策略进一步降低了误判的风险。3.**自动化与灵活性**:-该策略可以自动化执行交易决策,减少了人为干预的需要。同时,通过调整参数(如移动平均线的周期、分形形态的参数等),交易者可以根据自己的需求和偏好来定制策略。4.**适用性广泛**:-顶底分形策略适用于多种金融产品,包括股票、期货、外汇等。只要市场存在价格波动和趋势反转的可能性,该策略就有可能发挥作用。函数一SymbolReplace代码注释:-
Params
部分:-
StringSymbolz;//合约名称
:定义一个字符串类型的参数,用于接收合约名称。-
StringStrz("");//替换的字符
:定义一个字符串类型的参数,初始值为空字符串,用于指定要进行替换的字符。-
Vars
部分:-
Array<String>AB;
:定义一个字符串数组,用于存储分割后的合约名称部分。-
StringSymCode;
:定义一个字符串变量,用于存储合约代码部分。-
StringSymExch;
:定义一个字符串变量,用于存储合约交易所部分。-
Begin
部分:-
If(StringSplit(Symbolz,".",AB)<>2){ReturnInvalidString;}//分离合约交易所代码
:使用
StringSplit
函数以"."为分隔符分割合约名称
Symbolz
存入数组
AB
,如果分割结果不是两部分,则返回无效字符串。-
SymCode=AB[0];//获取合约代码部分
:将数组
AB
的第一个元素赋值给
SymCode
,即获取合约代码部分。-
SymExch=AB[1];
:将数组
AB
的第二个元素赋值给
SymExch
,即获取合约交易所部分。-
If(IsStringEx(SymCode,"9999"))//查找字符串部分含有9999
:如果合约代码部分包含字符串"9999"。-
StringReplace(SymCode,"9999","9"+Strz);
:使用
StringReplace
函数将合约代码中的"9999"替换为"9"加上参数
Strz
指定的字符。-
ElseIf(IsStringEx(SymCode,"9000"))//查找字符串部分含有9000
:如果合约代码部分包含字符串"9000"。-
StringReplace(SymCode,"9000","9"+Strz);
:使用
StringReplace
函数将合约代码中的"9000"替换为"9"加上参数
Strz
指定的字符。-
ElseIf(IsStringEx(SymCode,"9888"))//查找字符串部分含有9888
:如果合约代码部分包含字符串"9888"。-
StringReplace(SymCode,"9888","9"+Strz);
:使用
StringReplace
函数将合约代码中的"9888"替换为"9"加上参数
Strz
指定的字符。-
Else
部分:如果前面的条件都不满足。-
If(IsStringEx(SymCode,"000"))
:如果合约代码部分包含字符串"000"。-
StringReplace(SymCode,"000",Strz);
:使用
StringReplace
函数将合约代码中的"000"替换为参数
Strz
指定的字符。-
ElseIf(IsStringEx(SymCode,"999"))
:如果合约代码部分包含字符串"999"。-
StringReplace(SymCode,"999",Strz);
:使用
StringReplace
函数将合约代码中的"999"替换为参数
Strz
指定的字符。-
ElseIf(IsStringEx(SymCode,"888"))
:如果合约代码部分包含字符串"888"。-
StringReplace(SymCode,"888",Strz);
:使用
StringReplace
函数将合约代码中的"888"替换为参数
Strz
指定的字符。-
If(IsStringEx(SymCode,"999"))
:如果合约代码部分包含字符串"999"。-
ReturnSymCode+".TBFT";
:返回合约代码加上".TBFT"。-
ReturnSymCode+"."+SymExch;
:返回合约代码加上"."再加上合约交易所部分。函数二IsStringEx代码注释:-
Params
部分:-
StringStr;//原字符串
:定义一个字符串类型的参数,用于接收原字符串。-
Stringdes;//查找的字符串
:定义一个字符串类型的参数,用于指定要查找的字符串。-
Vars
部分:-
StringStrz;
:定义一个字符串变量。-
Begin
部分:-
//Strz=Lower(Str);//转换成小写字母
:注释掉的代码,原本用于将原字符串转换为小写字母。-
Strz=Str;
:将原字符串赋值给
Strz
。-
If(FindFirstOf(Strz,des)<>InvalidInteger)
:如果在
Strz
中找到
des
字符串,即
FindFirstOf
函数的返回值不是无效整数。-
ReturnTrue;
:返回真。-
ReturnFalse;
:如果没有找到指定字符串,返回假。策略信号代码注释:-
Params
部分:-
NumericLots(1);
:定义一个数值类型的参数,初始值为1,用于指定交易手数。-
Vars
部分:-
NumericMA60;
:定义一个数值变量,用于存储60周期移动平均线的值。-
NumericMinPoint;//最小变动单位
:定义一个数值变量,用于存储最小变动单位。-
NumericMQ;
:定义一个数值变量,用于存储某个价格相关的值。-
NumericMW;
:定义一个数值变量,用于存储某个价格相关的值。-
BoolDIFX(True);//底分型
:定义一个布尔变量,初始值为真,用于表示底分型状态。-
BoolDFX(True);//顶分型
:定义一个布尔变量,初始值为真,用于表示顶分型状态。-
Events
部分:-
OnBar(ArrayRef<Integer>indexs)
:当新的K线生成时触发的事件处理函数。-
MA60=Average(Close,60);
:计算收盘价的60周期移动平均线,并赋值给
MA60
。-
PlotNumeric("MA60",MA60,0,Yellow,0);
:绘制
MA60
的值在图表上,名称为"MA60",颜色为黄色。-
MinPoint=MinMove*PriceScale;
:计算最小变动单位,赋值给
MinPoint
。-
MQ=AvgEntryPrice-30*MinPoint;
:计算一个用于止损的价格值,赋值给
MQ
。-
MW=AvgEntryPrice+30*MinPoint;
:计算一个用于止损的价格值,赋值给
MW
。-
DIFX=Low[2]<Low[1]AndLow[2]<Low[3]ANDHIGH[2]<HIGH[1]ANDHIGH[2]<HIGH[3];
:判断是否为底分型状态。-
DFX=High[2]>High[1]AndHigh[2]>High[3]ANDLOW[2]>LOW[1]ANDLOW[2]>LOW[3];
:判断是否为顶分型状态。-
If(MarketPosition<>1AndClose>MA60AndDIFX)//60均线之上,出现底分型形态做多
:如果当前没有多头头寸且收盘价大于60周期移动平均线并且出现底分型形态。-
Buy(Lots,High);//做多
:以最高价买入指定手数。-
If(MarketPosition==1And((Close<MQ)OrDFX)&&BarsSinceEntry>0)//开仓即设止损(固定止损30跳),出现顶分型形态平多
:如果当前有多头头寸且收盘价小于
MQ
或者出现顶分型形态并且开仓后经过了至少一根K线。-
Sell(Lots,Low);
:以最低价卖出指定手数,平多。-
If(MarketPosition<>-1AndClose<MA60AndDFX)//60均线之下,出现顶分型形态做空
:如果当前没有空头头寸且收盘价小于60周期移动平均线并且出现顶分型形态。-
SellShort(Lots,Low);//做空
:以最低价卖出做空指定手数。-
If(MarketPosition==-1And((Close>MW)OrDIFX)&&BarsSinceEntry>0)//开仓即设止损(固定止损30跳),出现底分型形态平空
:如果当前有空头头寸且收盘价大于
MW
或者出现底分型形态并且开仓后经过了至少一根K线。-
BuyToCover(Lots,High);
:以最高价买入平仓,平空。-
Booll4e=False;//多进
:定义一个布尔变量,表示做多进场条件。-
Booll4x=False;//卖平
:定义一个布尔变量,表示平多条件。-
Bools4e=False;//空进
:定义一个布尔变量,表示做空进场条件。-
Bools4x=False;//买平
:定义一个布尔变量,表示平空条件。-
Numericl4e_price=Open;//开多价格
:定义一个数值变量,表示开多价格为开盘价。-
Numericl4x_price=Open;//平多价格
:定义一个数值变量,表示平多价格为开盘价。-
Numerics4e_price=Open;//开空价格
:定义一个数值变量,表示开空价格为开盘价。-
Numerics4x_price=Open;//平空价格
:定义一个数值变量,表示平空价格为开盘价。-
Numericlots=1;
:定义一个数值变量,表示交易手数为1。-
If(MarketPosition!=1&&l4e)
:如果当前没有多头头寸并且满足做多进场条件。-
Buy(lots,l4e_price);
:以指定手数和开多价格买入做多。-
If(MarketPosition!=-1&&s4e)
:如果当前没有空头头寸并且满足做空进场条件。-
SellShort(lots,s4e_price);
:以指定手数和开空价格卖出做空。-
If(MarketPosition==1&&BarsSinceEntry>0&&l4x)
:如果当前有多头头寸并且开仓后经过了至少一根K线并且满足平多条件。-
Sell(0,l4x_price);
:以平多价格卖出平仓。-
If(MarketPosition==-1&&BarsSinceEntry>0&&s4x)
:如果当前有空头头寸并且开仓后经过了至少一根K线并且满足平空条件。-
BuyToCover(0,s4x_price);
:以平空价格买入平仓。函数一SymbolReplace代码:ParamsStringSymbolz;StringStrz("");VarsArray<String>AB;StringSymCode;StringSymExch;BeginIf(StringSplit(Symbolz,".",AB)<>2){ReturnInvalidString;}SymCode=AB[0];SymExch=AB[1];If(IsStringEx(SymCode,"9999")){StringReplace(SymCode,"9999","9"+Strz);}ElseIf(IsStringEx(SymCode,"9000")){StringReplace(SymCode,"9000","9"+Strz);}ElseIf(IsStringEx(SymCode,"9888")){StringReplace(SymCode,"9888","9"+Strz);}Else{If(IsStringEx(SymCode,"000")){StringReplace(SymCode,"000",Strz);}ElseIf(IsStringEx(SymCode,"999")){StringReplace(SymCode,"999",Strz);}ElseIf(IsStringEx(SymCode,"888")){StringReplace(SymCode,"888",Strz);}}If(IsStringEx(SymCode,"999")){ReturnSymCode+".TBFT";}ReturnSymCode+"."+SymExch;End函数二IsStringEx代码:ParamsStringStr;Stringdes;VarsStringStrz;BeginStrz=Str;If(FindFirstOf(Strz,des)<>InvalidInteger){ReturnTrue;}ReturnFalse;End策略信号代码:ParamsNumericLots(1);VarsNumericMA60;NumericMinPoint;NumericMQ;NumericMW;BoolDIFX(True);BoolDFX(True);EventsOnBar(ArrayRef<Integer>indexs){MA60=Average(Close,60);PlotNumeric("MA60",MA60,0,Yellow,0);MinPoint=MinMove*PriceScale;MQ=AvgEntryPrice-30*MinPoint;MW=AvgEntryPrice+30*MinPoint;DIFX=Low[2]<Low[1]AndLow[2]<Low[3]ANDHIGH[2]<HIGH[1]ANDHIGH[2]<HIGH[3];DFX=High[2]>High[1]AndHigh[2]>High[3]ANDLOW[2]>LOW[1]ANDLOW[2]>LOW[3];If(MarketPosition<>1AndClose>MA60AndDIFX)Buy(Lots,High);If(MarketPosition==1And((Close<MQ)OrDFX)&&BarsSinceEntry>
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论