If (CurrentBar == 0) //在第一根K线
{
TbPosition = 1 ; //持仓状态为多头
Transition = 1 ; //持仓状态反转,状态值为1,表示为多头
Af = AfStep ; //AF等于加速因子,初始值为0.02,最大值为AFlimit,最大值为0.2
HHValue = High ; //极点最高价,在当前K线,极点最高价为当前K线的最高价
LLValue = Low ; //极点最低价,在当前K线,极点最低价为当前K线的最低价
oParClose = LLValue ;//当前K线的停损值,为极点最低价,该极点最低价为当前K线的最低价
ParOpen = oParClose + Af * ( HHValue - oParClose) ; //下一根K线的停损值,= 当前K线的停损值 + 加速因子*(极点最高价 - 当前K线的停损值(该值为极点最低价))
If (ParOpen > Low) //如果下一根K线的停损值,大于最低价
{
ParOpen = Low ; //则下一根K线的停损值,等于最低价
}
}Else //K线的索引值大于0
{
oTransition = 0 ; //状态值为0,状态保持不变
If (High > HHValue[1]) //如果最高价突破前一个极点最高价
{
HHValue = High; //当前新K线当中的极点最高价变为最新K线的最高价
}Else //如果新K线当中的最高价没有突破之前的极点最高价
{
HHValue = HHValue[1];//最新K线当中的极点最高价等于前一个极点最高价
}
If (Low < LLValue[1]) //如果新K线当中的最低价,跌破前一个极点最低价
{
LLValue = Low; //当前新K线当中的极点最低价变为最新K线的最低价
}Else //如果新K线当中的最低价没有突破之前的极点最低价
{
LLValue = LLValue[1];//最新K线当中的极点最低价等于前一个极点最低价
}
If ( TbPosition[1] == 1) //持仓状态,前一根K线的持仓状态为1,表示为多头持仓
{
If ( Low <= ParOpen[1])//如果最新价跌破ParOpen[1]的停损值
{
TbPosition = -1 ; //最新K线的持仓状态变为-1,表示转为空头持仓
oTransition = -1 ; //最新K线上已经发生反转,反转后的状态值为-1;
oParClose = HHValue ;//当前BAR的停损值为,极点最高价
HHValue = High ; //极点最高价,等于当前K线的最高价
LLValue = Low ; //极点最低价,等于当前K线的最低价
Af = AfStep ; //加速因子,初始值为0.02,最大值为0.2
ParOpen = oParClose + Af * ( LLValue - oParClose ) ; //下一根BAR的停损值 = 当前BAR的停损值 + 加速因子 * (极点最低价 - 当前BAR的停损值(当前BAR的停损值为极点最高价))
If (ParOpen < High) //如果下一根K线的停损值,小于最高价
{
ParOpen = High ; //下一根K线的停损值,等于最新K线的最高价
}
If (ParOpen < High[1]) //如果下一根K线的停损值,小于前一根K线的最高价??????意味着当前Bar的最高价小于前一根BAR的最高价,当前K线的最高价小于前一根K线的最高价,下一个ParOpen大于当前K线的最高价
{
ParOpen = High[1] ; //下一根K线的停损值,等于前一根K线的最高价
}
}Else //持仓状态未发生改变,状态值依旧为1,表示为多头持仓,最新K线的最低价未跌破前一根K线的ParOpen停损值
{
TbPosition = TbPosition[1]; //当前的持仓状态为前一根K线的持仓状态
oParClose = ParOpen[1] ; //当前BAR的停损值,等于ParOpen[1]
If (HHValue > HHValue[1] And Af[1] < AfLimit ) //如果最新K线的极点最高价大于之前K线的极点最高价,同时前一根K线的加速因子小于Aflimit(加速因子最大值)
{
If(Af[1]+AfStep > AfLimit) //如果前一根K线的加速因子 + 加速因子的默认值0.02 > 加速因子的最大值
{
Af = AfLimit ; //当前K线的加速因子等于加速因子的最大值,最大值为0.2
}Else //如果前一根K线的加速因子 + 加速因子的默认值0.02 < 加速因子的最大值
{
Af = Af[1]+AfStep; //当前K线的加速因子等于,前一根K线的加速因子 + 加速因子的默认值0.02
}
}Else //最新K线的高价未创新高
{
Af = Af[1]; //当前K线的加速因子等于前一根K线的加速因子
}
ParOpen = oParClose + Af * ( HHValue - oParClose ) ; //下一根BAR的停损值 = 前一根BAR的停损值 + 加速因子*(极点最高价 - 前一根BAR的停损值)
If (ParOpen > Low) //下一根BAR的停损值,大于当前K线的最低价
{
ParOpen = Low ; //下一根BAR的停损值,等于当前K线的最低价
}
If (ParOpen > Low[1]) //下一根BAR的停损值,大于前一根K线的最低价,意味着最新的ParOpen小于当前K线的最低价
{
ParOpen = Low[1]; //下一根BAR的停损值,等于前一根K线的最低价
}
}
}Else //持仓状态为-1 ,表示空头状态
{
If (High >= ParOpen[1]) //如果最高价,大于ParOpen[1]的停损值,由空头状态转为多头持仓状态
{
TbPosition = 1 ; //当前K线的持仓状态为1,表示多头持仓
oTransition = 1 ; //最新K线已经发生反转,反转后的状态值为1
oParClose = LLValue ; //当前BAR的停损值,等于极点最低价
HHValue = High ; //极点最高价,等于当前K线的最高价
LLValue = Low ; //极点最低价,等于当前K线的最低价
Af = AfStep ; //加速因子 = AfStep,初始默认值为0.02
ParOpen = oParClose + Af * ( HHValue - oParClose) ; //下一个BAR的停损值 = 当前BAR的停损值 + 加速因子 * (极点最高价 - 当前BAR的停损值)
If (ParOpen > Low) //如果下一个BAR的停损值大于当前K线的最低价
{
ParOpen = Low ; //下一个BAR的停损值 = 当前K线的最低价
}
If (ParOpen > Low[1]) //如果下一个BAR的停损值大于前一根K线的最低价,ParOpen小于当前的K线的最低价,大于前一根K线的最低价,当前K线的最低价大于前一根K线的最低价
{
ParOpen = Low[1]; //下一个BAR的停损值 = 前一根K线的最低价
}
}Else //持仓状态未发生改变,最高价没有突破ParOpen[1]的停损价,状态值依旧为-1,表示空头状态
{
TbPosition = TbPosition[1]; //当前K线的持仓状态等于前一根K线的持仓状态,依旧为-1
oParClose = ParOpen[1]; //当前BAR的停损值,等于ParOpen[1]
If (LLValue < LLValue[1] And Af[1] < AfLimit ) //当前K线的极点最低价小于前一根K线的极点最低价,同时前一根K线的加速因子小于加速因子最大值0.2
{
If(Af[1]+AfStep > AfLimit) //如果前一根K线的加速因子加上加速因子默认值0.02 > 加速因子的最大值
{
Af = AfLimit ; //加速因子等于加速因子的最大值
}Else //如果前一根K线的加速因子加上加速因子默认值0.02 < 加速因子的最大值
{
Af = Af[1]+AfStep; //加速因子 = 前一根K线的加速因子 + 加速因子的默认值
}
}Else //最新K线的最低价未跌破前一根K线的极点最低价
{
Af = Af[1]; //当前K线的加速因子,等于前一根K线的加速因子
}
ParOpen = oParClose + Af * ( LLValue - oParClose ) ; //下一个BAR的停损值 = 当前BAR的停损值 + 加速因子 * (极点最低价 - 当前BAR的停损值)
If (ParOpen < High) //如果下一个BAR的停损值,小于当前K线的最高价
{
ParOpen = High ;//则下一个BAR的停损值,等于当前K线的最高价
}
If (ParOpen < High[1])//如果下一根BAR的停损值,小于前一根K线的最高价,ParOpen大于当前K线的最高价,小于前一根K线的最高价,当前K线的最高价小于前一根K线的最高价
{
ParOpen = High[1] ;//则下一个BAR的停损值,等于前一根K线的最高价
}
}
}
}
oParOpen = ParOpen;
oTbPosition = TbPosition;
Return True;
请教老师,在系统公式当中的SAR代码当中, ParOpen = oParClose + Af * ( HHValue - oParClose ) ; ParOpen的价格通过计算已经获得了,但是在接下来的几行代码当中又通过If语句对ParOpen进行了赋值,
If (ParOpen > Low) //如果下一根K线的停损值,大于最低价
{
ParOpen = Low ; //则下一根K线的停损值,等于最低价
}
这应该怎么理解呢 ,在SAR多头行情当中,已经通过计算的方式得到了ParOpen的值,但是接着又通过If语句对ParOpen进行了判断,并且在If语句的范围当中,对ParOpen进行了赋值,最后在图表当中得到的ParOpen又是通过计算得来的,有点迷糊,希望老师有空可以帮忙解答一下,感激不尽
算法就是这样,按照算法就是这样判断的,不知道疑问在哪里?
oParClose = LLValue ;//当前K线的停损值,为极点最低价,该极点最低价为当前K线的最低价
ParOpen = oParClose + Af * ( HHValue - oParClose) ; //下一根K线的停损值,= 当前K线的停损值 + 加速因子*(极点最高价 - 当前K线的停损值(该值为极点最低价))
If (ParOpen > Low) //如果下一根K线的停损值,大于最低价
{
ParOpen = Low ; //则下一根K线的停损值,等于最低价
}
老师好,主要就是后面IF部分当中的内容,之前已经计算得出了,后面通过IF条件语句,后面方括号内进行重新赋值,为啥ParOpen的值没有被覆盖呢
这是条件啊 必须大于low才能覆盖啊
没有覆盖就是没有大于low啊