Skip to content

Commit

Permalink
Increased min price tick mark step up to 1e-14 (from 1e-9)
Browse files Browse the repository at this point in the history
Fixes #841
  • Loading branch information
timocov committed Nov 3, 2021
1 parent 5276863 commit 4c2aaf2
Showing 1 changed file with 9 additions and 8 deletions.
17 changes: 9 additions & 8 deletions src/model/price-tick-span-calculator.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { equal, greaterOrEqual, isBaseDecimal, log10 } from '../helpers/mathex';

const TICK_SPAN_EPSILON = 1e-9;
const enum Constants {
TickSpanEpsilon = 1e-14,
}

export class PriceTickSpanCalculator {
private readonly _base: number;
Expand Down Expand Up @@ -35,7 +37,6 @@ export class PriceTickSpanCalculator {

public tickSpan(high: number, low: number, maxTickSpan: number): number {
const minMovement = (this._base === 0) ? (0) : (1 / this._base);
const tickSpanEpsilon = TICK_SPAN_EPSILON;

let resultTickSpan = Math.pow(10, Math.max(0, Math.ceil(log10(high - low))));

Expand All @@ -46,9 +47,9 @@ export class PriceTickSpanCalculator {
while (true) {
// the second part is actual for small with very small values like 1e-10
// greaterOrEqual fails for such values
const resultTickSpanLargerMinMovement = greaterOrEqual(resultTickSpan, minMovement, tickSpanEpsilon) && resultTickSpan > (minMovement + tickSpanEpsilon);
const resultTickSpanLargerMaxTickSpan = greaterOrEqual(resultTickSpan, maxTickSpan * c, tickSpanEpsilon);
const resultTickSpanLarger1 = greaterOrEqual(resultTickSpan, 1, tickSpanEpsilon);
const resultTickSpanLargerMinMovement = greaterOrEqual(resultTickSpan, minMovement, Constants.TickSpanEpsilon) && resultTickSpan > (minMovement + Constants.TickSpanEpsilon);
const resultTickSpanLargerMaxTickSpan = greaterOrEqual(resultTickSpan, maxTickSpan * c, Constants.TickSpanEpsilon);
const resultTickSpanLarger1 = greaterOrEqual(resultTickSpan, 1, Constants.TickSpanEpsilon);
const haveToContinue = resultTickSpanLargerMinMovement && resultTickSpanLargerMaxTickSpan && resultTickSpanLarger1;
if (!haveToContinue) {
break;
Expand All @@ -57,16 +58,16 @@ export class PriceTickSpanCalculator {
c = this._integralDividers[++index % this._integralDividers.length];
}

if (resultTickSpan <= (minMovement + tickSpanEpsilon)) {
if (resultTickSpan <= (minMovement + Constants.TickSpanEpsilon)) {
resultTickSpan = minMovement;
}

resultTickSpan = Math.max(1, resultTickSpan);

if ((this._fractionalDividers.length > 0) && equal(resultTickSpan, 1, tickSpanEpsilon)) {
if ((this._fractionalDividers.length > 0) && equal(resultTickSpan, 1, Constants.TickSpanEpsilon)) {
index = 0;
c = this._fractionalDividers[0];
while (greaterOrEqual(resultTickSpan, maxTickSpan * c, tickSpanEpsilon) && resultTickSpan > (minMovement + tickSpanEpsilon)) {
while (greaterOrEqual(resultTickSpan, maxTickSpan * c, Constants.TickSpanEpsilon) && resultTickSpan > (minMovement + Constants.TickSpanEpsilon)) {
resultTickSpan /= c;
c = this._fractionalDividers[++index % this._fractionalDividers.length];
}
Expand Down

0 comments on commit 4c2aaf2

Please sign in to comment.