Skip to content

Commit

Permalink
fix: fix indicator precision error.
Browse files Browse the repository at this point in the history
  • Loading branch information
liihuu committed May 10, 2024
1 parent ddbb0ef commit 36e8d10
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 10 deletions.
2 changes: 1 addition & 1 deletion src/store/ChartStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ export default class ChartStore {

setPrecision (precision: Precision): this {
this._precision = precision
this._indicatorStore.setSeriesPrecision(precision)
this._indicatorStore.synchronizeSeriesPrecision()
return this
}

Expand Down
33 changes: 24 additions & 9 deletions src/store/IndicatorStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
*/

import type Nullable from '../common/Nullable'
import type Precision from '../common/Precision'
import { isValid, isString, isArray, isNumber, isBoolean, isFunction } from '../common/utils/typeChecks'

import type ChartStore from './ChartStore'
Expand Down Expand Up @@ -123,6 +122,8 @@ export default class IndicatorStore {
}
const IndicatorClazz = getIndicatorClass(name)!
const instance = new IndicatorClazz()

this.synchronizeSeriesPrecision(instance)
this._overrideInstance(instance, indicator)
if (!isStack) {
paneInstances = []
Expand Down Expand Up @@ -215,17 +216,31 @@ export default class IndicatorStore {
return mapping
}

setSeriesPrecision (precision: Precision): void {
this._instances.forEach(paneInstances => {
paneInstances.forEach(instance => {
if (instance.series === IndicatorSeries.Price) {
instance.setPrecision(precision.price, true)
synchronizeSeriesPrecision (indicator?: IndicatorImp): void {
const { price: pricePrecision, volume: volumePrecision } = this._chartStore.getPrecision()
const synchronize: ((instance: IndicatorImp) => void) = instance => {
switch (instance.series) {
case IndicatorSeries.Price: {
instance.setPrecision(pricePrecision, true)
break
}
if (instance.series === IndicatorSeries.Volume) {
instance.setPrecision(precision.volume, true)
case IndicatorSeries.Volume: {
instance.setPrecision(volumePrecision, true)
break
}
default: { break }
}
}

if (isValid(indicator)) {
synchronize(indicator)
} else {
this._instances.forEach(paneInstances => {
paneInstances.forEach(instance => {
synchronize(instance)
})
})
})
}
}

async override (indicator: IndicatorCreate, paneId: Nullable<string>): Promise<[boolean, boolean]> {
Expand Down

0 comments on commit 36e8d10

Please sign in to comment.