xlc.quant.data.indicator.calculator.BIAS Maven / Gradle / Ivy
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
* 百度百科:BIAS 乖离率=(当日收盘价-N日内移动平均价)/N日内移动平均价╳100%
*
* 乖离率又称为y值,是反映股价在波动过程中与移动平均线偏离程度的技术指标。
* 它的理论基础是:不论股价在移动平均线之上或之下,只要偏离距离过远,就会向移动平均线趋近,
* 据此计算股价偏离移动平均线百分比的大小来判断买卖时机。
* 由于股价相对于不同日数的移动平均线有不同的乖离率,除去暴涨或暴跌会使乖离率瞬间达到高百分比外,短、中、长线的乖离率一般均有规律可循。
*
* 下面是国外不同日数移动平均线达到买卖讯事号要求的参考数据:
* 6日平均值乖离:-3%是买进时机,+3.5是卖出时机;
* 12日平均值乖离:-4.5%是买进时机,+5%是卖出时机;
* 24日平均值乖离:-7%是买进时机,+8%是卖出时机;
* 72日平均值乖离:-11%是买进时机,+11%是卖出时机
*
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class BIAS extends Indicator {
//=============
//内部类分隔符 XXX
//=============
/**
* 构建计算器
*
* @param capacity
* @return
*/
public static > IndicatorCalculator buildCalculator(int capacity) {
return new BIASCalculator<>(capacity);
}
/**
* BIAS-计算器
*
* @author Rootfive
*/
private static class BIASCalculator> extends IndicatorCalculator {
/**
* @param capacity
*/
BIASCalculator(int capacity) {
super(capacity, true);
}
@Override
protected Double executeCalculate(Function propertyGetter) {
CARRIER head = getHead();
// 当前使用价格
double currentUsePrice = head.getClose();
double sumValue = head.getClose();
for (int i = 1; i < carrierData.length; i++) {
sumValue = sumValue+getPrevByNum(i).getClose();
}
// 缓冲区内所有 平均值
Double ma = DoubleUtils.divide(sumValue, circularPeriod, DoubleUtils.MAX_SCALE);
// 计算公式:BIAS 乖离率=(当日收盘价-N日内移动平均价)/N日内移动平均价╳100%
return DoubleUtils.divideByPct(currentUsePrice-ma, ma);
}
}
}