All Downloads are FREE. Search and download functionalities are using the official Maven repository.

xlc.quant.data.indicator.calculator.WR Maven / Gradle / Ivy

There is a newer version: XLCQ20240604
Show newest version
package xlc.quant.data.indicator.calculator;

import java.util.function.Function;

import lombok.Data;
import lombok.EqualsAndHashCode;
import xlc.quant.data.indicator.Indicator;
import xlc.quant.data.indicator.IndicatorCalculator;
import xlc.quant.data.indicator.IndicatorComputeCarrier;
import xlc.quant.data.indicator.util.DoubleUtils;

/**
 * 威廉指标
 * @author Rootfive
 * 
 * 威廉指标(Williams %R或简称W%R)
 * 百度百科:https://baike.baidu.com/item/%E5%A8%81%E5%BB%89%E6%8C%87%E6%A0%87
 * W&R属于摆动类反向指标, 即:修复当股价上涨,W&R指标向下。股价下跌,W&R指标向上,则为上涨。
 * 这种指标的最大的缺点就是买卖过于频繁,因此我们应该通过改变指标的参数来修正指标的缺陷。 主要区别 1.W&R波动于0~100,0
 * 位于顶部,100位于底部。 2.本指标以50为中轴线,高于50视为股价转强;低于50视为股价转弱。
 * 3.本指标高于20后再度向下跌破20卖出;低于80后再度向上突破80买进。
 * 4.W&R连续触顶3~4次,股价向下反转机率大;连续触底3~4次, 股价向上反转机。
 * =======================================================================
 * W&R主要可辅助RSI,确认强转弱或弱转强是否可靠;RSI向上穿越5阴阳分界时,要看W%R是否也向上空越50,如果同步,则可靠。
 * 相反,向下穿越af0时,也是同样的道理。比较两者是否同步时,其设定的参数必须是相对的比例,
 * 大致上W&R5日、10日、20日对应RSI6日、12日、24日,可以依照自己的测试结果,要自行调整其最佳对应比例。
 * W&R表示超买或超卖时,应立即寻求MACD讯号支援。当W&R表示超买时,是作为一种预警作用的效果。
 * ==============================================================================
 * 应用法则 1.当威廉指数线高于85,市场处于超卖状态,行情即将见底。 2.当威廉指数线低于15,市场处于超买状态,行情即将见顶。
 * 3.与相对强弱指数配合使用,可得出对大市走向较为准确的判断。 4.使用威廉指数作为预测市场工具,既不容易错过大的行情,也不容易在高价区套牢。 使用方法
 * 当W&R高于80,即处于超卖状态,行情即将见底,应当考虑买进。 当W&R低于20,即处于超买状态,行情即将见顶,应当考虑卖出。
 * 在W&R进入高位后,一般要回头,如果股价继续上升就产生了背离,是卖出信号。 在W&R进入低位后,一般要反弹,如果股价继续下降就产生了背离。
 * W&R连续几次撞顶(底),局部形成双重或多重顶(底),是卖出(买进)的信号。
 * 同时,使用过程中应该注意与其他技术指标相互配合。在盘整的过程中,W&R的准确性较高,而在上升或下降趋势当中,却不能只以W&R超买超卖信号作为行情判断的依据。
 * 
*/ @Data @EqualsAndHashCode(callSuper = true) public class WR extends Indicator { //============= //内部类分隔符 XXX //============= /** * 构建-计算器 * @param capacity * @return */ public static > IndicatorCalculator buildCalculator(int capacity) { return new WRIndicatorCalculateExecutor<>(capacity); } /** * 计算器 * @author Rootfive */ private static class WRIndicatorCalculateExecutor> extends IndicatorCalculator { /** * @param capacity */ public WRIndicatorCalculateExecutor(int capacity) { super(capacity, true); } @Override protected Double executeCalculate(Function propertyGetter) { CARRIER head = getHead(); double headClose = head.getClose(); double maxHigh = head.getHigh(); double minLow = head.getLow(); for (int i = 1; i < carrierData.length; i++) { CARRIER carrier_i = getPrevByNum(i); maxHigh = Math.max(maxHigh, carrier_i.getHigh()); minLow = Math.min(minLow, carrier_i.getLow()); } // 计算公式:W%R=(Hn—C)÷(Hn—Ln)×100其中 Double wrValue = null; if (maxHigh == minLow) { //连续横盘的极端情况maxHigh=minLow wrValue = DoubleUtils.ZERO; }else { wrValue = DoubleUtils.divideByPct(maxHigh-headClose, maxHigh-minLow); } return wrValue; } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy