diff --git a/src/DataManipulator.ts b/src/DataManipulator.ts index 7f622955cc..dd672caa91 100644 --- a/src/DataManipulator.ts +++ b/src/DataManipulator.ts @@ -1,20 +1,34 @@ import { ServerRespond } from './DataStreamer'; export interface Row { - stock: string, - top_ask_price: number, - timestamp: Date, + price_abc: number, + price_def : number, + ratio: number, + timestamp:Date, + upper_bound:number, + lower_bound: number, + trigger_alert:number | undefined, + } export class DataManipulator { - static generateRow(serverResponds: ServerRespond[]) { - return serverResponds.map((el: any) => { - return { - stock: el.stock, - top_ask_price: el.top_ask && el.top_ask.price || 0, - timestamp: el.timestamp, - }; - }) + static generateRow(serverRespond: ServerRespond[]): Row { + const priceABC=(serverRespond[0].top_ask.price+serverRespond[0].top_bid.price)/2; + const priceDEF=(serverRespond[0].top_ask.price+serverRespond[1].top_bid.price)/2; + const ratio =priceABC/priceDEF; + const upperBound = 1+0.05; + const lowerBound = 1- 0.05; + + return{ + price_abc:priceABC, + price_def:priceDEF, + ratio, + timestamp:serverRespond[0].timestamp>serverRespond[1].timestamp ? + serverRespond[0].timestamp:serverRespond[1].timestamp, + upper_bound:upperBound, + lower_bound:lowerBound, + trigger_alert:(ratio>upperBound || ratio { const elem = document.getElementsByTagName('perspective-viewer')[0] as unknown as PerspectiveViewerElement; const schema = { - stock: 'string', - top_ask_price: 'float', - top_bid_price: 'float', - timestamp: 'date', + price_abc: 'float', + price_def: 'float', + ratio: 'float', + upper_bound: 'float', + lower_bound: 'float', + trigger_alert: ' float', + timestamp: 'date', }; if (window.perspective && window.perspective.worker()) { @@ -36,13 +39,16 @@ class Graph extends Component { // Load the `table` in the `` DOM reference. elem.load(this.table); elem.setAttribute('view', 'y_line'); - elem.setAttribute('column-pivots', '["stock"]'); elem.setAttribute('row-pivots', '["timestamp"]'); - elem.setAttribute('columns', '["top_ask_price"]'); + elem.setAttribute('columns', '["ratio","lower_bound","upper_bound","trigger_alert"]'); + elem.setAttribute('aggregates', JSON.stringify({ - stock: 'distinctcount', - top_ask_price: 'avg', - top_bid_price: 'avg', + price_abc:'avg', + price_def: 'avg', + ratio: 'avg', + upper_bound: 'avg', + lower_bound : ' avg', + trigger_alert: 'avg', timestamp: 'distinct count', })); } @@ -50,9 +56,9 @@ class Graph extends Component { componentDidUpdate() { if (this.table) { - this.table.update( + this.table.update([ DataManipulator.generateRow(this.props.data), - ); + ] as unknown as TableData); } } }