From 6c4da7fac6ea909adac1be00e238d213e84c0ec6 Mon Sep 17 00:00:00 2001 From: Brian Picciano Date: Sun, 26 Apr 2020 18:15:15 -0600 Subject: add trading in the rain post --- assets/trading-in-the-rain/SeriesComposer.js | 51 ++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 assets/trading-in-the-rain/SeriesComposer.js (limited to 'assets/trading-in-the-rain/SeriesComposer.js') diff --git a/assets/trading-in-the-rain/SeriesComposer.js b/assets/trading-in-the-rain/SeriesComposer.js new file mode 100644 index 0000000..134c64c --- /dev/null +++ b/assets/trading-in-the-rain/SeriesComposer.js @@ -0,0 +1,51 @@ +function SeriesComposer(resource, rainCanvas, color) { + this.rainCanvas = rainCanvas; + this.color = color; + + this.priceDist = new Distributor(200); + this.volumeDist = new Distributor(200); + this.musicBox = new MusicBox(this.priceDist, this.volumeDist); + + this.enabled = false; + this.setEnabled = (enabled) => this.enabled = enabled; + this.getEnabled = () => { return this.enabled; } + + this.totalTrades = 0; + this.getTotalTrades = () => { return this.totalTrades; } + + this.cw = new CW(resource); + this.cw.ontrades = (trades) => { + if (this.totalTrades > 0 && this.enabled) { + let priceVols = {}; // sum volumes by price, for deduplication + for (let i in trades) { + let price = trades[i].price, volume = trades[i].volume; + if (!priceVols[price]) priceVols[price] = 0; + priceVols[price] += volume; + } + + trades = []; // overwrite trades with deduplicated ones. + for (let price in priceVols) { + let volume = priceVols[price]; + let intensity = this.volumeDist.distribute(volume, 0, 1); + this.rainCanvas.newDrop({ + x: this.priceDist.distribute(price, 0, 1), + y: Math.random(), + intensity: intensity, + color: this.color, + }); + + trades.push({price: price, volume: volume}); + } + + this.musicBox.playTrades(trades); + } + + for (let i in trades) { + this.priceDist.add(trades[i].price); + this.volumeDist.add(trades[i].volume); + } + + this.totalTrades += trades.length; + if (this.ontrades) this.ontrades(trades); + }; +} -- cgit v1.2.3