为了测试一些想法和策略,需要实现一些行情上的功能,而这些功能是基于pivot转折点来开发和延伸的。所以在这里花点时间,完全理解这个公式的逻辑,第一是为未来更好的使用,第二是为了借鉴其思路,之后开发类似的函数/指标。
TB公式如下:
//------------------------------------------------------------------------
// 简称: Pivot
// 名称: 求转折
// 类别: 用户函数
// 类型: 内建函数
// 输出: 布尔型
//------------------------------------------------------------------------
Params
Series<Numeric> Price(1); //数值型序列值
Numeric Length(10); //周期数
Numeric LeftStrength(1); //转折点左边Bar数
Numeric RightStrength(1); //转折点右边Bar数
Numeric Instance(1); //波峰点回溯值
Numeric HiLo(1); //1 - 求高点, -1 - 求低点
NumericRef PivotPrice; //转折点数值
NumericRef PivotBar; //转折点回溯索引
Vars
Numeric CandidatePrice( 0 );
Numeric LengthCntr( 0 );
Numeric StrengthCntr( 0 );
Numeric InstanceCntr( 0 );
Bool PivotTest( False);
Bool InstanceTest( False ) ;
Begin
InstanceCntr = 0 ;
InstanceTest = False ;
LengthCntr = RightStrength ;
While (LengthCntr < Length && (!InstanceTest ))
{
CandidatePrice = Price[LengthCntr] ;
PivotTest = True ;
StrengthCntr = LengthCntr 1 ;
While (PivotTest && StrengthCntr - LengthCntr <= LeftStrength )
{
If (( HiLo == 1 And CandidatePrice < Price[StrengthCntr] ) Or ( HiLo == -1 And CandidatePrice > Price[StrengthCntr] ))
PivotTest = False;
Else
StrengthCntr = StrengthCntr 1 ;
}
StrengthCntr = LengthCntr - 1 ;
While (PivotTest && (LengthCntr - StrengthCntr) <= RightStrength )
{
If (( HiLo == 1 And CandidatePrice <= Price[StrengthCntr] ) Or ( HiLo == -1 And CandidatePrice >= Price[StrengthCntr] ))
PivotTest = False;
Else
StrengthCntr = StrengthCntr - 1 ;
}
If (PivotTest)
InstanceCntr = InstanceCntr 1 ;
If (InstanceCntr == Instance)
InstanceTest = True;
Else
LengthCntr = LengthCntr 1 ;
}
If (InstanceTest )
{
PivotPrice = CandidatePrice ;
PivotBar = LengthCntr ;
Return True;
}Else
{
PivotPrice = -1 ;
PivotBar = -1 ;
Return False;
}
End
//------------------------------------------------------------------------
// 编译版本 GS2010.12.08
// 版权所有 TradeBlazer Software 2003-2025
// 更改声明 TradeBlazer Software保留对TradeBlazer平
// 台每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
这个公式的逻辑如下:
1. 定义参数和变量
参数:
- Price: 数值型序列值
- Length: 周期数
- LeftStrength: 转折点左边Bar数,即所确定的转折点左边最少的bar数量
- RightStrength: 转折点右边Bar数,即所确定的转折点右边最少的bar数量,也是数据比较的起点。
- Instance: 波峰点回溯值
- HiLo: 1-求高点,-1-求低点
变量:
- CandidatePrice: 候选价格
- LengthCntr: 周期计数器
- StrengthCntr: 转折点计数器
- InstanceCntr: 波峰点计数器
- PivotTest: 转折点测试
- InstanceTest: 波峰点测试
- PivotPrice: 转折点数值
- PivotBar: 转折点回溯索引
2. 初始化变量
将InstanceCntr、InstanceTest、LengthCntr、CandidatePrice、PivotPrice和PivotBar全部初始化为0或False。
3. 循环每个周期
在一个while循环中,从周期数的RightStrength位置开始,逐一往后检查每个周期,直到周期数Length,或找到预期波峰点为止。判断波峰点的符合条件的标准是,该周期的某个价格是最高值(如果HiLo=1),或该周期的某个价格是最低值(如果HiLo=-1),且满足转折点左边Bar数的要求。
4. 检查波峰点右边
如果找到波峰点,就从该波峰点的下一个周期(LengthCntr-1)开始往前检查RightStrength个周期,看是否有符合转折点条件的周期,即找到价格最高(如果HiLo=1)或者价格最低(如果HiLo=-1)的周期,且满足转折点右边Bar数的条件。
5. 检查波峰点回溯值
如果找到了符合条件的波峰点,就记录下来。并将InstanceCntr加1,InstanceTest标记为True,以便继续寻找波峰点的回溯值。
6. 检查是否找到目标波峰点
如果InstanceCntr等于Instance,则说明已经找到目标波峰点,将PivotPrice设置为候选价格,将PivotBar设置为LengthCntr,函数返回True。
7. 返回结果
如果成功找到波峰点则返回True,否则将PivotPrice和PivotBar设置为-1,函数返回False。
思考与应用:
思考:这个公式非常好,无论是实用性,延展性还是可借鉴思路,都是很好的一个样例。当然理解公式的过程中,我也经历了几个困惑不解的地方,后来慢慢一点点也攻克完全理解了。而重点就在于对Left/RightStrength这两个参数的正确理解。
拓展:有了这个pivot公式之后,就可以使用Swinghigh,Swinghighbar,Swinglow,Swinglowbar这4个公式来确定转折点的价格和回溯值了。
测试:SwingHighPrice = SwingHigh( 1, Close, 1,2); SwingLowPrice = SwingLow( 1, Close, 1, 2 );这是个简单的找到顶底分形的公式,且没有未来函数,找到的点要等到下一周期的高低点成立才能确定,因此,当高低点确定后,图中的bar定位,和高低的价格定位,都需要向前回溯一个周期。
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved