使用股票报价我需要找到具有以下输入参数的范围:查找股票报价范围
价格步骤:尽可能降低价格变动。步骤= 0.01意味着报价可以是100.01,100.1,但不是100.015。对于'大'股可以是> 1。
范围内的步数。步骤= 10意味着我需要10次最低价格变动。像[100.1; 100.2)需要调整时间间隔以尽量减少移动,所以不需要[100.015; 100.15)可能的时间间隔。
输入引号任何双(6个位数后,就足够了),可能会或可能不会遵守价格一步规则(例如,从股市的直接价值服从,但平均值不)。显然,报价应该是间隔的。我尝试了不同的方法,但都失败了。
范围是相当简单:
public class Range<T extends Comparable> {
private T from = null;
private T to = null;
public Range(T from, T to) {
this.from = from;
this.to = to;
}
public T getFrom() {
return from;
}
public T getTo() {
return to;
}
@SuppressWarnings("unchecked")
public boolean contains(T value) {
return from.compareTo(value) <= 0 && to.compareTo(value) > 0;
}
@Override
public String toString() {
return "Range{" +
"from=" + from +
", to=" + to +
'}';
}
}
protected static Range<Double> getRangeFromPrice(double pips, int step, double price) {
BigDecimal modifier = new BigDecimal(pips * step).setScale(6, BigDecimal.ROUND_HALF_DOWN);
BigDecimal begin = new BigDecimal(price).divide(modifier, 0, BigDecimal.ROUND_HALF_DOWN).multiply(modifier);
return new Range<>(begin.doubleValue(), begin.add(modifier).doubleValue());
}
此功能的大部分时间,例如对于点数= 0.01和步长= 10
- 价= 132范围{从= 132.0,以= 132.1}确定
- 价格= 132.01范围从{= 132.0,为= 132.1}确定
- 价格= 132.1范围从{= 132.1,为= 132.2}确定
- 价格= 132.15范围从{= 132.2,为= 132.3} < - ERROR,价格不在间隔
我尝试不同的舍入策略,但它们都失败(在一个实例中或另外的)。现在我完全没有想法。我怎样才能自动选择舍入策略?