关于SAR状态当中极值最高价最低价问题请教

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啊