威廉指标WR计算公式

威廉指标WR计算公式

威廉指标的计算主要是利用分析周期内的最高价、最低价及周期结束的收盘价等三者之间的关系展开的。以日威廉指标为例,其计算公式为:

WR=(Hn-C)÷(Hn-Ln)×100

其中:C为计算日的收盘价,Ln为N周期内的最低价,Hn为N周期内的最高价,公式中的N为选定的计算时间参数,一般为4或14。

以计算周期为14日为例,其计算过程如下:

WR(14日)=(H14-C)÷(H14-L14)×100

其中,C为第14天的收盘价,H14为14日内的最高价,L14为14日内的最低价。

威廉指标是表示当天的收盘价在过去一段时间里的全部价格范围内所处的相对位置,因此,计算出的W%R值位于0-100之间。越接近0值,表明目前的价位越接近过去14日内的最低价;越接近100值,表明目前的价位越接近过去14日内的最高价,从这点出发,对于威廉指标的研判可能比较更容易理解。

由于计算方法的不同,威廉指标的刻度在有些书中与随机指标W%R和相对强弱指标RSI一样,顺序是一样的,即上界为100、下界为0。为方便投资者,这里介绍的W%R的刻度上界为100、下界为0。

另外,和其他指标的计算一样,由于选用的计算周期的不同,W%R指标也包括日W%R指标、周W%R指标、月W%R指标和年W%R指标以及分钟W%R指标等各种类型。经常被用于股市研判的是日W%R指标和周W%R指标。虽然它们的计算时的取值有所不同,但基本的计算方法一样。

威廉指标算法:

N日内最高价与当日收盘价的差,除以N日内最高价与最低价的差,结果放大100倍参数:N 统计天数 一般取14天

威廉指标用法:

1.低于20,可能超买见顶,可考虑卖出
2.高于80,可能超卖见底,可考虑买进
3.与RSI、MTM指标配合使用,效果更好

威廉技术指标计算规则:https://stockapi.com.cn

上代码:

@Slf4j
public class StockServiceImpl5 {

 public void getWrStock() {
 //由于每次查询到的数据有限,故分三次获取数据
 	boolean wr = getWR(code, name, newStart1, newEnd1, newStart2, newEnd2, newStart3, newEnd3);
 }


/**
     * 计算威廉指标保存起来
     */
    public boolean getWR(String code, String name, LocalDate newStart1, LocalDate newEnd1, LocalDate newStart2, LocalDate newEnd2, LocalDate newStart3, LocalDate newEnd3) {
  
        try {
            String paramsStr = "showapi_appid=" + showapi_appid + "&showapi_sign=" + showapi_sign + "&begin=" + newStart3 + "&end=" + newEnd3 + "&code=" + code;
            List<WwStockDetail> list3 = getStockList(paramsStr);
            if (CollectionUtils.isEmpty(list3)) {
                return false;
            }

            //拼接接口所需的参数
            paramsStr = "showapi_appid=" + showapi_appid + "&showapi_sign=" + showapi_sign + "&begin=" + newStart1 + "&end=" + newEnd1 + "&code=" + code;
            List<WwStockDetail> list1 = getStockList(paramsStr);
            if (CollectionUtils.isEmpty(list1)) {
                return false;
            }
            int random = (int) ((Math.random() * 100) + 20);
            System.out.println("sleepRandom:----" + random);
            Thread.sleep(random);

            //拼接接口所需的参数
            paramsStr = "showapi_appid=" + showapi_appid + "&showapi_sign=" + showapi_sign + "&begin=" + newStart2 + "&end=" + newEnd2 + "&code=" + code;
            List<WwStockDetail> list2 = getStockList(paramsStr);
            if (CollectionUtils.isEmpty(list2)) {
                return false;
            }
            List<WwStockDetail> alls = new ArrayList<>();
            alls.addAll(list3);
            alls.addAll(list2);
            alls.addAll(list1);
            if (alls.size() < 42) {
                return false;
            }
            log.info("tockServiceImpl5.getWR alls:{}", alls);
            //取21日和42日计算威廉指标
            List<WwStockDetail> collect21 = alls.stream().limit(21).collect(Collectors.toList());
            List<WwStockDetail> collect42 = alls.stream().limit(42).collect(Collectors.toList());
            DoubleSummaryStatistics num21Max = collect21.stream().mapToDouble(u -> u.getMax_price())
                    .summaryStatistics();
            DoubleSummaryStatistics num21Min = collect21.stream().mapToDouble(u -> u.getMin_price())
                    .summaryStatistics();

            DoubleSummaryStatistics num42Max = collect42.stream().mapToDouble(u -> u.getMax_price())
                    .summaryStatistics();
            DoubleSummaryStatistics num42Min = collect42.stream().mapToDouble(u -> u.getMin_price())
                    .summaryStatistics();
            //W%R(14日)=(H14—C)÷(H14—L14)×100.
            Double close = alls.get(0).getClose_price();
            Double open = alls.get(0).getOpen_price();
            double wr21 = (num21Max.getMax() - close) / (num21Max.getMax() - num21Min.getMin()) * 100;
            double wr42 = (num42Max.getMax() - close) / (num42Max.getMax() - num42Min.getMin()) * 100;
            String wr21Value = String.format("%.3f", wr21);
            String wr42Value = String.format("%.3f", wr42);
            double wr21Last = Double.parseDouble(wr21Value);
            double wr42Last = Double.parseDouble(wr42Value);
            double abs = Math.abs(wr21Last - wr42Last);
            //wr在最底部的入选
            if (abs < 0.5 && wr21Last >= 0 && wr21Last <= 20 && close > open) {
                System.out.println(close + "___" + open);
                //判断成交量是不是放倍量
                boolean stockKlineDay = getStockKlineDay(code);
                if (stockKlineDay) {
                    int random2 = (int) ((Math.random() * 100) + 100);
                    Thread.sleep(random2);
                    WrStock wrStock = WrStock.builder().code(code).name(name).open(open.toString()).close(close.toString()).wr21(wr21Value).wr42(wr42Value).build();
                    wrStockMapper.insert(wrStock);
                    return true;
                }
            return false;
        } catch (InterruptedException e) {
            log.info("InterruptedException", e);
            return false;
        }
    }
}

威廉技术指标计算规则:https://stockapi.com.cn

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

量化接口stockapi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值