威廉指标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
總結
以上是生活随笔為你收集整理的威廉指标WR计算公式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么自学Java学不好?大概率是这3个
- 下一篇: u盘坏了数据可以恢复吗?用u盘数据恢复软