[#20] AssetDataAggregator erstellt und integriert

This commit is contained in:
darkeye 2025-01-11 11:47:21 +01:00
parent 721a3a598a
commit 2c13099a2c
3 changed files with 65 additions and 7 deletions

View File

@ -119,11 +119,13 @@ export default class AggregatedDataPoint {
}
/**
* @param {TradeEvent} trade
* @param {number} time
* @param {number} price
* @param {number} quantity
*/
pushTrade(trade){
pushTrade(time, price, quantity){
this.tradeCount ++;
this.tradeVolume += trade.quantity;
this.tradeVolume += quantity;
}
/**

View File

@ -4,6 +4,7 @@ import OrderBookUpdateEvent from "../../../apiwrapper/event/OrderBookUpdateEvent
import Ticker24hEvent from "../../../apiwrapper/event/Ticker24hEvent.js";
import OrderBook from "../../../apiwrapper/orderbook/OrderBook.js";
import OrderBookEntry from "../../../apiwrapper/orderbook/OrderBookEntry.js";
import AssetDataAggregator from "./AssetDataAggregator.js";
import AssetDataCollectionConfig from "./AssetDataCollectionConfig.js";
import PeakDetector from "./PeakDetector.js";
import TimedAssetData from "./TimedAssetData.js";
@ -69,6 +70,11 @@ export default class AssetData extends TimedAssetData {
*/
#peakDetector = new PeakDetector();
/**
* @type {AssetDataAggregator}
*/
assetDataAggregator = new AssetDataAggregator();
/**
* @param {TradingPair} tradingPair
* @param {AssetDataCollectionConfig} collectionConfig
@ -98,6 +104,7 @@ export default class AssetData extends TimedAssetData {
*/
updateKline(klineEvent) {
this.push(klineEvent.high, klineEvent.low, klineEvent.open, klineEvent.close);
this.assetDataAggregator.pushKLine(klineEvent.timestamp, klineEvent.low, klineEvent.high, klineEvent.open, klineEvent.close);
}
/**
@ -108,6 +115,8 @@ export default class AssetData extends TimedAssetData {
this.pushBestBid(this.#orderBook.getBestBid());
this.pushBestAsk(this.#orderBook.getBestAsk());
this.#peakDetector.push(this.#orderBook.getBestAsk());
this.assetDataAggregator.pushBestAsk(this.#orderBook.getBestAsk());
this.assetDataAggregator.pushBestBid(this.#orderBook.getBestBid());
}
/**
@ -187,4 +196,15 @@ export default class AssetData extends TimedAssetData {
slots[i].removeSubData();
}
}
/**
* @param {number} time
* @param {number} price
* @param {number} quantity
*/
pushTrade(time, price, quantity) {
super.pushTrade(time, price, quantity);
this.assetDataAggregator.pushTrade(time, price, quantity);
}
}

View File

@ -1,4 +1,4 @@
import TradeEvent from "../../../apiwrapper/event/TradeEvent.js";
import OrderBookEntry from "../../../apiwrapper/orderbook/OrderBookEntry.js";
import UnitHelper from "../../util/UnitHelper.js";
import AggregatedDataPoint from "./AggregatedDataPoint.js";
@ -123,8 +123,17 @@ export default class AssetDataAggregator {
const durationInMs = UnitHelper.formatedDurationToMs(duration);
// if seconds data required
if(duration <= 60000 && start == -1){
if(durationInMs <= 60000 && start == -1){
const dpCount = Math.round(durationInMs / AssetDataAggregator.#SLOT_1_SEC);
if(dpCount <= this.#perSecondDataPoints.length){
result = this.#perSecondDataPoints.slice(-1 * dpCount);
}
} else {
const dpCount = Math.round(durationInMs / AssetDataAggregator.#SLOT_1_MIN);
const pointOffset = start == -1 ? 0 : Math.round(start / AssetDataAggregator.#SLOT_1_MIN);
if(pointOffset + dpCount <= this.#perMinuteDataPoints.length){
result = this.#perMinuteDataPoints.slice(-1 * (pointOffset + dpCount), -1 * pointOffset);
}
}
return result;
@ -137,7 +146,34 @@ export default class AssetDataAggregator {
*/
pushTrade(time, price, quantity) {
this.#updateCurrentDataPoint();
this.#currentDataPoint.pushTrade(/* TODO */);
this.#currentDataPoint.pushTrade(time, price, quantity);
}
/**
* @param {number} time
* @param {number} low
* @param {number} high
* @param {number} open
* @param {number} close
*/
pushKLine(time, low, high, open, close){
// ingore actual data and just update the point, as data is taken only from orderbook
this.#updateCurrentDataPoint();
}
/**
* @param {OrderBookEntry} ask
*/
pushBestAsk(ask){
this.#updateCurrentDataPoint();
this.#currentDataPoint.pushAsk(ask);
}
/**
* @param {OrderBookEntry} bid
*/
pushBestBid(bid){
this.#updateCurrentDataPoint();
this.#currentDataPoint.pushBid(bid);
}
}